SlideShare ist ein Scribd-Unternehmen logo
1 von 60
Downloaden Sie, um offline zu lesen
Style & Design Principles
Chapter 03: Component-Based Entity Systems
Nick Prühs
5 Minute Review Session
• What’s the difference between inheritance and
aggregation?
• Explain the three types of polymorphism!
• What’s the difference between cohesion and
coupling?
• What are software design patterns?
• Explain three types of software design patterns,
and name an example for each one!
2 / 58
Assignment Solution #2
DEMO
3 / 58
Objectives
• To understand the disadvantages of inheritance-
based game models
• To learn how to build an aggregation-based game
models
• To understand the advantages and disadvantages of
aggregation-based game models
4 / 58
“Say you’re an engineer…
… set out to create a new Game Object System from scratch, and you’re going to ‘do it right the first time’. You
talk to your designer and say ‘What kind of content are we going to have in this game?’
They respond with ‘Oh lots of stuff, trees, and birds, and bushes, and keys and locks and … <trailing off>’
And your eyes glaze over as you start thinking of fancy C++ ways to solve the problem.
The object oriented programming sages tell you to try to determine Is-A relationships and abstract functionality
and all that other fun stuff. You go to the book store and buy a C++ book just to be sure, and it tells you to fire
up your $5000 UML editor. [...]”
- Scott Bilas
5 / 58
Entities
6 / 57
Entities
7 / 57
Entities
8 / 57
Entities
9 / 57
Entities
10 / 57
Entities
11 / 57
Entities
• Object in your game world
• Can (or cannot)…
• be visible
• move around
• attack
• explode
• be targeted
• become selected
• follow a path
• Common across all genres
12 / 58
Entities
13 / 58
Approach #1: Inheritance
14 / 57
Approach #1: Inheritance
• Entity base class
• That class and its subclasses encapsulate the main
game logic
15 / 58
Example #1: Unreal Engine 3
• Base class Actor
• Rendering
• Animation
• Sound
• Physics
• Almost everything in Unreal is an Actor
• Pawn extends by taking damage
• Projectile extends by spawning impact effects
16 / 58
Drawbacks of
inheritance-based game models
• Diamond of Death
17 / 58
Drawbacks of
inheritance-based game models
• Code added to the root of the inheritance tree
causes big overhead
• Code added to the leafs of the tree tends to get
copied
• Root and leaf classes tend to get very big
18 / 58
Where is Waldo?
public override void Update(float dt)
{
this.SystemManager.Update(dt);
this.EventManager.ProcessEvents(dt);
}
19 / 58
Where is Waldo?
public override void Update(float dt)
{
this.SystemManager.Update(dt);
this.EventManager.ProcessEvents(dt);
}
20 / 58
Where is Waldo?
public override void Update(float dt)
{
base.Update(dt);
this.SystemManager.Update(dt);
this.EventManager.ProcessEvents(dt);
}
21 / 58
Drawbacks of
inheritance-based game models
• Always need to understand all base classes along
the inheritance tree
• Impossible to enforce calling base class functions
• Someone will forget it. Trust me.
• And you’re gonna spend your whole evening finding that one
missing base.Update().
• Deep class hierarchies will more likely run into call
order issues
22 / 58
Inheritance-based game
models are…
• … difficult to develop
• … difficult to maintain
• … difficult to extend
23 / 58
“There are probably
hundreds of ways…
… you could decompose your systems and come up with a set of
classes […], and eventually, all of them are wrong. This isn’t to say
that they won’t work, but games are constantly changing,
constantly invalidating your carefully planned designs. [...]
So you hand off your new Game Object System and go work on
other things.
Then one day your designer says that they want a new type of
“alien” asteroid that acts just like a heat seeking missile, except it’s
still an asteroid.”
- Scott Bilas
24 / 58
“alien” asteroid
25 / 57
Approach #2: Aggregation
26 / 57
Approach #2: Aggregation
27 / 57
Approach #2: Aggregation
• Popular since Gas Powered Games’ Dungeon Siege
• Introduced long before
• Entities are aggregations of components
• Which in turn encapsulate independent functionality
• Corresponds to recommendations by the Gang of Four
• “favor object composition over class inheritance”
• Similar approach is used by the Unity3D game engine
• Just for clarification: Unreal uses components as well, called
ActorComponent
• Got much more prominent in latest UDK release
28 / 58
Approach #2a
• Create an Entity class
• Add references to all available components
• Has obvious disadvantages:
• Many component references will be null pointers for
most entities
• Big unnecessary memory overhead
• Entity class has to be updated each time a new
component is introduced
29 / 58
Approach #2b
• Create an Entity class
• Introduce a common base class for components
• Entities hold a collection of Component objects
• Reduced the memory overhead
• Increased extensibility
• Already gets close to an optimal solution
• easy to build, maintain and debug
• easy to implement new design ideas without breaking
existing code
30 / 58
However, we can do better.
31 / 58
Approach #2c: Entity Systems
32 / 57
Approach #2c: Entity Systems
33 / 58
Approach #2c: Entity Systems
• Game entities are nothing more than just an id
• Thus, no data or methods on entities
• No methods on components, either: all
functionality goes into what is called a system
• PhysicsSystem
• HealthSystem
• FightSystem
• Entirely operate on their corresponding
components
34 / 58
“All the data goes into the
Components.
All of it. Think you can take some “really common”
data, e. g. the x-/y-/z-coordinates of the in-game
object, and put it into the Entity itself? Nope. Don’t
go there. As soon as you start migrating data into the
Entity, you’ve lost. By definition the only valid place
for the data is inside the Component.”
- Adam Martin
35 / 58
Example #2: Simple Fight
36 / 58
Example #2: Simple Fight
37 / 58
Example #2: Simple Fight
38 / 58
Example #2: Simple Fight
39 / 58
Example #2: Simple Fight
40 / 58
Example #2: Simple Fight
41 / 58
Example #2: Simple Fight
42 / 58
Example #2: Simple Fight
43 / 58
Example #2: Simple Fight
44 / 58
Example #2: Simple Fight
45 / 58
Inter-System Communication
Systems communicate by the means of events, only.
• No coupling between systems
• Easy to add or remove systems at any time
• Great architectural advantage for general game
features
• Need multiplayer? Just send the events over the network!
• Need AI? Just make it create events which are handled just
like player input is!
• Need replays? Just write all events with timestamps to a file!
46 / 58
Inter-System Communication
47 / 57
Entity Systems –
Implementation
DEMO
48 / 58
Advantages of Entity Systems
• Update order is obvious
• Components can easily be pooled and re-used
• Independent systems can be updated by separate
threads
• Data can easily be serialized and stored in a
database
49 / 58
Disadvantages of
Entity Systems (?)
• Lookups cause performance hit
• Resist the urge to add cross-component references – this
would make you lose all of the advantages mentioned
before
• Just don’t flood your system with unnecessary
component types – just as you would always do
• Misbelief that it takes longer to “get the job done”
• Used at the InnoGames Game Jam #3 for creating a
multi-platform multi-player real-time tactics game in just
48 hours – spending the little extra effort at the
beginning pays off
• Always.
50 / 58
Future Prospects
• Attribute Tables
• store arbitrary key-value-pairs
• used for initializing all components of an entity
51 / 57
<AttributeTable>
<Attribute keyType="System.String" valueType="System.Single">
<Key>EnemyHealthModificationComponent.EnemyHealthModifier</Key>
<Value>-3</Value>
</Attribute>
<Attribute keyType="System.String" valueType="System.String">
<Key>ActionComponent.Name</Key>
<Value>Take that!</Value>
</Attribute>
</AttributeTable>
Future Prospects
• Blueprints
• consist of a list of components and an attribute table
• created with some kind of editor tool by designers
• used for creating entites at run-time
52 / 57
<Blueprint>
<ComponentTypes>
<ComponentType>FreudBot.Logic.Components.ActionComponent</ComponentType>
<ComponentType>FreudBot.Logic.Components.EnemyHealthModificationComponent</ComponentType>
</ComponentTypes>
<AttributeTable>
<Attribute keyType="System.String" valueType="System.Single">
<Key>EnemyHealthModificationComponent.EnemyHealthModifier</Key>
<Value>-3</Value>
</Attribute>
<Attribute keyType="System.String" valueType="System.String">
<Key>ActionComponent.Name</Key>
<Value>Take that!</Value>
</Attribute>
</AttributeTable>
</Blueprint>
Future Prospects
53 / 57
StarCraft II Galaxy Editor
Future Prospects
54 / 57
StarCraft II Galaxy Editor
Future Prospects
• Hierarchical Attribute Tables
• used for overloading blueprints with specific entity attribute
values
• e.g. reduced initial health
55 / 57
Future Prospects
56 / 57
StarCraft II Galaxy Editor
Future Prospects
public int CreateEntity(Blueprint blueprint, IAttributeTable configuration)
{
int entityId = this.CreateEntity();
// Setup attribute table.
HierarchicalAttributeTable attributeTable = new HierarchicalAttributeTable();
attributeTable.AddParent(blueprint.GetAttributeTable());
attributeTable.AddParent(configuration);
// Add components.
foreach (Type componentType in blueprint.GetAllComponentTypes())
{
// Create component.
IEntityComponent component = (IEntityComponent)Activator.CreateInstance(componentType);
// Add component to entity.
this.AddComponent(entityId, component);
// Initialize component with the attribute table data.
component.InitComponent(attributeTable);
}
// Raise event.
this.game.EventManager.QueueEvent(FrameworkEventType.EntityInitialized, entityId);
return entityId;
}
57 / 57
Takeaway
• inheritance-based game models show a lot of
disadvantages
• entity systems are easy to maintain and debug
• provide great extensibility without the necessity of
modifying existing code
• show better performance characteristics for both
memory and CPU load
• easy to implement commonly used features
• scripting
• serialization
• logging
58 / 57
References
• Mick West. Evolve Your Hierarchy. http://cowboyprogramming.com/2007/01/05/evolve-your-
heirachy/, January 5, 2007.
• Levi Baker. Entity Systems Part 1: Entity and EntityManager.
http://blog.chronoclast.com/2010/12/entity-systems-part-1-entity-and.html, December 24,
2010.
• Kyle Wilson. Game Object Structure: Inheritance vs. Aggregation.
http://gamearchitect.net/Articles/GameObjects1.html, July 3, 2002.
• Adam Martin. Entity Systems are the future of MMOG development – Part 1. http://t-
machine.org/index.php/2007/09/03/entity-systems-are-the-future-of-mmog-development-part-
1/, September 3, 2007.
• Adam Martin. Entity Systems: what makes good Components? good Entities? http://t-
machine.org/index.php/2012/03/16/entity-systems-what-makes-good-components-good-
entities/, March 16, 2012.
• Scott Bilas. A Data-Driven Game Object System.
http://scottbilas.com/files/2002/gdc_san_jose/game_objects_slides_with_notes.pdf, Slides,
GDC 2002.
• Scott Bilas. A Data-Driven Game Object System.
http://scottbilas.com/files/2002/gdc_san_jose/game_objects_paper.pdf, Paper, GDC 2002.
• Insomniac Games. A Dynamic Component Architecture for High Performance Gameplay.
http://www.insomniacgames.com/a-dynamic-component-architecture-for-high-performance-
gameplay/, June 1, 2010.
59 / 57
Thank you for your attention!
Contact
Mail
dev@npruehs.de
Blog
http://www.npruehs.de
Twitter
@npruehs
Github
https://github.com/npruehs
60 / 58

