+ All Categories
Home > Documents > Gp Patterns 01

Gp Patterns 01

Date post: 24-Jan-2016
Category:
Upload: atamanciuc-igor
View: 217 times
Download: 0 times
Share this document with a friend
Description:
Gp Patterns 01
Popular Tags:
22
Andrew Nealen, TU Berlin, 2007 1 CG 1 Game Programming Game Programming Project Project Summer Term 2007 Summer Term 2007 Game Programming Patterns Game Programming Patterns Wednesday, May 2nd, 2007 Wednesday, May 2nd, 2007 Images: Chaim Gingold / Chris Hecker www.slackworks.com/~cog
Transcript
Page 1: Gp Patterns 01

Andrew Nealen, TU Berlin, 2007 1

CG

11

Game ProgrammingGame Programming

Project Project Summer Term 2007Summer Term 2007

Game Programming PatternsGame Programming PatternsWednesday, May 2nd, 2007Wednesday, May 2nd, 2007

Images:Chaim Gingold / Chris Heckerwww.slackworks.com/~cog

Page 2: Gp Patterns 01

Andrew Nealen, TU Berlin, 2007 2

CG

22

Game Programming PatternsSources

Game Programming Patterns taken/adapted from • Zachary Booth Simpson

http://www.mine-control.com/zack/patterns/gamepatterns.html

• Inspired by Design Patterns [Gamma et al. 1994]

Page 3: Gp Patterns 01

Andrew Nealen, TU Berlin, 2007 3

CG

33

Model View Controller (MVC)MVC Architecture

Model: The domain-specific representation of the information on which the application operates. Data is to be encapsulated by the Model.View: Renders the model into a form suitable for interactionController: Processes and responds to events, typically user actions, may invoke changes on the model. http://en.wikipedia.org/wiki/

Model-view-controller

Page 4: Gp Patterns 01

Andrew Nealen, TU Berlin, 2007 4

CG

44

Model View Controller (MVC)A Typical Case

The user interacts with the user interface in some way (e.g., user presses a button) A controller handles the input event from the user interface, often via a registered handler or callbackThe controller accesses the model, possibly updating it in a way appropriate to the user's actionA view uses the model to generate an appropriate user interface Repeat...

http://en.wikipedia.org/wiki/Model-view-controller

Page 5: Gp Patterns 01

Andrew Nealen, TU Berlin, 2007 5

CG

55

Model View Controller (MVC)Another View

http://java.sun.com/

Page 6: Gp Patterns 01

Andrew Nealen, TU Berlin, 2007 6

CG

66

Main (Game) Loop

How to Implement MVC in a real-time setting?Solution: Mini Kernel

