Initial Commit with small working example.

This commit is contained in:
David Vereb 2017-05-23 16:40:02 -04:00
commit b0e17c96d3
7 changed files with 124 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
a.out
*~

28
Ball.h Normal file
View File

@ -0,0 +1,28 @@
#ifndef BALL_H
#define BALL_H
#include "GraphicsObject.h"
//#include "PhysicsObject.h"
class Ball : public GraphicsObject
{
public:
Ball() : GraphicsObject(&Ball::SetX, this) // pointer to self (specific instance)
{
instance_num = ++instance_counter;
}
static void SetX(int &x, void *instance)
{
Ball *ball = static_cast<Ball*>(instance);
ball->x = ball->instance_num; // prove we're accessing the right one
return;
}
private:
static int instance_counter;
int instance_num;
};
int Ball::instance_counter = 0;
#endif

35
GraphicsObject.h Normal file
View File

@ -0,0 +1,35 @@
#ifndef GRAPHICSOBJECT_H
#define GRAPHICSOBJECT_H
class GraphicsObject
{
public:
// 2nd arg: pointer to callback function that takes a reference to an int as an argument
GraphicsObject(int set_x)
{
x = set_x;
user_data = NULL;
callback = NULL; // function pointer
}
GraphicsObject(void (*set_callback)(int&, void*), void *set_user_data)
{
x = 0;
user_data = set_user_data;
callback = set_callback; // function pointer
}
int X()
{
// If you are SUPPOSED to callback, ...
if(callback)
// ... do so to ask for the new X value
callback(x, user_data);
return x; // either this was just set by callback, or it was always set by constructor.
}
//private:
int x;
void *user_data;
private:
void (*callback)(int&, void*);
};
#endif

20
GraphicsSystem.h Normal file
View File

@ -0,0 +1,20 @@
#ifndef GRAPHICSSYSTEM_H
#define GRAPHICSSYSTEM_H
#include <vector>
#include "GraphicsObject.h"
class GraphicsSystem
{
public:
void AddObject(GraphicsObject *obj)
{
objects.push_back(obj);
}
//private:
std::vector<GraphicsObject*> objects;
};
#endif

16
PhysicsObject.h Normal file
View File

@ -0,0 +1,16 @@
#ifndef PHYSICSOBJECT_H
#define PHYSICSOBJECT_H
#include "IPhysics.h"
class PhysicsObject
: public IPhysics
{
public:
PhysicsObject() : IPhysics(&x) {}
int GetX() { Update(); return x; }
private:
int x;
};
#endif

1
build Executable file
View File

@ -0,0 +1 @@
clang++ main.cpp --std=c++11

22
main.cpp Normal file
View File

@ -0,0 +1,22 @@
#include <iostream>
#include "GraphicsSystem.h"
#include "GraphicsObject.h"
#include "Ball.h"
int main(int argc, char *argv[])
{
GraphicsSystem system;
GraphicsObject graphics_obj(7);
system.AddObject(&graphics_obj);
Ball ball1;
system.AddObject(&ball1);
Ball ball2;
system.AddObject(&ball2);
for(auto obj : system.objects)
for(auto i = 0; i < 5; ++i)
std::cout << obj->X() << std::endl;
}