Weitere ähnliche Inhalte

Was ist angesagt?

Game genres
Game genresGame genres
Game genresaealey
 
Cerny method
Cerny methodCerny method
Cerny methodTim Holt
 
Unreal Engine Basics 04 - Behavior Trees
Unreal Engine Basics 04 - Behavior TreesUnreal Engine Basics 04 - Behavior Trees
Unreal Engine Basics 04 - Behavior TreesNick Pruehs
 
Creating a Game Design Document
Creating a Game Design DocumentCreating a Game Design Document
Creating a Game Design DocumentKarl Kapp
 
Scene Graphs & Component Based Game Engines
Scene Graphs & Component Based Game EnginesScene Graphs & Component Based Game Engines
Scene Graphs & Component Based Game EnginesBryan Duggan
 
Converting your game to DOTS – Unite Copenhagen 2019
Converting your game to DOTS – Unite Copenhagen 2019Converting your game to DOTS – Unite Copenhagen 2019
Converting your game to DOTS – Unite Copenhagen 2019Unity Technologies
 
GDC 2019 : Deconstructor of Fun Breaking Down Top Mobile Titles
GDC 2019 : Deconstructor of Fun Breaking Down Top Mobile TitlesGDC 2019 : Deconstructor of Fun Breaking Down Top Mobile Titles
GDC 2019 : Deconstructor of Fun Breaking Down Top Mobile TitlesAdam Telfer
 