void updateWorld() { for( int i=0; i<numTanks; i++) {

if( tanks[i] ) {

updateTankPhys(tanks[i]);updateTankAI(tanks[i]);

} }

for( i=0; i<numSoldiers; i++ ) {

... etc ... }

class BaseController { virtual void update() = 0;

} class MissileController :

BaseController { Model &missle, &target; virtual void update(){ missile.pos += missile.vel; missile.vel += (target.pos –missile.pos).norm() * missAcc;

} } void miniKernelDoAllControllers(){

foreach controller in list {controller.update();

} }

Page 7: Gp Patterns 01

Andrew Nealen, TU Berlin, 2007 7

CG

77

Main (Game) LoopC++ Example

bool CGameEngine::RunFrame(GameTime gameTime) {

GetInput();

if (gameTime->HasTickPassed()) { // for each frame// move stuffminiKernel->RunProcesses(gameTime);colManager->resolveCollisions(); // resolve collisions

}

// update cameracamera->Update(); // render stuffrenderer->RenderScene();

}

Notifies controllers via callbacks

Run each controller in the minikernel

Draw the Model

Page 8: Gp Patterns 01

Andrew Nealen, TU Berlin, 2007 8

CG

88

Model (1)Model

Also Known As. Database Records, World Items, World Objects, Item DatabaseIntent. Store the state of an object which exists in the game world.Motivation. Each object tracks its state as the game progresses. Game rules define the transition of these states (Controllerpattern).• Examples of state information that a model might track:

– hitPoints, name, type, position, orientation, size, status, • Examples of methods that a model might implement:

– die(), getHit(), updateAnim(), insertIntoWorldDatabase(), moveTo()

Implementation. Many Model implementations are polymorphic. • Example: each Model extends a BaseModel class. • Care is often given to optimizing Models so that they can be accessed

quickly by the View pattern. (Spatial Index and View)• Models may be fixed sized so as to aggregate more efficiently. See

Model Database.

Page 9: Gp Patterns 01

Andrew Nealen, TU Berlin, 2007 9

CG

99

Model (2)Model Database

Also Known As. World Database, World, LevelIntent. Aggregate the Model objects into one database.Motivation. Collecting the models into one list simplifies several important systems.• The creation and maintenance of indices which speed searching. (See

Spatial Index.) • The inter-object references and the "death problem". (See Controller.) • Some games may have more than one kind of Model Database

simultaneously (i.e. TerrainModelDatabase, ObjectModelDatabase)Implementation. Some games may implement the Model Databaseas a simple array of Model instance pointers. Other games may choose to implement sophisticated memory management or caching solutionsThe world database is almost always indexed to increase search speeds. (See Spatial Index.)

Page 10: Gp Patterns 01

Andrew Nealen, TU Berlin, 2007 10

CG

1010

Model (3)Spatial Index

Intent. Speed searches by position in a Model Database.Motivation. Search a Model Database quickly by location or region.A few examples of spatial searches:• The renderer (see View Pattern) needs to cull objects which can not

be seen. • A trigger (Trigger Controller) needs to determine if the player has

passed over it. • The UI needs to determine what object was clicked on by the mouse. • The physics needs to detect collisions. • A time bomb needs to determine what to damage.

Implementation. There are many implementations of spatial indices, Some common examples:• Binary Space Partition Trees. • X and Y Hashes with threaded collision resolution. • Portals which link isolated spatial indices.

Page 11: Gp Patterns 01

Andrew Nealen, TU Berlin, 2007 11

CG

1111

View (1)View

Also Known As. Renderer, Painter, Viewer, InterfaceIntent. Render the visible Models given a point of view (POV)Motivation. Renderers are often the most custom part of any game; they often define the game's technology. Implementation. The View reads the Model Database via a Spatial Index but does not modify either. Thus, typically:• Model and Spatial Index are read-only by View. • View is invisible to Model and Spatial Index.

Most View implementations translate a Model "state" into an "appearance„• Example: a Model instance "orc1" is de-referenced and is found to be

type==ORC_TYPE and frame==10. The View then finds an artwork pointer via type/frame and draws.

The translation from "state" to "appearance" often has exceptions which clot the render code. (See Render Delegation and Appearance Map.)

Page 12: Gp Patterns 01

Andrew Nealen, TU Berlin, 2007 12

CG

1212

View (2)Render Delegation

Also Known As. Overloaded drawIntent. Pass-off special render cases to Model code.Motivation. Generic View code often becomes clotted with special cases. Render Delegation moves special cases from View into Model code.Implementation. An example clot in View code:

if (typeToDraw==DARTH_VADERS_SHIP) drawSpecialShieldEffect();

• To encapsulate these kinds of special cases, the View delegates the draw back to the Model. For example: objectToDraw->draw(x,y)

• The View may choose to delegate only in certain special cases, often based on type data. For example:if (getType(type)->delegateDraw) object->draw(x,y); else drawSprite(getType(type)->sprite[frame], x, y);

One major drawback of Render Delegation is that the Model code must include all of the render interface, which may be substantial.

Page 13: Gp Patterns 01

Andrew Nealen, TU Berlin, 2007 13

CG

1313

View (3)Appearance Map

Also Known As. State to Appearance Translation, Frame MappingIntent. Isolate Model state from Model appearance to minimize impact on controllers when art changes.Motivation. It is common for Controllers to change the appearance of the Model, especially in animation controllers. Since art may changefrequently it makes sense to separate the state from the appearance.Implementation. Without an appearance map, a controller is likely to change the "frame" of an animation directly. For example:

if (state == WALKING) { model.frame = WALK_START_FRAME + WALK_NUM_FRAMES * (WALK_DURATION / dt) ;

}In this case, if the animation is changed, the three constants WALK_XXX need to be updated and the game recompiled for the change to take effect.

An appearance map eliminates these constants and replaces them with a lookup.Typically, a table is loaded at game initialize time which encodes the translation from state and delta time ("state") to frame ("appearance").

Page 14: Gp Patterns 01

Andrew Nealen, TU Berlin, 2007 14

CG

1414

Controller (1)Controller

Also Known As. Process, Mini-processIntent. Update a Model's state based on circumstanceMotivation. Controllers implement the rules of a game. • They determine how objects behave given a circumstance, and isolate

these rules from the objects themselves.

Implementation. Controllers relate to Models and Views as follows:• Models are read-writeable by Controllers. • Controllers are created and destroyed by Models, but are otherwise

invisible. • Controllers are notified by the View (i.e. GetInput())• Controllers are often associated with only one Model instance.

– For example: animation, AI, pathfinding. In these cases the controller instance is usually created and destroyed synchronously with theassociated model.

Page 15: Gp Patterns 01

Andrew Nealen, TU Berlin, 2007 15

CG

1515

Controller (2)Controller

• Some Controllers inherently have more than one associated Model.

– Example: multi-body physics, target tracking (heat seeking missiles, etc). These controllers often maintain Model references which must be notified / garbage collected when the referenced object dies.

• Controllers are often implemented as "processes" (See Mini-kernel) but may also be implemented as "hard wired updates" in the main loop, especially for large multi-model controllers like physics.

• Some simple Controllers are stateless. – For example, a homing missile controller may just compute the

direction to the target and apply force as necessary. Most controllers, however, are state-aware.

• State-aware Controllers often become significantly complicated with large switch statements.

Page 16: Gp Patterns 01

Andrew Nealen, TU Berlin, 2007 16

CG

1616

Controller (3)Controller State Machine

Intent. Track a complicated state process with a Controller.Motivation. Controllers = complicated state machines, incl. state transitions in response to events. Animation is the canonical example.Implementation. A Controller subclass with list of all state variables.

• Example: an animation might have: currectFrame, currentAnim, lastFrameTime, etc. The process of the controller contains a switch on some primary state.

void Animation::doProcess() { switch( animState ) { case RUNNING_STARTING: case RUNNING: case RUNNING_STOPPING: ...

Each state updates and checks for transition conditions. • Example: RUNNING may check to see if it is at the end of the cycle, if so,

restart it. Some states need double buffering (i.e. physics simulations)State machines can become very complicated and difficult to maintain using this technique.

Page 17: Gp Patterns 01

Andrew Nealen, TU Berlin, 2007 17

CG

1717

Controller (4)Controller State Machine

A possible solution to „switch/case“• Use a State base class, and overide the ControllerUpdate(..) method depending on state of controllervoid CSphereController::Update(GameTime gameTime) {

state->Update(gameTime);}

• State must check for state transition at the end of Update(...)void CIntersectedState::Update(GameTime gameTime) {

....if (thisModel->isNotIntersected()) {

controller->state = new NonIntersectedState()}

Page 18: Gp Patterns 01

Andrew Nealen, TU Berlin, 2007 18

CG

1818

DiagramSubset of a possible prototype

MiniKernel

runProcesses()

RunFrame()

RunProcesses()

List controllersGetInput()

Collisions()

Render()

ModelDBList models

Controllers

Controller

Update()

Model

Model Data n

1

Draw()

Page 19: Gp Patterns 01

Andrew Nealen, TU Berlin, 2007 19

CG

1919

Code Example

My prototype implementation of Game Design Patterns (C++ code)

http://gamedev.nealen.net/intern/docs/gamearch.zip

Step through the code• Start at void CGameEngine::Init();andbool CGameEngine::RunFrame();

Page 20: Gp Patterns 01

Andrew Nealen, TU Berlin, 2007 20

CG

2020

Current Schedule

wed may 02 [LEC] game programming patterns + [PIT]ch game #1wed may 09 [PRE]sentation of playable prototype 1 + discussionwed may 16 [PIT]ch game #2wed may 23 [PRE]sentation of playable prototype 2 + discussionwed may 30 [LEC] particle effects and physics + [SEL]ect game to make…

Page 21: Gp Patterns 01

Andrew Nealen, TU Berlin, 2007 21

CG

2121

Cool Stuff

Links of the week• www.apollogames.ca/apollo/speare/speare• www.soe.ucsc.edu/classes/cmps080k/Winter07/games/finalists/finalist.html

• http://digipen.edu/main/Gallery_Games_2006

• http://www.slackworks.com/~cog/• http://www.peacemakergame.com/game.php

Videos of the week• Odin Sphere (ps2, 2D coolness ☺)

Page 22: Gp Patterns 01

Andrew Nealen, TU Berlin, 2007 22

CG

2222

Rest of Today

Game Pitch #1• Each team has 15 minutes for their pitch +

discussion with the entire group (10 + 5)Discussion after all pitches• Any additional suggestions for the authors ? Next week: • Presentation of 1st playable prototype• Please bring laptops + controllers• Each team should prep a 20 minute presentation• Each team member should be part of the

presentation


Recommended