+
Component-based
Entity system
in Mobile Game Development
CodyNguyen
Mobile Game Developer, Vinova VN
cody@vinova.vn
+
Start small: cute infinite fly game
Gasboy
+
After that: a cooler (and bigger) game
Stickman
Traps
Skills
God’s Rage
+
architecture problems start to pop out
As with any software getting more complex,
+
Game entities share capabilities among
each others
deal_damage_around
deal_damage_around deal_damage_around
deal_damage_around
movable
movable movable
throwable
throwable
lie_on_ground
lie_on_ground
delay_on_activating
delay_on_activating
activate_on_touch
activate_on_touch
+
Game entities share capabilities among
each others
Impossible to build a good OOP class hierarchy!
natural relationships welcome changes code reuse
+
First solution comes to mind:
mix-ins via multiple-inheritance
1. Just a small portion of the tree is a mess already
2. Multiple inheritance smells
3. Where to put logic that evolves object of different classes?
Capability
Moveable DealDamage ActivateOnTouch Throwable
Thorn Cloud Bomb Bull
+
Need a better solution
Component-based entity system has been
a hot topic for years.
It helps solve our problem in an elegant way!
+
Component-based entity system
Multitude of ways to represent and
implement
This talk discusses one way which we found
practical and easy to understand
Three elements:
 Entity
 Component
 System
+
Component-based entity system
Decompose game entities by capabilities into
reusable components.
Prefer aggregation over inheritance, i.e.,
entity has components, not is a type of
some component.
+
Entity and Component
Velocity Damage Graphic ThrowAngle ActivateOnTouch
Thorn x x x
Cloud x x x
Bomb x x x x
Bull x x x x
Entity is: an unique ID + a list of components
Component contains only data
+
Where does the logic go?
The systems.
Bull Light
-ning
Thorn
Cloud
Stick
-man
Game has a bunch of
entities
Entities are processed by
systems
M o v e m e n t S y s t e m
A n i m a t i o n S y s t e m
P h y s i c s S y s t e m
C o l l i s i o n S y s t e m
H e a l t h S y s t e m
+
Systems only process entities they
“care” about
Entities are keys Systems are locks
http://gamedev.stackexchange.com/a/31491
Components are teeth
+
Entity system sum up
 Entity
 Is just a unique ID with a bunch of components
 Doesn’t need a separate Class for each entity
 Component
 Is the “ingredient” to make entities.
 Contains data only.
 System
 Contains game logic
 Run on every game loop, process entities who has a set of
components it care about.
+
Other benefits of using entity
system
 Goes hand-in-hand with Data-Driven development:
 Entities are defined as bags of components, in text file.
 “No engineer required”, game designer can create new or edit
existing entities easily.
 Easy to change or fine-tune entities
 Promote multi-threading
 Systems are independent from one another, so they can run on
separate threads
+
Artemis Entity System
 An Entity system framework written in Java:
http://gamadu.com/artemis/tutorial.html
 Is open-source, active project
 Ported to many different languages
+
Artemis Entity System and Cocos2d
 Sidar Talei ported to C++, we forked, modified and maintain:
https://github.com/vinova/Artemis-Cpp
 Our port:
 Works great with cocos2d-x!
 Work great with any C++ framework. No external libs or C++11
compiler are required
 JavaScript binding coming soon
+
References
 A Data-Driven Game Object System
http://scottbilas.com/files/2002/gdc_san_jose/game_objects_slides.ppt
 Entity Systems are the future of MMOG development
http://t-machine.org/index.php/2007/11/11/entity-systems-are-the-future-of-mmog-
development-part-2/
 Evolve Your Hierarchy
http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/