Game Design Fundamentals: The Formal Elements
Game Design Fundamentals: The  Formal ElementsGame Design Fundamentals: The  Formal Elements
Game Design Fundamentals: The Formal ElementsChristina Wodtke
 
Game design through the eyes of gaming history
Game design through the eyes of gaming historyGame design through the eyes of gaming history
Game design through the eyes of gaming historyDori Adar
 
GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...
GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...
GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...Gerke Max Preussner
 
Introduction to Level Design
Introduction to Level DesignIntroduction to Level Design
Introduction to Level DesignRico Lemba
 
Unity Introduction
Unity IntroductionUnity Introduction
Unity IntroductionJuwal Bose
 
Idle Clicker Games Presentation (Casual Connect USA 2017)
Idle Clicker Games Presentation (Casual Connect USA 2017)Idle Clicker Games Presentation (Casual Connect USA 2017)
Idle Clicker Games Presentation (Casual Connect USA 2017)David Piao Chiu
 
New tools and services to take your live ops to the next level
New tools and services to take your live ops to the next levelNew tools and services to take your live ops to the next level
New tools and services to take your live ops to the next levelCrystin Cox
 
Quest for Progress (GDC Europe 2016)
Quest for Progress (GDC Europe 2016)Quest for Progress (GDC Europe 2016)
Quest for Progress (GDC Europe 2016)Anthony Pecorella
 
players journey: 5-step design framework for longterm engagement
players journey: 5-step design framework for longterm engagementplayers journey: 5-step design framework for longterm engagement
players journey: 5-step design framework for longterm engagementAmy Jo Kim
 
GDC 2016: Modular Level Design of Fallout 4
GDC 2016: Modular Level Design of Fallout 4 GDC 2016: Modular Level Design of Fallout 4
GDC 2016: Modular Level Design of Fallout 4 Joel Burgess
 

Was ist angesagt? (20)

Game genres
Game genresGame genres
Game genres
 
Cerny method
Cerny methodCerny method
Cerny method
 
Unreal Engine Basics 04 - Behavior Trees
Unreal Engine Basics 04 - Behavior TreesUnreal Engine Basics 04 - Behavior Trees
Unreal Engine Basics 04 - Behavior Trees
 
Creating a Game Design Document
Creating a Game Design DocumentCreating a Game Design Document
Creating a Game Design Document
 
Scene Graphs & Component Based Game Engines
Scene Graphs & Component Based Game EnginesScene Graphs & Component Based Game Engines
Scene Graphs & Component Based Game Engines
 
Converting your game to DOTS – Unite Copenhagen 2019
Converting your game to DOTS – Unite Copenhagen 2019Converting your game to DOTS – Unite Copenhagen 2019
Converting your game to DOTS – Unite Copenhagen 2019
 
GDC 2019 : Deconstructor of Fun Breaking Down Top Mobile Titles
GDC 2019 : Deconstructor of Fun Breaking Down Top Mobile TitlesGDC 2019 : Deconstructor of Fun Breaking Down Top Mobile Titles
GDC 2019 : Deconstructor of Fun Breaking Down Top Mobile Titles
 
Game Design Fundamentals: The Formal Elements
Game Design Fundamentals: The  Formal ElementsGame Design Fundamentals: The  Formal Elements
Game Design Fundamentals: The Formal Elements
 
Unity3D Programming
Unity3D ProgrammingUnity3D Programming
Unity3D Programming
 
Game design through the eyes of gaming history
Game design through the eyes of gaming historyGame design through the eyes of gaming history
Game design through the eyes of gaming history
 
GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...
GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...
GDC Europe 2014: Unreal Engine 4 for Programmers - Lessons Learned & Things t...
 
Introduction to Level Design
Introduction to Level DesignIntroduction to Level Design
Introduction to Level Design
 
Game Design: Engagement
Game Design: EngagementGame Design: Engagement
Game Design: Engagement
 
Unity Introduction
Unity IntroductionUnity Introduction
Unity Introduction
 
Idle Clicker Games Presentation (Casual Connect USA 2017)
Idle Clicker Games Presentation (Casual Connect USA 2017)Idle Clicker Games Presentation (Casual Connect USA 2017)
Idle Clicker Games Presentation (Casual Connect USA 2017)
 
New tools and services to take your live ops to the next level
New tools and services to take your live ops to the next levelNew tools and services to take your live ops to the next level
New tools and services to take your live ops to the next level
 
Introduction to Game Design
Introduction to Game DesignIntroduction to Game Design
Introduction to Game Design
 
Quest for Progress (GDC Europe 2016)
Quest for Progress (GDC Europe 2016)Quest for Progress (GDC Europe 2016)
Quest for Progress (GDC Europe 2016)
 
players journey: 5-step design framework for longterm engagement
players journey: 5-step design framework for longterm engagementplayers journey: 5-step design framework for longterm engagement
players journey: 5-step design framework for longterm engagement
 
GDC 2016: Modular Level Design of Fallout 4
GDC 2016: Modular Level Design of Fallout 4 GDC 2016: Modular Level Design of Fallout 4
GDC 2016: Modular Level Design of Fallout 4
 

Andere mochten auch

