Simulation Engines TDA571|DIT030 Architecture and design
Tommaso Piazza
1
Simulation Engines TDA571|DIT030 Architecture and design Tommaso - - PowerPoint PPT Presentation
Simulation Engines TDA571|DIT030 Architecture and design Tommaso Piazza 1 Software architecture Today we will examine the subject of software architecture Examples Patterns How do we split our game engine into systems and
1
IDC | Interaction Design Collegium
2
IDC | Interaction Design Collegium
http://www.youtube.com/watch?v=D_p58o6RJ88
3
IDC | Interaction Design Collegium
4
IDC | Interaction Design Collegium
5
IDC | Interaction Design Collegium
Client Server Database
presentation model storage
6
IDC | Interaction Design Collegium
7
IDC | Interaction Design Collegium
8
IDC | Interaction Design Collegium
9
IDC | Interaction Design Collegium
10
IDC | Interaction Design Collegium
11
IDC | Interaction Design Collegium
12
IDC | Interaction Design Collegium
13
IDC | Interaction Design Collegium
14
IDC | Interaction Design Collegium
15
IDC | Interaction Design Collegium
16
IDC | Interaction Design Collegium
17
IDC | Interaction Design Collegium
addition, this instance should be easily accessible.
created and it can provide a way to access the instance.
the global namespace.
using static member functions and variables.
18
IDC | Interaction Design Collegium
class PrinterSpooler { private: static PrinterSpooler *_instance; PrinterSpooler(); // private constructor ... public: static PrinterSpooler *instance() { if (_instance == NULL) _instance = new PrinterSpooler(); return _instance; } ...
19
IDC | Interaction Design Collegium
interface inheritance leads to very rigid couplings between the abstraction interface and the implementations. This can result in major maintenance problems and cross-platform issues.
want to extend them with support for terrain meshes. There are different implementations for the OpenGL and DirectX versions.
20
IDC | Interaction Design Collegium
single bridge between the two, we can avoid these problems.
hides implementation details from clients.
21
IDC | Interaction Design Collegium
22
IDC | Interaction Design Collegium
23
IDC | Interaction Design Collegium
24
IDC | Interaction Design Collegium
Benefits Reuse of layers Support for standardization Dependencies are kept local Exchangeability Drawbacks Changing behavior Lower efficiency Unnecessary work Difficulty of establishing correct granularity
25
IDC | Interaction Design Collegium
26
IDC | Interaction Design Collegium
visual views, the manipulative controls, and the domain model these two operate upon.
Benefits Multiple & synchronized views Pluggable views and controllers Exchangeability of “look and feel” Framework potential (MFC, Swing, etc)
Drawbacks Increased complexity Tied to view & controller View & controller depend on model interface
27
IDC | Interaction Design Collegium
28
IDC | Interaction Design Collegium
29
IDC | Interaction Design Collegium
30
IDC | Interaction Design Collegium
31
IDC | Interaction Design Collegium
implemented by the controller pattern
pattern
32
IDC | Interaction Design Collegium
location or region
33
IDC | Interaction Design Collegium
34
IDC | Interaction Design Collegium
35
IDC | Interaction Design Collegium
design
modify either
i game performance and is given great attention
36
IDC | Interaction Design Collegium
isolate these rules from the objects themselves
multi-tasking kernel, but are sometimes hard-wired
37
IDC | Interaction Design Collegium
hard-wired controller functions called from the main loop
void updateWorld() { for(int i=0; i<numTanks; i++) { if(tanks[i]) { updateTankPhysics(tanks[i]); updateTankAI(tanks[i]); } } ... etc
38
IDC | Interaction Design Collegium
39
IDC | Interaction Design Collegium
40
IDC | Interaction Design Collegium
41
IDC | Interaction Design Collegium
contracts of the capabilities of the component
defined and only to other components
42
IDC | Interaction Design Collegium
43
IDC | Interaction Design Collegium
44
IDC | Interaction Design Collegium
45
IDC | Interaction Design Collegium
//mydog.h #include “idog.h” class MyDog : public iDog { private: // private member functions & variables char* Name; public: virtual bool IsAlive(); virtual char const* GetName(); virtual void SetName(char const *); virtual void Shout(char const *msg); virtual void Run(int Speed, float Direction); virtual bool GetChildren(iObjVector *oBrood); ... public member functions & variables ... };
46
IDC | Interaction Design Collegium
linked library
static iDog *MyDog_Create() { return new MyDog(); }
csLibraryHandle handle = csLoadLibary(“./libdog.so”); iDog (*iDog_Create)() = csGetLibrarySymbol(handle, “MyDog_Create”); iDog *dog = iDog_Create(); printf(“Doggy's name is %s\n”, dog->GetName()); dog->Shout(“bark”); ...
47
IDC | Interaction Design Collegium
<?xml version=”1.0”?> <plugin> <scf> <classes> <class> <name>crystalspace.mygame.mydoc</name> <implementation>MyDog</implementation> <description>My Dog Plugin</description> <requires> <class>crystalspace.graphics3d.</class> </requires> </class> </classes> </scf> </plugin>
48
IDC | Interaction Design Collegium
// dogtest.cpp #include "cssysdef.h" #include "csutil/scf.h" #include "csutil/cfgfile.h" #include "idog.h" static void test_dog() { csRef<iDog> dog = SCF_CREATE_INSTANCE("MyDog", iDog); if (!dog) fprintf(stderr, "No csDog shared class!\n"); else { dog->SetName("Droopy"); dog->Walk(); dog->Shout("hello!"); printf("Dog's name is %s\n", dog->GetName()); } } int main (int argc, char const **argv) { scfInitialize(argc, argv); test_dog(); iSCF::SCF->Finish(); }
49
IDC | Interaction Design Collegium
50
IDC | Interaction Design Collegium
51
IDC | Interaction Design Collegium
52
IDC | Interaction Design Collegium
53