OGDC 2014: Component based entity system mobile game development

  • 1.
    + Component-based Entity system in MobileGame Development CodyNguyen Mobile Game Developer, Vinova VN cody@vinova.vn
  • 2.
    + Start small: cuteinfinite fly game Gasboy
  • 3.
    + After that: acooler (and bigger) game Stickman Traps Skills God’s Rage
  • 4.
    + architecture problems startto pop out As with any software getting more complex,
  • 5.
    + Game entities sharecapabilities among each others deal_damage_around deal_damage_around deal_damage_around deal_damage_around movable movable movable throwable throwable lie_on_ground lie_on_ground delay_on_activating delay_on_activating activate_on_touch activate_on_touch
  • 6.
    + Game entities sharecapabilities among each others Impossible to build a good OOP class hierarchy! natural relationships welcome changes code reuse
  • 7.
    + First solution comesto mind: mix-ins via multiple-inheritance 1. Just a small portion of the tree is a mess already 2. Multiple inheritance smells 3. Where to put logic that evolves object of different classes? Capability Moveable DealDamage ActivateOnTouch Throwable Thorn Cloud Bomb Bull
  • 8.
    + Need a bettersolution Component-based entity system has been a hot topic for years. It helps solve our problem in an elegant way!
  • 9.
    + Component-based entity system Multitudeof ways to represent and implement This talk discusses one way which we found practical and easy to understand Three elements:  Entity  Component  System
  • 10.
    + Component-based entity system Decomposegame entities by capabilities into reusable components. Prefer aggregation over inheritance, i.e., entity has components, not is a type of some component.
  • 11.
    + Entity and Component VelocityDamage Graphic ThrowAngle ActivateOnTouch Thorn x x x Cloud x x x Bomb x x x x Bull x x x x Entity is: an unique ID + a list of components Component contains only data
  • 12.
    + Where does thelogic go? The systems. Bull Light -ning Thorn Cloud Stick -man Game has a bunch of entities Entities are processed by systems M o v e m e n t S y s t e m A n i m a t i o n S y s t e m P h y s i c s S y s t e m C o l l i s i o n S y s t e m H e a l t h S y s t e m
  • 13.
    + Systems only processentities they “care” about Entities are keys Systems are locks http://gamedev.stackexchange.com/a/31491 Components are teeth
  • 14.
    + Entity system sumup  Entity  Is just a unique ID with a bunch of components  Doesn’t need a separate Class for each entity  Component  Is the “ingredient” to make entities.  Contains data only.  System  Contains game logic  Run on every game loop, process entities who has a set of components it care about.
  • 15.
    + Other benefits ofusing entity system  Goes hand-in-hand with Data-Driven development:  Entities are defined as bags of components, in text file.  “No engineer required”, game designer can create new or edit existing entities easily.  Easy to change or fine-tune entities  Promote multi-threading  Systems are independent from one another, so they can run on separate threads
  • 16.
    + Artemis Entity System An Entity system framework written in Java: http://gamadu.com/artemis/tutorial.html  Is open-source, active project  Ported to many different languages
  • 17.
    + Artemis Entity Systemand Cocos2d  Sidar Talei ported to C++, we forked, modified and maintain: https://github.com/vinova/Artemis-Cpp  Our port:  Works great with cocos2d-x!  Work great with any C++ framework. No external libs or C++11 compiler are required  JavaScript binding coming soon
  • 18.
    + References  A Data-DrivenGame Object System http://scottbilas.com/files/2002/gdc_san_jose/game_objects_slides.ppt  Entity Systems are the future of MMOG development http://t-machine.org/index.php/2007/11/11/entity-systems-are-the-future-of-mmog- development-part-2/  Evolve Your Hierarchy http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/

Editor's Notes

  • #2 Introduction
  • #3 It’s always great to start small, release fast and learn a complete experience.
  • #4 Our second game is God’s Rage. The story is that you play the God. Your daughter is so beautiful that a “normal” guy felt in love with her. Of-course, as a God, you can’t accept that, so you try to prevent the guy from reaching to your daughter. Your weapons are traps, which were initially put on the road, and skills, which you can throw down
  • #6 And for any software being a bit complex, we need a good architecture for it.
  • #7 And for any software being a bit complex, we need a good architecture for it.
  • #12 Really don’t need separate classes for different entities. Just pick proper components and we have the entity we want
  • #13 Slice game by aspects into systems MovementSystem AnimationSys PhysicSys Systems run sequentially in each game loop, process entities they cares about. Which entities a system cares about? The ones that have a certain set of components. MovementSystem process entities having Position and Velocity components CollisionSystem process entities having RigidBody component. RenderSystem process entities having Sprite and Position components.
  • #14 Byte56 had a great explanation of the roles of component