Implementation of Thorup's Linear Time Algorithm for Undirected Single Source...
Implementation of Thorup's Linear Time Algorithm for Undirected Single Source...Implementation of Thorup's Linear Time Algorithm for Undirected Single Source...
Implementation of Thorup's Linear Time Algorithm for Undirected Single Source...Nick Pruehs
 
Entity System Architecture with Unity - Unity User Group Berlin
Entity System Architecture with Unity - Unity User Group BerlinEntity System Architecture with Unity - Unity User Group Berlin
Entity System Architecture with Unity - Unity User Group BerlinSimon Schmid
 
Game Programming 04 - Style & Design Principles
Game Programming 04 - Style & Design PrinciplesGame Programming 04 - Style & Design Principles
Game Programming 04 - Style & Design PrinciplesNick Pruehs
 
Game Programming 03 - Git Flow
Game Programming 03 - Git FlowGame Programming 03 - Git Flow
Game Programming 03 - Git FlowNick Pruehs
 
Game Programming 08 - Tool Development
Game Programming 08 - Tool DevelopmentGame Programming 08 - Tool Development
Game Programming 08 - Tool DevelopmentNick Pruehs
 
Game Programming 13 - Debugging & Performance Optimization
Game Programming 13 - Debugging & Performance OptimizationGame Programming 13 - Debugging & Performance Optimization
Game Programming 13 - Debugging & Performance OptimizationNick Pruehs
 
Game Models - A Different Approach
Game Models - A Different ApproachGame Models - A Different Approach
Game Models - A Different ApproachNick Pruehs
 
Game Programming 10 - Localization
Game Programming 10 - LocalizationGame Programming 10 - Localization
Game Programming 10 - LocalizationNick Pruehs
 
What Would Blizzard Do
What Would Blizzard DoWhat Would Blizzard Do
What Would Blizzard DoNick Pruehs
 
School For Games 2015 - Unity Engine Basics
School For Games 2015 - Unity Engine BasicsSchool For Games 2015 - Unity Engine Basics
School For Games 2015 - Unity Engine BasicsNick Pruehs
 
Tool Development A - Git
Tool Development A - GitTool Development A - Git
Tool Development A - GitNick Pruehs
 
Game Programming 09 - AI
Game Programming 09 - AIGame Programming 09 - AI
Game Programming 09 - AINick Pruehs
 
Designing an actor model game architecture with Pony
Designing an actor model game architecture with PonyDesigning an actor model game architecture with Pony
Designing an actor model game architecture with PonyNick Pruehs
 
Entity System Architecture with Unity - Unite Europe 2015
Entity System Architecture with Unity - Unite Europe 2015Entity System Architecture with Unity - Unite Europe 2015
Entity System Architecture with Unity - Unite Europe 2015Simon Schmid
 
Game Programming 12 - Shaders
Game Programming 12 - ShadersGame Programming 12 - Shaders
Game Programming 12 - ShadersNick Pruehs
 
Clean, fast and simple with Entitas and Unity - Unite Melbourne 2016
Clean, fast and simple with Entitas and Unity - Unite Melbourne 2016Clean, fast and simple with Entitas and Unity - Unite Melbourne 2016
Clean, fast and simple with Entitas and Unity - Unite Melbourne 2016Simon Schmid
 
Game Programming 11 - Game Physics
Game Programming 11 - Game PhysicsGame Programming 11 - Game Physics
Game Programming 11 - Game PhysicsNick Pruehs
 
Game Development Challenges
Game Development ChallengesGame Development Challenges
Game Development ChallengesNick Pruehs
 
Eight Rules for Making Your First Great Game
Eight Rules for Making Your First Great GameEight Rules for Making Your First Great Game
Eight Rules for Making Your First Great GameNick Pruehs
 
Scrum - but... Agile Game Development in Small Teams
Scrum - but... Agile Game Development in Small TeamsScrum - but... Agile Game Development in Small Teams
Scrum - but... Agile Game Development in Small TeamsNick Pruehs
 

Andere mochten auch (20)

Implementation of Thorup's Linear Time Algorithm for Undirected Single Source...
Implementation of Thorup's Linear Time Algorithm for Undirected Single Source...Implementation of Thorup's Linear Time Algorithm for Undirected Single Source...
Implementation of Thorup's Linear Time Algorithm for Undirected Single Source...
 
Entity System Architecture with Unity - Unity User Group Berlin
Entity System Architecture with Unity - Unity User Group BerlinEntity System Architecture with Unity - Unity User Group Berlin
Entity System Architecture with Unity - Unity User Group Berlin
 
Game Programming 04 - Style & Design Principles
Game Programming 04 - Style & Design PrinciplesGame Programming 04 - Style & Design Principles
Game Programming 04 - Style & Design Principles
 
Game Programming 03 - Git Flow
Game Programming 03 - Git FlowGame Programming 03 - Git Flow
Game Programming 03 - Git Flow
 
Game Programming 08 - Tool Development
Game Programming 08 - Tool DevelopmentGame Programming 08 - Tool Development
Game Programming 08 - Tool Development
 
Game Programming 13 - Debugging & Performance Optimization
Game Programming 13 - Debugging & Performance OptimizationGame Programming 13 - Debugging & Performance Optimization
Game Programming 13 - Debugging & Performance Optimization
 
Game Models - A Different Approach
Game Models - A Different ApproachGame Models - A Different Approach
Game Models - A Different Approach
 
Game Programming 10 - Localization
Game Programming 10 - LocalizationGame Programming 10 - Localization
Game Programming 10 - Localization
 
What Would Blizzard Do
What Would Blizzard DoWhat Would Blizzard Do
What Would Blizzard Do
 
School For Games 2015 - Unity Engine Basics
School For Games 2015 - Unity Engine BasicsSchool For Games 2015 - Unity Engine Basics
School For Games 2015 - Unity Engine Basics
 
Tool Development A - Git
Tool Development A - GitTool Development A - Git
Tool Development A - Git
 
Game Programming 09 - AI
Game Programming 09 - AIGame Programming 09 - AI
Game Programming 09 - AI
 
Designing an actor model game architecture with Pony
Designing an actor model game architecture with PonyDesigning an actor model game architecture with Pony
Designing an actor model game architecture with Pony
 
Entity System Architecture with Unity - Unite Europe 2015
Entity System Architecture with Unity - Unite Europe 2015Entity System Architecture with Unity - Unite Europe 2015
Entity System Architecture with Unity - Unite Europe 2015
 
Game Programming 12 - Shaders
Game Programming 12 - ShadersGame Programming 12 - Shaders
Game Programming 12 - Shaders
 
Clean, fast and simple with Entitas and Unity - Unite Melbourne 2016
Clean, fast and simple with Entitas and Unity - Unite Melbourne 2016Clean, fast and simple with Entitas and Unity - Unite Melbourne 2016
Clean, fast and simple with Entitas and Unity - Unite Melbourne 2016
 
Game Programming 11 - Game Physics
Game Programming 11 - Game PhysicsGame Programming 11 - Game Physics
Game Programming 11 - Game Physics
 
Game Development Challenges
Game Development ChallengesGame Development Challenges
Game Development Challenges
 
Eight Rules for Making Your First Great Game
Eight Rules for Making Your First Great GameEight Rules for Making Your First Great Game
Eight Rules for Making Your First Great Game
 
Scrum - but... Agile Game Development in Small Teams
Scrum - but... Agile Game Development in Small TeamsScrum - but... Agile Game Development in Small Teams
Scrum - but... Agile Game Development in Small Teams
 

Ähnlich wie Style & Design Principles 03 - Component-Based Entity Systems

ITCamp 2011 - Catalin Zima - Common pitfalls in Windows Phone 7 game development
ITCamp 2011 - Catalin Zima - Common pitfalls in Windows Phone 7 game developmentITCamp 2011 - Catalin Zima - Common pitfalls in Windows Phone 7 game development
ITCamp 2011 - Catalin Zima - Common pitfalls in Windows Phone 7 game developmentITCamp
 
Understanding and improving games through machine learning - Natasha Latysheva
Understanding and improving games through machine learning - Natasha LatyshevaUnderstanding and improving games through machine learning - Natasha Latysheva
Understanding and improving games through machine learning - Natasha LatyshevaLauren Cormack
 
GDC 2010 - A Dynamic Component Architecture for High Performance Gameplay
GDC 2010 - A Dynamic Component Architecture for High Performance GameplayGDC 2010 - A Dynamic Component Architecture for High Performance Gameplay
GDC 2010 - A Dynamic Component Architecture for High Performance GameplayTerrance Cohen
 
Debugging Complex Systems - Erlang Factory SF 2015
Debugging Complex Systems - Erlang Factory SF 2015Debugging Complex Systems - Erlang Factory SF 2015
Debugging Complex Systems - Erlang Factory SF 2015lpgauth
 
Шлигін Олександр “Розробка ігор в Unity загальні помилки” GameDev Conference ...
Шлигін Олександр “Розробка ігор в Unity загальні помилки” GameDev Conference ...Шлигін Олександр “Розробка ігор в Unity загальні помилки” GameDev Conference ...
Шлигін Олександр “Розробка ігор в Unity загальні помилки” GameDev Conference ...Lviv Startup Club
 
Style & Design Principles 02 - Design Patterns
Style & Design Principles 02 - Design PatternsStyle & Design Principles 02 - Design Patterns
Style & Design Principles 02 - Design PatternsNick Pruehs
 
Debugging multiplayer games
Debugging multiplayer gamesDebugging multiplayer games
Debugging multiplayer gamesMaciej Siniło
 
Create a Scalable and Destructible World in HITMAN 2*
Create a Scalable and Destructible World in HITMAN 2*Create a Scalable and Destructible World in HITMAN 2*
Create a Scalable and Destructible World in HITMAN 2*Intel® Software
 
Optimizing mobile applications - Ian Dundore, Mark Harkness
Optimizing mobile applications - Ian Dundore, Mark HarknessOptimizing mobile applications - Ian Dundore, Mark Harkness
Optimizing mobile applications - Ian Dundore, Mark Harknessozlael ozlael
 
PowerShell - Be A Cool Blue Kid
PowerShell - Be A Cool Blue KidPowerShell - Be A Cool Blue Kid
PowerShell - Be A Cool Blue KidMatthew Johnson
 
Parallelizing Conqueror's Blade
Parallelizing Conqueror's BladeParallelizing Conqueror's Blade
Parallelizing Conqueror's BladeIntel® Software
 
JProfiler / an introduction
JProfiler / an introductionJProfiler / an introduction
JProfiler / an introductionTommaso Torti
 
cf.Objective() 2017 - Design patterns - Brad Wood
cf.Objective() 2017 - Design patterns - Brad Woodcf.Objective() 2017 - Design patterns - Brad Wood
cf.Objective() 2017 - Design patterns - Brad WoodOrtus Solutions, Corp
 
GDC 2010 - A Dynamic Component Architecture for High Performance Gameplay - M...
GDC 2010 - A Dynamic Component Architecture for High Performance Gameplay - M...GDC 2010 - A Dynamic Component Architecture for High Performance Gameplay - M...
GDC 2010 - A Dynamic Component Architecture for High Performance Gameplay - M...Terrance Cohen
 
Mapping Detection Coverage
Mapping Detection CoverageMapping Detection Coverage
Mapping Detection CoverageJared Atkinson
 
How and what to unit test
How and what to unit testHow and what to unit test
How and what to unit testEugenio Lentini
 

Ähnlich wie Style & Design Principles 03 - Component-Based Entity Systems (20)

ITCamp 2011 - Catalin Zima - Common pitfalls in Windows Phone 7 game development
ITCamp 2011 - Catalin Zima - Common pitfalls in Windows Phone 7 game developmentITCamp 2011 - Catalin Zima - Common pitfalls in Windows Phone 7 game development
ITCamp 2011 - Catalin Zima - Common pitfalls in Windows Phone 7 game development
 
Understanding and improving games through machine learning - Natasha Latysheva
Understanding and improving games through machine learning - Natasha LatyshevaUnderstanding and improving games through machine learning - Natasha Latysheva
Understanding and improving games through machine learning - Natasha Latysheva
 
Soc research
Soc researchSoc research
Soc research
 
GDC 2010 - A Dynamic Component Architecture for High Performance Gameplay
GDC 2010 - A Dynamic Component Architecture for High Performance GameplayGDC 2010 - A Dynamic Component Architecture for High Performance Gameplay
GDC 2010 - A Dynamic Component Architecture for High Performance Gameplay
 
Debugging Complex Systems - Erlang Factory SF 2015
Debugging Complex Systems - Erlang Factory SF 2015Debugging Complex Systems - Erlang Factory SF 2015
Debugging Complex Systems - Erlang Factory SF 2015
 
Шлигін Олександр “Розробка ігор в Unity загальні помилки” GameDev Conference ...
Шлигін Олександр “Розробка ігор в Unity загальні помилки” GameDev Conference ...Шлигін Олександр “Розробка ігор в Unity загальні помилки” GameDev Conference ...
Шлигін Олександр “Розробка ігор в Unity загальні помилки” GameDev Conference ...
 
Style & Design Principles 02 - Design Patterns
Style & Design Principles 02 - Design PatternsStyle & Design Principles 02 - Design Patterns
Style & Design Principles 02 - Design Patterns
 
Debugging multiplayer games
Debugging multiplayer gamesDebugging multiplayer games
Debugging multiplayer games
 
Create a Scalable and Destructible World in HITMAN 2*
Create a Scalable and Destructible World in HITMAN 2*Create a Scalable and Destructible World in HITMAN 2*
Create a Scalable and Destructible World in HITMAN 2*
 
0507 057 01 98 * Adana Cukurova Klima Servisleri
0507 057 01 98 * Adana Cukurova Klima Servisleri0507 057 01 98 * Adana Cukurova Klima Servisleri
0507 057 01 98 * Adana Cukurova Klima Servisleri
 
Optimizing mobile applications - Ian Dundore, Mark Harkness
Optimizing mobile applications - Ian Dundore, Mark HarknessOptimizing mobile applications - Ian Dundore, Mark Harkness
Optimizing mobile applications - Ian Dundore, Mark Harkness
 
PowerShell - Be A Cool Blue Kid
PowerShell - Be A Cool Blue KidPowerShell - Be A Cool Blue Kid
PowerShell - Be A Cool Blue Kid
 
Parallelizing Conqueror's Blade
Parallelizing Conqueror's BladeParallelizing Conqueror's Blade
Parallelizing Conqueror's Blade
 
JProfiler / an introduction
JProfiler / an introductionJProfiler / an introduction
JProfiler / an introduction
 
ChatGPT in Education
ChatGPT in EducationChatGPT in Education
ChatGPT in Education
 
Mastermind design walkthrough
Mastermind design walkthroughMastermind design walkthrough
Mastermind design walkthrough
 
cf.Objective() 2017 - Design patterns - Brad Wood
cf.Objective() 2017 - Design patterns - Brad Woodcf.Objective() 2017 - Design patterns - Brad Wood
cf.Objective() 2017 - Design patterns - Brad Wood
 
GDC 2010 - A Dynamic Component Architecture for High Performance Gameplay - M...
GDC 2010 - A Dynamic Component Architecture for High Performance Gameplay - M...GDC 2010 - A Dynamic Component Architecture for High Performance Gameplay - M...
GDC 2010 - A Dynamic Component Architecture for High Performance Gameplay - M...
 
Mapping Detection Coverage
Mapping Detection CoverageMapping Detection Coverage
Mapping Detection Coverage
 
How and what to unit test
How and what to unit testHow and what to unit test
How and what to unit test
 

Mehr von Nick Pruehs

Unreal Engine Basics 06 - Animation, Audio, Visual Effects
Unreal Engine Basics 06 - Animation, Audio, Visual EffectsUnreal Engine Basics 06 - Animation, Audio, Visual Effects
Unreal Engine Basics 06 - Animation, Audio, Visual EffectsNick Pruehs
 
Unreal Engine Basics 03 - Gameplay
Unreal Engine Basics 03 - GameplayUnreal Engine Basics 03 - Gameplay
Unreal Engine Basics 03 - GameplayNick Pruehs
 
Unreal Engine Basics 02 - Unreal Editor
Unreal Engine Basics 02 - Unreal EditorUnreal Engine Basics 02 - Unreal Editor
Unreal Engine Basics 02 - Unreal EditorNick Pruehs
 
Game Programming - Cloud Development
Game Programming - Cloud DevelopmentGame Programming - Cloud Development
Game Programming - Cloud DevelopmentNick Pruehs
 
Game Programming - Git
Game Programming - GitGame Programming - Git
Game Programming - GitNick Pruehs
 
Game Programming 06 - Automated Testing
Game Programming 06 - Automated TestingGame Programming 06 - Automated Testing
Game Programming 06 - Automated TestingNick Pruehs
 
Game Programming 05 - Development Tools
Game Programming 05 - Development ToolsGame Programming 05 - Development Tools
Game Programming 05 - Development ToolsNick Pruehs
 
Game Programming 01 - Introduction
Game Programming 01 - IntroductionGame Programming 01 - Introduction
Game Programming 01 - IntroductionNick Pruehs
 
Game Programming 00 - Exams
Game Programming 00 - ExamsGame Programming 00 - Exams
Game Programming 00 - ExamsNick Pruehs
 

Mehr von Nick Pruehs (9)

Unreal Engine Basics 06 - Animation, Audio, Visual Effects
Unreal Engine Basics 06 - Animation, Audio, Visual EffectsUnreal Engine Basics 06 - Animation, Audio, Visual Effects
Unreal Engine Basics 06 - Animation, Audio, Visual Effects
 
Unreal Engine Basics 03 - Gameplay
Unreal Engine Basics 03 - GameplayUnreal Engine Basics 03 - Gameplay
Unreal Engine Basics 03 - Gameplay
 
Unreal Engine Basics 02 - Unreal Editor
Unreal Engine Basics 02 - Unreal EditorUnreal Engine Basics 02 - Unreal Editor
Unreal Engine Basics 02 - Unreal Editor
 
Game Programming - Cloud Development
Game Programming - Cloud DevelopmentGame Programming - Cloud Development
Game Programming - Cloud Development
 
Game Programming - Git
Game Programming - GitGame Programming - Git
Game Programming - Git
 
Game Programming 06 - Automated Testing
Game Programming 06 - Automated TestingGame Programming 06 - Automated Testing
Game Programming 06 - Automated Testing
 
Game Programming 05 - Development Tools
Game Programming 05 - Development ToolsGame Programming 05 - Development Tools
Game Programming 05 - Development Tools
 
Game Programming 01 - Introduction
Game Programming 01 - IntroductionGame Programming 01 - Introduction
Game Programming 01 - Introduction
 
Game Programming 00 - Exams
Game Programming 00 - ExamsGame Programming 00 - Exams
Game Programming 00 - Exams
 

Kürzlich hochgeladen

A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 

Kürzlich hochgeladen (20)

A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 

Style & Design Principles 03 - Component-Based Entity Systems

  • 1. Style & Design Principles Chapter 03: Component-Based Entity Systems Nick Prühs
  • 2. 5 Minute Review Session • What’s the difference between inheritance and aggregation? • Explain the three types of polymorphism! • What’s the difference between cohesion and coupling? • What are software design patterns? • Explain three types of software design patterns, and name an example for each one! 2 / 58
  • 4. Objectives • To understand the disadvantages of inheritance- based game models • To learn how to build an aggregation-based game models • To understand the advantages and disadvantages of aggregation-based game models 4 / 58
  • 5. “Say you’re an engineer… … set out to create a new Game Object System from scratch, and you’re going to ‘do it right the first time’. You talk to your designer and say ‘What kind of content are we going to have in this game?’ They respond with ‘Oh lots of stuff, trees, and birds, and bushes, and keys and locks and … <trailing off>’ And your eyes glaze over as you start thinking of fancy C++ ways to solve the problem. The object oriented programming sages tell you to try to determine Is-A relationships and abstract functionality and all that other fun stuff. You go to the book store and buy a C++ book just to be sure, and it tells you to fire up your $5000 UML editor. [...]” - Scott Bilas 5 / 58
  • 12. Entities • Object in your game world • Can (or cannot)… • be visible • move around • attack • explode • be targeted • become selected • follow a path • Common across all genres 12 / 58
  • 15. Approach #1: Inheritance • Entity base class • That class and its subclasses encapsulate the main game logic 15 / 58
  • 16. Example #1: Unreal Engine 3 • Base class Actor • Rendering • Animation • Sound • Physics • Almost everything in Unreal is an Actor • Pawn extends by taking damage • Projectile extends by spawning impact effects 16 / 58
  • 17. Drawbacks of inheritance-based game models • Diamond of Death 17 / 58
  • 18. Drawbacks of inheritance-based game models • Code added to the root of the inheritance tree causes big overhead • Code added to the leafs of the tree tends to get copied • Root and leaf classes tend to get very big 18 / 58
  • 19. Where is Waldo? public override void Update(float dt) { this.SystemManager.Update(dt); this.EventManager.ProcessEvents(dt); } 19 / 58
  • 20. Where is Waldo? public override void Update(float dt) { this.SystemManager.Update(dt); this.EventManager.ProcessEvents(dt); } 20 / 58
  • 21. Where is Waldo? public override void Update(float dt) { base.Update(dt); this.SystemManager.Update(dt); this.EventManager.ProcessEvents(dt); } 21 / 58
  • 22. Drawbacks of inheritance-based game models • Always need to understand all base classes along the inheritance tree • Impossible to enforce calling base class functions • Someone will forget it. Trust me. • And you’re gonna spend your whole evening finding that one missing base.Update(). • Deep class hierarchies will more likely run into call order issues 22 / 58
  • 23. Inheritance-based game models are… • … difficult to develop • … difficult to maintain • … difficult to extend 23 / 58
  • 24. “There are probably hundreds of ways… … you could decompose your systems and come up with a set of classes […], and eventually, all of them are wrong. This isn’t to say that they won’t work, but games are constantly changing, constantly invalidating your carefully planned designs. [...] So you hand off your new Game Object System and go work on other things. Then one day your designer says that they want a new type of “alien” asteroid that acts just like a heat seeking missile, except it’s still an asteroid.” - Scott Bilas 24 / 58
  • 28. Approach #2: Aggregation • Popular since Gas Powered Games’ Dungeon Siege • Introduced long before • Entities are aggregations of components • Which in turn encapsulate independent functionality • Corresponds to recommendations by the Gang of Four • “favor object composition over class inheritance” • Similar approach is used by the Unity3D game engine • Just for clarification: Unreal uses components as well, called ActorComponent • Got much more prominent in latest UDK release 28 / 58
  • 29. Approach #2a • Create an Entity class • Add references to all available components • Has obvious disadvantages: • Many component references will be null pointers for most entities • Big unnecessary memory overhead • Entity class has to be updated each time a new component is introduced 29 / 58
  • 30. Approach #2b • Create an Entity class • Introduce a common base class for components • Entities hold a collection of Component objects • Reduced the memory overhead • Increased extensibility • Already gets close to an optimal solution • easy to build, maintain and debug • easy to implement new design ideas without breaking existing code 30 / 58
  • 31. However, we can do better. 31 / 58
  • 32. Approach #2c: Entity Systems 32 / 57
  • 33. Approach #2c: Entity Systems 33 / 58
  • 34. Approach #2c: Entity Systems • Game entities are nothing more than just an id • Thus, no data or methods on entities • No methods on components, either: all functionality goes into what is called a system • PhysicsSystem • HealthSystem • FightSystem • Entirely operate on their corresponding components 34 / 58
  • 35. “All the data goes into the Components. All of it. Think you can take some “really common” data, e. g. the x-/y-/z-coordinates of the in-game object, and put it into the Entity itself? Nope. Don’t go there. As soon as you start migrating data into the Entity, you’ve lost. By definition the only valid place for the data is inside the Component.” - Adam Martin 35 / 58
  • 36. Example #2: Simple Fight 36 / 58
  • 37. Example #2: Simple Fight 37 / 58
  • 38. Example #2: Simple Fight 38 / 58
  • 39. Example #2: Simple Fight 39 / 58
  • 40. Example #2: Simple Fight 40 / 58
  • 41. Example #2: Simple Fight 41 / 58
  • 42. Example #2: Simple Fight 42 / 58
  • 43. Example #2: Simple Fight 43 / 58
  • 44. Example #2: Simple Fight 44 / 58
  • 45. Example #2: Simple Fight 45 / 58
  • 46. Inter-System Communication Systems communicate by the means of events, only. • No coupling between systems • Easy to add or remove systems at any time • Great architectural advantage for general game features • Need multiplayer? Just send the events over the network! • Need AI? Just make it create events which are handled just like player input is! • Need replays? Just write all events with timestamps to a file! 46 / 58
  • 49. Advantages of Entity Systems • Update order is obvious • Components can easily be pooled and re-used • Independent systems can be updated by separate threads • Data can easily be serialized and stored in a database 49 / 58
  • 50. Disadvantages of Entity Systems (?) • Lookups cause performance hit • Resist the urge to add cross-component references – this would make you lose all of the advantages mentioned before • Just don’t flood your system with unnecessary component types – just as you would always do • Misbelief that it takes longer to “get the job done” • Used at the InnoGames Game Jam #3 for creating a multi-platform multi-player real-time tactics game in just 48 hours – spending the little extra effort at the beginning pays off • Always. 50 / 58
  • 51. Future Prospects • Attribute Tables • store arbitrary key-value-pairs • used for initializing all components of an entity 51 / 57 <AttributeTable> <Attribute keyType="System.String" valueType="System.Single"> <Key>EnemyHealthModificationComponent.EnemyHealthModifier</Key> <Value>-3</Value> </Attribute> <Attribute keyType="System.String" valueType="System.String"> <Key>ActionComponent.Name</Key> <Value>Take that!</Value> </Attribute> </AttributeTable>
  • 52. Future Prospects • Blueprints • consist of a list of components and an attribute table • created with some kind of editor tool by designers • used for creating entites at run-time 52 / 57 <Blueprint> <ComponentTypes> <ComponentType>FreudBot.Logic.Components.ActionComponent</ComponentType> <ComponentType>FreudBot.Logic.Components.EnemyHealthModificationComponent</ComponentType> </ComponentTypes> <AttributeTable> <Attribute keyType="System.String" valueType="System.Single"> <Key>EnemyHealthModificationComponent.EnemyHealthModifier</Key> <Value>-3</Value> </Attribute> <Attribute keyType="System.String" valueType="System.String"> <Key>ActionComponent.Name</Key> <Value>Take that!</Value> </Attribute> </AttributeTable> </Blueprint>
  • 53. Future Prospects 53 / 57 StarCraft II Galaxy Editor
  • 54. Future Prospects 54 / 57 StarCraft II Galaxy Editor
  • 55. Future Prospects • Hierarchical Attribute Tables • used for overloading blueprints with specific entity attribute values • e.g. reduced initial health 55 / 57
  • 56. Future Prospects 56 / 57 StarCraft II Galaxy Editor
  • 57. Future Prospects public int CreateEntity(Blueprint blueprint, IAttributeTable configuration) { int entityId = this.CreateEntity(); // Setup attribute table. HierarchicalAttributeTable attributeTable = new HierarchicalAttributeTable(); attributeTable.AddParent(blueprint.GetAttributeTable()); attributeTable.AddParent(configuration); // Add components. foreach (Type componentType in blueprint.GetAllComponentTypes()) { // Create component. IEntityComponent component = (IEntityComponent)Activator.CreateInstance(componentType); // Add component to entity. this.AddComponent(entityId, component); // Initialize component with the attribute table data. component.InitComponent(attributeTable); } // Raise event. this.game.EventManager.QueueEvent(FrameworkEventType.EntityInitialized, entityId); return entityId; } 57 / 57
  • 58. Takeaway • inheritance-based game models show a lot of disadvantages • entity systems are easy to maintain and debug • provide great extensibility without the necessity of modifying existing code • show better performance characteristics for both memory and CPU load • easy to implement commonly used features • scripting • serialization • logging 58 / 57
  • 59. References • Mick West. Evolve Your Hierarchy. http://cowboyprogramming.com/2007/01/05/evolve-your- heirachy/, January 5, 2007. • Levi Baker. Entity Systems Part 1: Entity and EntityManager. http://blog.chronoclast.com/2010/12/entity-systems-part-1-entity-and.html, December 24, 2010. • Kyle Wilson. Game Object Structure: Inheritance vs. Aggregation. http://gamearchitect.net/Articles/GameObjects1.html, July 3, 2002. • Adam Martin. Entity Systems are the future of MMOG development – Part 1. http://t- machine.org/index.php/2007/09/03/entity-systems-are-the-future-of-mmog-development-part- 1/, September 3, 2007. • Adam Martin. Entity Systems: what makes good Components? good Entities? http://t- machine.org/index.php/2012/03/16/entity-systems-what-makes-good-components-good- entities/, March 16, 2012. • Scott Bilas. A Data-Driven Game Object System. http://scottbilas.com/files/2002/gdc_san_jose/game_objects_slides_with_notes.pdf, Slides, GDC 2002. • Scott Bilas. A Data-Driven Game Object System. http://scottbilas.com/files/2002/gdc_san_jose/game_objects_paper.pdf, Paper, GDC 2002. • Insomniac Games. A Dynamic Component Architecture for High Performance Gameplay. http://www.insomniacgames.com/a-dynamic-component-architecture-for-high-performance- gameplay/, June 1, 2010. 59 / 57
  • 60. Thank you for your attention! Contact Mail dev@npruehs.de Blog http://www.npruehs.de Twitter @npruehs Github https://github.com/npruehs 60 / 58