<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments for T=Machine</title>
	<atom:link href="http://t-machine.org/index.php/comments/feed/" rel="self" type="application/rss+xml" />
	<link>http://t-machine.org</link>
	<description>Internet Gaming, Computer Games, Technology, MMO, and Web 2.0</description>
	<lastBuildDate>Thu, 17 May 2012 10:38:51 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.5</generator>
	<item>
		<title>Comment on Entity Systems are the future of MMOG development &#8211; part 3 by adam</title>
		<link>http://t-machine.org/index.php/2007/12/22/entity-systems-are-the-future-of-mmog-development-part-3/comment-page-1/#comment-73852</link>
		<dc:creator>adam</dc:creator>
		<pubDate>Thu, 17 May 2012 10:38:51 +0000</pubDate>
		<guid isPermaLink="false">http://tmachine1.dh.bytemark.co.uk/blog/index.php/2007/12/22/entity-systems-are-the-future-of-mmog-development-part-3/#comment-73852</guid>
		<description>If there are no components that refer to a given entity-id, then that entity doesn&#039;t exist. There&#039;s nothing to remove, because there was nothing that existed in the first place. The entity is just a *name*, it doesn&#039;t exist in memory</description>
		<content:encoded><![CDATA[<p>If there are no components that refer to a given entity-id, then that entity doesn&#8217;t exist. There&#8217;s nothing to remove, because there was nothing that existed in the first place. The entity is just a *name*, it doesn&#8217;t exist in memory</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Entity Systems are the future of MMOG development &#8211; part 3 by David</title>
		<link>http://t-machine.org/index.php/2007/12/22/entity-systems-are-the-future-of-mmog-development-part-3/comment-page-1/#comment-73764</link>
		<dc:creator>David</dc:creator>
		<pubDate>Thu, 17 May 2012 02:24:00 +0000</pubDate>
		<guid isPermaLink="false">http://tmachine1.dh.bytemark.co.uk/blog/index.php/2007/12/22/entity-systems-are-the-future-of-mmog-development-part-3/#comment-73764</guid>
		<description>Basically, I want to know how you plan on removing entities from the game world.

AFAIK, Adding an entity to the world involves adding its components to their respective systems.  If an entity is only an id, constructing it is absolutely useless unless components or something else contain a reference to it.

Now, when an entity is to be destroyed, we&#039;re going to remove it&#039;s components from the systems, right?  So we have the entity, but we have no idea which components it contains, or which systems they belong to.

Since the entity contains nothing, we know nothing.  Maybe I&#039;m missing something crucial here.</description>
		<content:encoded><![CDATA[<p>Basically, I want to know how you plan on removing entities from the game world.</p>
<p>AFAIK, Adding an entity to the world involves adding its components to their respective systems.  If an entity is only an id, constructing it is absolutely useless unless components or something else contain a reference to it.</p>
<p>Now, when an entity is to be destroyed, we&#8217;re going to remove it&#8217;s components from the systems, right?  So we have the entity, but we have no idea which components it contains, or which systems they belong to.</p>
<p>Since the entity contains nothing, we know nothing.  Maybe I&#8217;m missing something crucial here.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Entity System 1: Java/Android by adam</title>
		<link>http://t-machine.org/index.php/2010/05/09/entity-system-1-javaandroid/comment-page-3/#comment-73619</link>
		<dc:creator>adam</dc:creator>
		<pubDate>Wed, 16 May 2012 16:06:14 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=876#comment-73619</guid>
		<description>If you can&#039;t see a way to do a wonderfully elegant template metaprogramming monster ...  please instead follow the &quot;Entity System Beta&quot; (described on this blog ans on http://entity-systems.wikidot.com/rdbms-beta ) - it&#039;s been ported to several langs, but not C++ yet. It would be great to get a clean port of that.

(it&#039;s &quot;good enough&quot; for prototyping - I&#039;ve had it running 100&#039;s of game entities at 30 FPS on old Android phones)</description>
		<content:encoded><![CDATA[<p>If you can&#8217;t see a way to do a wonderfully elegant template metaprogramming monster &#8230;  please instead follow the &#8220;Entity System Beta&#8221; (described on this blog ans on <a href="http://entity-systems.wikidot.com/rdbms-beta" onclick="javascript:pageTracker._trackPageview('/outbound/comment/http://entity-systems.wikidot.com/rdbms-beta');">http://entity-systems.wikidot.com/rdbms-beta</a> ) &#8211; it&#8217;s been ported to several langs, but not C++ yet. It would be great to get a clean port of that.</p>
<p>(it&#8217;s &#8220;good enough&#8221; for prototyping &#8211; I&#8217;ve had it running 100&#8242;s of game entities at 30 FPS on old Android phones)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Entity System 1: Java/Android by Tom H.</title>
		<link>http://t-machine.org/index.php/2010/05/09/entity-system-1-javaandroid/comment-page-3/#comment-73594</link>
		<dc:creator>Tom H.</dc:creator>
		<pubDate>Wed, 16 May 2012 15:02:21 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=876#comment-73594</guid>
		<description>The C++ skeleton of an Entity System at http://entity-systems.wikidot.com/ really does scale up to a small game (in my hobby playing-around). It needs a couple more convenience functions, like removing components from an entity. It uses some of the antipatterns Adam disparages, like having the Entity hold a map of its components, but I think when you hit performance problems with it it wouldn&#039;t be hard to factor them out.</description>
		<content:encoded><![CDATA[<p>The C++ skeleton of an Entity System at <a href="http://entity-systems.wikidot.com/" onclick="javascript:pageTracker._trackPageview('/outbound/comment/http://entity-systems.wikidot.com/');">http://entity-systems.wikidot.com/</a> really does scale up to a small game (in my hobby playing-around). It needs a couple more convenience functions, like removing components from an entity. It uses some of the antipatterns Adam disparages, like having the Entity hold a map of its components, but I think when you hit performance problems with it it wouldn&#8217;t be hard to factor them out.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Entity Systems are the future of MMOG development &#8211; part 3 by adam</title>
		<link>http://t-machine.org/index.php/2007/12/22/entity-systems-are-the-future-of-mmog-development-part-3/comment-page-1/#comment-73213</link>
		<dc:creator>adam</dc:creator>
		<pubDate>Mon, 14 May 2012 18:50:10 +0000</pubDate>
		<guid isPermaLink="false">http://tmachine1.dh.bytemark.co.uk/blog/index.php/2007/12/22/entity-systems-are-the-future-of-mmog-development-part-3/#comment-73213</guid>
		<description>I don&#039;t understand your question then. what do you mean by &quot;creating&quot;, what do you mean by &quot;have a reference to&quot; and what do you eman by &quot;nothing else&quot;?</description>
		<content:encoded><![CDATA[<p>I don&#8217;t understand your question then. what do you mean by &#8220;creating&#8221;, what do you mean by &#8220;have a reference to&#8221; and what do you eman by &#8220;nothing else&#8221;?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Entity Systems are the future of MMOG development &#8211; part 3 by David</title>
		<link>http://t-machine.org/index.php/2007/12/22/entity-systems-are-the-future-of-mmog-development-part-3/comment-page-1/#comment-73199</link>
		<dc:creator>David</dc:creator>
		<pubDate>Mon, 14 May 2012 17:28:58 +0000</pubDate>
		<guid isPermaLink="false">http://tmachine1.dh.bytemark.co.uk/blog/index.php/2007/12/22/entity-systems-are-the-future-of-mmog-development-part-3/#comment-73199</guid>
		<description>The problem I see with not having a list of components is that when we add the components to the systems, they&#039;re entirely dissociated.  When we want to destroy an entity, how else will we know which components to remove from which system?</description>
		<content:encoded><![CDATA[<p>The problem I see with not having a list of components is that when we add the components to the systems, they&#8217;re entirely dissociated.  When we want to destroy an entity, how else will we know which components to remove from which system?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Toshiba&#8217;s &#8220;failed vs. Apple&#8221; marketing by adam</title>
		<link>http://t-machine.org/index.php/2012/04/23/toshibas-failed-vs-apple-marketing/comment-page-1/#comment-73142</link>
		<dc:creator>adam</dc:creator>
		<pubDate>Mon, 14 May 2012 11:56:30 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1884#comment-73142</guid>
		<description>LOL that I can believe.</description>
		<content:encoded><![CDATA[<p>LOL that I can believe.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Toshiba&#8217;s &#8220;failed vs. Apple&#8221; marketing by Dimo</title>
		<link>http://t-machine.org/index.php/2012/04/23/toshibas-failed-vs-apple-marketing/comment-page-1/#comment-73141</link>
		<dc:creator>Dimo</dc:creator>
		<pubDate>Mon, 14 May 2012 11:51:47 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1884#comment-73141</guid>
		<description>I&#039;ve heard that Apple uses hand models with unusually large hands in their iPhone ads, simply to make the iPhone look smaller!</description>
		<content:encoded><![CDATA[<p>I&#8217;ve heard that Apple uses hand models with unusually large hands in their iPhone ads, simply to make the iPhone look smaller!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Entity System 1: Java/Android by seth</title>
		<link>http://t-machine.org/index.php/2010/05/09/entity-system-1-javaandroid/comment-page-3/#comment-73030</link>
		<dc:creator>seth</dc:creator>
		<pubDate>Sun, 13 May 2012 21:28:32 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=876#comment-73030</guid>
		<description>Well, not exactly what I wanted to hear, but thanks for the reply! I guess for the time being I&#039;ll try asking around like you suggest, and continue hammering together code until it &quot;clicks&quot;... I plan on getting this game finished one way or another, so if I have to rewrite it a few times at least I&#039;ll learn how *not* to write it.

Anyway, thanks again!</description>
		<content:encoded><![CDATA[<p>Well, not exactly what I wanted to hear, but thanks for the reply! I guess for the time being I&#8217;ll try asking around like you suggest, and continue hammering together code until it &#8220;clicks&#8221;&#8230; I plan on getting this game finished one way or another, so if I have to rewrite it a few times at least I&#8217;ll learn how *not* to write it.</p>
<p>Anyway, thanks again!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Entity System 1: Java/Android by adam</title>
		<link>http://t-machine.org/index.php/2010/05/09/entity-system-1-javaandroid/comment-page-3/#comment-73026</link>
		<dc:creator>adam</dc:creator>
		<pubDate>Sun, 13 May 2012 19:47:30 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=876#comment-73026</guid>
		<description>@seth - I&#039;ve made a couple of half-hearted attempts last year at doing a pure C++ version based on template metaprogramming, but I&#039;m too out of practice with templates, and I wasn&#039;t happy with any of them.

In theory, it ought to work well. The problem is that I haven&#039;t written any C++ in a long time, and I&#039;m very rusty. In practice, when I struggled and went looking for 2nd opinions, most of the hardcore C++ people I know haven&#039;t adopted ES&#039;s yet and won&#039;t focus on the problem - they instead try to sell me on other, &quot;more C++ style&quot; solutions. Which is usually missing the point, sadly. In practice, C++ coding with the current free IDE&#039;s I have access to makes my head hurt (Eclipse C++ support is (to put it nicely) &quot;weak&quot;, and let&#039;s not even mention Xcode). I actually find it easier to write C++ on paper and then b*tch-slap the IDE into accepting it, than to write it with the IDE&#039;s &#039;help&#039; :(.

So ... sorry!

I suggest you try tweeting at some well known tech / games people who tweet about C++ programming - there are interesting problems here, and they might find it fun to have a go with.</description>
		<content:encoded><![CDATA[<p>@seth &#8211; I&#8217;ve made a couple of half-hearted attempts last year at doing a pure C++ version based on template metaprogramming, but I&#8217;m too out of practice with templates, and I wasn&#8217;t happy with any of them.</p>
<p>In theory, it ought to work well. The problem is that I haven&#8217;t written any C++ in a long time, and I&#8217;m very rusty. In practice, when I struggled and went looking for 2nd opinions, most of the hardcore C++ people I know haven&#8217;t adopted ES&#8217;s yet and won&#8217;t focus on the problem &#8211; they instead try to sell me on other, &#8220;more C++ style&#8221; solutions. Which is usually missing the point, sadly. In practice, C++ coding with the current free IDE&#8217;s I have access to makes my head hurt (Eclipse C++ support is (to put it nicely) &#8220;weak&#8221;, and let&#8217;s not even mention Xcode). I actually find it easier to write C++ on paper and then b*tch-slap the IDE into accepting it, than to write it with the IDE&#8217;s &#8216;help&#8217; :(.</p>
<p>So &#8230; sorry!</p>
<p>I suggest you try tweeting at some well known tech / games people who tweet about C++ programming &#8211; there are interesting problems here, and they might find it fun to have a go with.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Entity System 1: Java/Android by seth</title>
		<link>http://t-machine.org/index.php/2010/05/09/entity-system-1-javaandroid/comment-page-3/#comment-73024</link>
		<dc:creator>seth</dc:creator>
		<pubDate>Sun, 13 May 2012 18:48:49 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=876#comment-73024</guid>
		<description>I know this article&#039;s rather old, but it seems to be the most relevant for my question. I&#039;ve read through all your articles on Entity-Component design (as well as any others I could find), and I&#039;ve been trying to implement an ES in C++ for a game idea I&#039;ve had.

You mention that if you were working in C++ you would use templates. And for the life of me I can&#039;t figure out what that would actually look like. I know enough about templates to see the benefit, but I&#039;m just not seeing how an ES would work like that. Do you have any examples of an ES implemented in C++? The Entity Manager is where I&#039;m having the real problem, but anything would be greatly appreciated.

And great job on the articles! I just wish there was more information on Entity-Component design in general (everything I&#039;ve found either redirects here, or has a not-quite-right ES design).</description>
		<content:encoded><![CDATA[<p>I know this article&#8217;s rather old, but it seems to be the most relevant for my question. I&#8217;ve read through all your articles on Entity-Component design (as well as any others I could find), and I&#8217;ve been trying to implement an ES in C++ for a game idea I&#8217;ve had.</p>
<p>You mention that if you were working in C++ you would use templates. And for the life of me I can&#8217;t figure out what that would actually look like. I know enough about templates to see the benefit, but I&#8217;m just not seeing how an ES would work like that. Do you have any examples of an ES implemented in C++? The Entity Manager is where I&#8217;m having the real problem, but anything would be greatly appreciated.</p>
<p>And great job on the articles! I just wish there was more information on Entity-Component design in general (everything I&#8217;ve found either redirects here, or has a not-quite-right ES design).</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Adobe&#8217;s Updater destroys Mac OS X: trying to remove it, part 1 by MacD</title>
		<link>http://t-machine.org/index.php/2012/05/06/adobes-updater-destroys-mac-os-x-trying-to-remove-it-part-1/comment-page-1/#comment-71922</link>
		<dc:creator>MacD</dc:creator>
		<pubDate>Mon, 07 May 2012 20:50:24 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1898#comment-71922</guid>
		<description>This is UNBELIEVABLE that Adobe would produce such a &quot;crappy&quot;
software update .... just goes to show that all the best software designers
aren&#039;t working in the U.S. anymore.

ADOBE FIX THIS SERIOUS ISSUE!</description>
		<content:encoded><![CDATA[<p>This is UNBELIEVABLE that Adobe would produce such a &#8220;crappy&#8221;<br />
software update &#8230;. just goes to show that all the best software designers<br />
aren&#8217;t working in the U.S. anymore.</p>
<p>ADOBE FIX THIS SERIOUS ISSUE!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Entity Systems are the future of MMOG development &#8211; part 3 by adam</title>
		<link>http://t-machine.org/index.php/2007/12/22/entity-systems-are-the-future-of-mmog-development-part-3/comment-page-1/#comment-71898</link>
		<dc:creator>adam</dc:creator>
		<pubDate>Mon, 07 May 2012 17:00:44 +0000</pubDate>
		<guid isPermaLink="false">http://tmachine1.dh.bytemark.co.uk/blog/index.php/2007/12/22/entity-systems-are-the-future-of-mmog-development-part-3/#comment-71898</guid>
		<description>They&#039;re  dry useful for debggI g. Human readable, name able, etc</description>
		<content:encoded><![CDATA[<p>They&#8217;re  dry useful for debggI g. Human readable, name able, etc</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Entity Systems are the future of MMOG development &#8211; part 3 by David</title>
		<link>http://t-machine.org/index.php/2007/12/22/entity-systems-are-the-future-of-mmog-development-part-3/comment-page-1/#comment-71897</link>
		<dc:creator>David</dc:creator>
		<pubDate>Mon, 07 May 2012 16:41:36 +0000</pubDate>
		<guid isPermaLink="false">http://tmachine1.dh.bytemark.co.uk/blog/index.php/2007/12/22/entity-systems-are-the-future-of-mmog-development-part-3/#comment-71897</guid>
		<description>So if an entity is only a name and nothing else (list of components), what&#039;s the point in creating one?  Does anything have a reference to it?</description>
		<content:encoded><![CDATA[<p>So if an entity is only a name and nothing else (list of components), what&#8217;s the point in creating one?  Does anything have a reference to it?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Entity Systems are the Future of MMOs Part 5 by Mythgarr</title>
		<link>http://t-machine.org/index.php/2009/10/26/entity-systems-are-the-future-of-mmos-part-5/comment-page-3/#comment-71677</link>
		<dc:creator>Mythgarr</dc:creator>
		<pubDate>Sun, 06 May 2012 18:36:33 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=700#comment-71677</guid>
		<description>I posted a comment on a different post but adam suggested posting here would receive more replies. I am re-engineering a platformer game from a few years back to use the Artemis Entity System (primarily as a way to become familiar with ES development). I&#039;m trying to figure out how best to implement a few features -
A player can only jump when they are standing on the ground. Player input is handled in a PlayerControlSystem, collision is handled in a CollisionSystem. What is the best way to deal with only allowing the player to jump when they are standing on the ground? Should the CollisionSystem set a property on a Component that the PlayerControlSystem looks at? Likewise, if I want an AI to react by turning around when they hit a wall, how should that be handled? I can keep adding flags for reacting to every specific situation but that would lead to Component bloat. I could handle every possible collision situation within the CollisionSystem (ie: having an AI turn around, damaging a player, checking if the player is trying to jump and reacting accordingly, etc) but that would lead to an ENORMOUS event handler within that system.

What is the &#039;right&#039; way to do this?</description>
		<content:encoded><![CDATA[<p>I posted a comment on a different post but adam suggested posting here would receive more replies. I am re-engineering a platformer game from a few years back to use the Artemis Entity System (primarily as a way to become familiar with ES development). I&#8217;m trying to figure out how best to implement a few features -<br />
A player can only jump when they are standing on the ground. Player input is handled in a PlayerControlSystem, collision is handled in a CollisionSystem. What is the best way to deal with only allowing the player to jump when they are standing on the ground? Should the CollisionSystem set a property on a Component that the PlayerControlSystem looks at? Likewise, if I want an AI to react by turning around when they hit a wall, how should that be handled? I can keep adding flags for reacting to every specific situation but that would lead to Component bloat. I could handle every possible collision situation within the CollisionSystem (ie: having an AI turn around, damaging a player, checking if the player is trying to jump and reacting accordingly, etc) but that would lead to an ENORMOUS event handler within that system.</p>
<p>What is the &#8216;right&#8217; way to do this?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Entity Systems: what makes good Components? good Entities? by adam</title>
		<link>http://t-machine.org/index.php/2012/03/16/entity-systems-what-makes-good-components-good-entities/comment-page-1/#comment-71673</link>
		<dc:creator>adam</dc:creator>
		<pubDate>Sun, 06 May 2012 17:50:25 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1832#comment-71673</guid>
		<description>@Mythgarr - generally a better idea to ask such things on the main Entity Systems 5-part post series. That way you&#039;ll get a LOT more people reading / replying.

Re: gravity, I&#039;d be inclined to apply a gravity vector every tick, and allow your Collision system to decide whether to act on it. That way, you have a more general solution. Only reason I&#039;d do it differently is if you had too many things doing CD, and you had a performance problem there.

I don&#039;t really understand how you would have a CD system that does *not* have logic for handling all the different types of collision?</description>
		<content:encoded><![CDATA[<p>@Mythgarr &#8211; generally a better idea to ask such things on the main Entity Systems 5-part post series. That way you&#8217;ll get a LOT more people reading / replying.</p>
<p>Re: gravity, I&#8217;d be inclined to apply a gravity vector every tick, and allow your Collision system to decide whether to act on it. That way, you have a more general solution. Only reason I&#8217;d do it differently is if you had too many things doing CD, and you had a performance problem there.</p>
<p>I don&#8217;t really understand how you would have a CD system that does *not* have logic for handling all the different types of collision?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Entity Systems: what makes good Components? good Entities? by Mythgarr</title>
		<link>http://t-machine.org/index.php/2012/03/16/entity-systems-what-makes-good-components-good-entities/comment-page-1/#comment-71671</link>
		<dc:creator>Mythgarr</dc:creator>
		<pubDate>Sun, 06 May 2012 17:43:37 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1832#comment-71671</guid>
		<description>In an attempt to better understand the whole concept behind ES I&#039;m gutting an old game I made for a school project and completely re-engineering it to use ES. My hope is that I&#039;ll have a before-and-after that I can post to github or something similar. I&#039;ve settled on using the Artemis C# conversion.
I&#039;ve run into an issue I can&#039;t see a simple solution to. The game is a platformer along the same lines as JetPack. I have  PlayerControlSystem that handles polling the input devices and reacting by modifying velocity (which is then picked up in another system to actually move the player - I wanted to keep everything together).

When the player attempts to jump I need to determine if they are standing on &#039;the ground&#039;. In the existing game logic this is done using ugly, oddly specific code (we were in the final 72 hours of the project - code readability tends to go out the window at about that point :). I&#039;ll also need to deal with &#039;gravity&#039; for some entities (including the player), which causes them to fall when they are NOT standing on the ground. What would be the best way to do this in an entity system?

I considered adding some additional information to the Collides Component to store what entities it collided with this frame, but that just seems like the wrong way to do it. I could also have the CollisionSystem itself check for contact with the ground and react accordingly, but this would lead to bundling a lot of logic handling reactions between colliding components (damage, power ups, health packs, falling, etc) into that system. Again, this seems wrong.</description>
		<content:encoded><![CDATA[<p>In an attempt to better understand the whole concept behind ES I&#8217;m gutting an old game I made for a school project and completely re-engineering it to use ES. My hope is that I&#8217;ll have a before-and-after that I can post to github or something similar. I&#8217;ve settled on using the Artemis C# conversion.<br />
I&#8217;ve run into an issue I can&#8217;t see a simple solution to. The game is a platformer along the same lines as JetPack. I have  PlayerControlSystem that handles polling the input devices and reacting by modifying velocity (which is then picked up in another system to actually move the player &#8211; I wanted to keep everything together).</p>
<p>When the player attempts to jump I need to determine if they are standing on &#8216;the ground&#8217;. In the existing game logic this is done using ugly, oddly specific code (we were in the final 72 hours of the project &#8211; code readability tends to go out the window at about that point :). I&#8217;ll also need to deal with &#8216;gravity&#8217; for some entities (including the player), which causes them to fall when they are NOT standing on the ground. What would be the best way to do this in an entity system?</p>
<p>I considered adding some additional information to the Collides Component to store what entities it collided with this frame, but that just seems like the wrong way to do it. I could also have the CollisionSystem itself check for contact with the ground and react accordingly, but this would lead to bundling a lot of logic handling reactions between colliding components (damage, power ups, health packs, falling, etc) into that system. Again, this seems wrong.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on GitHub for Mac: don&#8217;t use it :( by Hume</title>
		<link>http://t-machine.org/index.php/2012/03/09/github-for-mac-dont-use-it/comment-page-1/#comment-70661</link>
		<dc:creator>Hume</dc:creator>
		<pubDate>Tue, 01 May 2012 18:11:37 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1816#comment-70661</guid>
		<description>Two months later; three releases later; still completely unreliable.</description>
		<content:encoded><![CDATA[<p>Two months later; three releases later; still completely unreliable.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on WTF is an Archveult? by James Wallis</title>
		<link>http://t-machine.org/index.php/2012/04/26/wtf-is-an-archveult/comment-page-1/#comment-69850</link>
		<dc:creator>James Wallis</dc:creator>
		<pubDate>Thu, 26 Apr 2012 14:58:23 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1891#comment-69850</guid>
		<description>Simon Rogers, who published the Dying Earth RPG and who sits one desk over from me these days, says that it&#039;s a creature that sits at the end of the universe and acts as a foil to the arch-magicians.</description>
		<content:encoded><![CDATA[<p>Simon Rogers, who published the Dying Earth RPG and who sits one desk over from me these days, says that it&#8217;s a creature that sits at the end of the universe and acts as a foil to the arch-magicians.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on 2012: the year of UNcollaborative development, or: when GitHub kills Open Source by adam</title>
		<link>http://t-machine.org/index.php/2012/01/13/2012-the-year-of-uncollaborative-development-or-when-github-kills-open-source/comment-page-1/#comment-69666</link>
		<dc:creator>adam</dc:creator>
		<pubDate>Wed, 25 Apr 2012 15:20:54 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1775#comment-69666</guid>
		<description>Ah, correction: we could run a separate, independent tracker - I couldn&#039;t find the option, but a colleague just showed me where to find it :)

Still getting dozens of bug reports that *are already fixed* in the main fork, but no-one can see that, because the original author has disappeared :(</description>
		<content:encoded><![CDATA[<p>Ah, correction: we could run a separate, independent tracker &#8211; I couldn&#8217;t find the option, but a colleague just showed me where to find it :)</p>
<p>Still getting dozens of bug reports that *are already fixed* in the main fork, but no-one can see that, because the original author has disappeared :(</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on 2012: the year of UNcollaborative development, or: when GitHub kills Open Source by adam</title>
		<link>http://t-machine.org/index.php/2012/01/13/2012-the-year-of-uncollaborative-development-or-when-github-kills-open-source/comment-page-1/#comment-69665</link>
		<dc:creator>adam</dc:creator>
		<pubDate>Wed, 25 Apr 2012 15:19:41 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1775#comment-69665</guid>
		<description>UPDATE:

A project I contribute to is actively missing out on programmers and users BECAUSE THE ORIGINAL AUTHOR WON&#039;T DO ANYTHING (he ignores twitter @messages, he ignores emails, he ignores the project).

Forks on GitHub *are not allowed* to have:

 - Documentation
 - Issue Tracker

...so the whole project is gradually going FUBAR, because of GitHub&#039;s top-down, command-and-control approach to projects :(.

We *cannot fix* items in the tracker, and we *are not allowed* to have our own tracker. WTF is a project supposed to do?</description>
		<content:encoded><![CDATA[<p>UPDATE:</p>
<p>A project I contribute to is actively missing out on programmers and users BECAUSE THE ORIGINAL AUTHOR WON&#8217;T DO ANYTHING (he ignores twitter @messages, he ignores emails, he ignores the project).</p>
<p>Forks on GitHub *are not allowed* to have:</p>
<p> &#8211; Documentation<br />
 &#8211; Issue Tracker</p>
<p>&#8230;so the whole project is gradually going FUBAR, because of GitHub&#8217;s top-down, command-and-control approach to projects :(.</p>
<p>We *cannot fix* items in the tracker, and we *are not allowed* to have our own tracker. WTF is a project supposed to do?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Entity Systems are the future of MMOG development &#8211; Part 1 by Entity System &#124; andreashedin</title>
		<link>http://t-machine.org/index.php/2007/09/03/entity-systems-are-the-future-of-mmog-development-part-1/comment-page-1/#comment-69611</link>
		<dc:creator>Entity System &#124; andreashedin</dc:creator>
		<pubDate>Wed, 25 Apr 2012 10:45:09 +0000</pubDate>
		<guid isPermaLink="false">http://tmachine1.dh.bytemark.co.uk/blog/index.php/2007/09/03/entity-systems-are-the-future-of-mmog-development-part-1/#comment-69611</guid>
		<description>[...] For those that don&#8217;t know what an entity system I recommend reading this series: http://t-machine.org/index.php/2007/09/03/entity-systems-are-the-future-of-mmog-development-part-1/. [...]</description>
		<content:encoded><![CDATA[<p>[...] For those that don&#8217;t know what an entity system I recommend reading this series: http://t-machine.org/index.php/2007/09/03/entity-systems-are-the-future-of-mmog-development-part-1/. [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on GitHub for Mac: don&#8217;t use it :( by Tom Atkinson</title>
		<link>http://t-machine.org/index.php/2012/03/09/github-for-mac-dont-use-it/comment-page-1/#comment-69094</link>
		<dc:creator>Tom Atkinson</dc:creator>
		<pubDate>Mon, 23 Apr 2012 02:10:36 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1816#comment-69094</guid>
		<description>Yeah I get this also. Github for Mac version 1.2.6. This is on a very fresh repo, just doing some very basic testing like adding a &quot;hello.txt&quot; file and doing some basic edits as a test. Not ideal. Would love to know how to fix, I guess we&#039;ll need to completely drop Git as a version control system and move to Subversion to get around? Keen to stay on Git tho...</description>
		<content:encoded><![CDATA[<p>Yeah I get this also. Github for Mac version 1.2.6. This is on a very fresh repo, just doing some very basic testing like adding a &#8220;hello.txt&#8221; file and doing some basic edits as a test. Not ideal. Would love to know how to fix, I guess we&#8217;ll need to completely drop Git as a version control system and move to Subversion to get around? Keen to stay on Git tho&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Concepts of &#8220;object identity&#8221; in game programming&#8230; by adam</title>
		<link>http://t-machine.org/index.php/2012/04/19/concepts-of-object-identity-in-game-programming/comment-page-1/#comment-68477</link>
		<dc:creator>adam</dc:creator>
		<pubDate>Fri, 20 Apr 2012 09:12:12 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1879#comment-68477</guid>
		<description>To be clear: I don&#039;t have a master plan for super entities - although IIRC Joel McGinnis&#039;s (now at CCP) plans 6 years ago for component management (treating each component as if it were a memory block, and doing mem-management style stuff (virtual, real, etc) on top of that) seemed a good start.</description>
		<content:encoded><![CDATA[<p>To be clear: I don&#8217;t have a master plan for super entities &#8211; although IIRC Joel McGinnis&#8217;s (now at CCP) plans 6 years ago for component management (treating each component as if it were a memory block, and doing mem-management style stuff (virtual, real, etc) on top of that) seemed a good start.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Warning: before you install OS X lion by Andrew Crystall</title>
		<link>http://t-machine.org/index.php/2012/04/18/warning-before-you-install-os-x-lion/comment-page-1/#comment-68412</link>
		<dc:creator>Andrew Crystall</dc:creator>
		<pubDate>Fri, 20 Apr 2012 01:51:53 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1872#comment-68412</guid>
		<description>If you boot to another OS (linux? windows?) and put the laptop into sleep mode...</description>
		<content:encoded><![CDATA[<p>If you boot to another OS (linux? windows?) and put the laptop into sleep mode&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Concepts of &#8220;object identity&#8221; in game programming&#8230; by Hume</title>
		<link>http://t-machine.org/index.php/2012/04/19/concepts-of-object-identity-in-game-programming/comment-page-1/#comment-68291</link>
		<dc:creator>Hume</dc:creator>
		<pubDate>Thu, 19 Apr 2012 16:35:02 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1879#comment-68291</guid>
		<description>Adam, this is my chance to thank you for sharing your expertise with Entity Systems.  I am almost precisely the &quot;newbie game programmer&quot; you describe, so I&#039;ve tried to direct people here and to the wiki to get the real goods on the system. But my enthusiasm for the concept does lead to epic comments.

I&#039;ve been considering how to retrofit a more sophisticated implementation of ES into my main project -- a multiplayer game with shared physics, already using a &quot;client belief&quot; system to minimize network updates -- so I&#039;ll be following your thoughts here very closely. I was sold on the value of GUIDs (even for client-server) long before my Ludum Dare experiment, so I expect the transition to be less painful than otherwise.

I have some vague notions of the need for a versionable identity. In my testing, a simple incremented version or timestamp scheme breaks down; it develops conflicts, the same way source control systems with incremental revisions have conflicts. The best I can manage at the moment is a sort of patch component, which is workable for deltas but not so well for other types of conflicts. When this issue comes up again, my next thought was to look at modern revision control systems like Git to see if there are any ideas that will transfer. 

But I&#039;m really looking forward to whenever you have the time to describe SuperEntities. Can&#039;t wait.

Thanks again.</description>
		<content:encoded><![CDATA[<p>Adam, this is my chance to thank you for sharing your expertise with Entity Systems.  I am almost precisely the &#8220;newbie game programmer&#8221; you describe, so I&#8217;ve tried to direct people here and to the wiki to get the real goods on the system. But my enthusiasm for the concept does lead to epic comments.</p>
<p>I&#8217;ve been considering how to retrofit a more sophisticated implementation of ES into my main project &#8212; a multiplayer game with shared physics, already using a &#8220;client belief&#8221; system to minimize network updates &#8212; so I&#8217;ll be following your thoughts here very closely. I was sold on the value of GUIDs (even for client-server) long before my Ludum Dare experiment, so I expect the transition to be less painful than otherwise.</p>
<p>I have some vague notions of the need for a versionable identity. In my testing, a simple incremented version or timestamp scheme breaks down; it develops conflicts, the same way source control systems with incremental revisions have conflicts. The best I can manage at the moment is a sort of patch component, which is workable for deltas but not so well for other types of conflicts. When this issue comes up again, my next thought was to look at modern revision control systems like Git to see if there are any ideas that will transfer. </p>
<p>But I&#8217;m really looking forward to whenever you have the time to describe SuperEntities. Can&#8217;t wait.</p>
<p>Thanks again.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Warning: before you install OS X lion by adam</title>
		<link>http://t-machine.org/index.php/2012/04/18/warning-before-you-install-os-x-lion/comment-page-1/#comment-68225</link>
		<dc:creator>adam</dc:creator>
		<pubDate>Thu, 19 Apr 2012 11:42:32 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1872#comment-68225</guid>
		<description>So far, it seems to be:

While the display is ON, USB is running

While the lid is open by even just 5 millimetres, USB is running, until approx 10 seconds after the display sleeps

While the lid is closed, USB remains running for approx 10 seconds</description>
		<content:encoded><![CDATA[<p>So far, it seems to be:</p>
<p>While the display is ON, USB is running</p>
<p>While the lid is open by even just 5 millimetres, USB is running, until approx 10 seconds after the display sleeps</p>
<p>While the lid is closed, USB remains running for approx 10 seconds</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Warning: before you install OS X lion by RJVB</title>
		<link>http://t-machine.org/index.php/2012/04/18/warning-before-you-install-os-x-lion/comment-page-1/#comment-68172</link>
		<dc:creator>RJVB</dc:creator>
		<pubDate>Thu, 19 Apr 2012 06:32:07 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1872#comment-68172</guid>
		<description>Does this mean power is completely shut off to usb when the computer sleeps? And unplugging a device no longer wakes the computer?
OS X used &#039;deep sleep&#039; by default, have you tried the other type of sleep?</description>
		<content:encoded><![CDATA[<p>Does this mean power is completely shut off to usb when the computer sleeps? And unplugging a device no longer wakes the computer?<br />
OS X used &#8216;deep sleep&#8217; by default, have you tried the other type of sleep?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Apple OS X install hell: way worse than Windows :( by adam</title>
		<link>http://t-machine.org/index.php/2012/04/14/apple-os-x-install-hell-way-worse-than-windows/comment-page-1/#comment-67067</link>
		<dc:creator>adam</dc:creator>
		<pubDate>Sat, 14 Apr 2012 13:29:36 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1862#comment-67067</guid>
		<description>Genius idea, thanks!</description>
		<content:encoded><![CDATA[<p>Genius idea, thanks!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Apple OS X install hell: way worse than Windows :( by sixcorners</title>
		<link>http://t-machine.org/index.php/2012/04/14/apple-os-x-install-hell-way-worse-than-windows/comment-page-1/#comment-67063</link>
		<dc:creator>sixcorners</dc:creator>
		<pubDate>Sat, 14 Apr 2012 13:18:10 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1862#comment-67063</guid>
		<description>I hashed my copy. You might be able to find it online.
It&#039;s the .dmg file found in the fancy Lion installer app. You can burn and boot it.
https://www.google.com/search?q=18542a8a1a16657257ba0b5263f5b044</description>
		<content:encoded><![CDATA[<p>I hashed my copy. You might be able to find it online.<br />
It&#8217;s the .dmg file found in the fancy Lion installer app. You can burn and boot it.<br />
<a href="https://www.google.com/search?q=18542a8a1a16657257ba0b5263f5b044" onclick="javascript:pageTracker._trackPageview('/outbound/comment/https://www.google.com/search?q=18542a8a1a16657257ba0b5263f5b044');">https://www.google.com/search?q=18542a8a1a16657257ba0b5263f5b044</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Entity Systems: what makes good Components? good Entities? by Mike Leahy</title>
		<link>http://t-machine.org/index.php/2012/03/16/entity-systems-what-makes-good-components-good-entities/comment-page-1/#comment-66553</link>
		<dc:creator>Mike Leahy</dc:creator>
		<pubDate>Thu, 12 Apr 2012 04:07:03 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1832#comment-66553</guid>
		<description>@JS

Indeed.. I certainly came across a bit zealous on extensible enums. Though it certainly has been the solution for me in storing unrelated entity state and general enum / state sharing between code projects / modules reducing dependencies on concrete enum types between modules. Like Josh Bloch mentions in item 34 that extensible enums seem only useful for opcodes; it turns out that encoding unrelated entity state is a very similar problem. The benefit of a statically typed enum over strings and bit fields and being able to load and manipulate states via reflection and the various Class methods of Java are awesome. IE Class.getEnumConstants(); 

The benefit of ExtEnumSet is that you can pack it with entity state enums that are unrelated to each other, but maintain one location for storing all entity state instead of separate location / data components. All systems just need access to the single ExtEnumSet stored in the entity. Otherwise if you store state for each subsystem area specifically in it&#039;s own component (say an animation data component) then every system that acts on those states also has to depend on all of the data components storing the various state. This can quickly void the benefit from a dependency angle of a component architecture for more complex games. There is also no way to enumerate over all these states in mass with state stored in separate components.

Also check out the item 32 &amp; 33 of Effective Java and the EnumSet / EnumMap discussion. The phase change example can be extended / modified to encode and retrieve say animation transition states.

Now instead of polling with if conditional statements each frame consider storing additional helper systems (or just a callback interface / class type) in an EnumMap (or ExtEnumMap). IE an animation system component can store additional callbacks by transition state or perhaps just the normal entity states (run left, etc.) stored will also trigger callbacks when the EnumSet storing state is enumerated against the EnumMap storing the callbacks. I&#039;m sure a little code example will make this clearer, but this seems like something to explore to complete an agnostic mechanism that can be loaded up in a data driven manner avoiding hard coded if conditional polling. This is at least how I will first approach a generic animation system.  This basic mechanism should work for both 2D sprite sheets and bones or other 3D animation systems.

Granted if your game is simple and everything is known in advance and you don&#039;t mind hard coding the if / conditional / polling then that certainly will be the quickest. In my efforts I&#039;m building generic subsystems such as animation that are entirely data driven. 

I don&#039;t have an official blog yet, but will be launching one officially for my efforts at the TyphonRT link.  I do post tech pontifications on G+ - https://plus.google.com/u/0/117904596907381647757/posts</description>
		<content:encoded><![CDATA[<p>@JS</p>
<p>Indeed.. I certainly came across a bit zealous on extensible enums. Though it certainly has been the solution for me in storing unrelated entity state and general enum / state sharing between code projects / modules reducing dependencies on concrete enum types between modules. Like Josh Bloch mentions in item 34 that extensible enums seem only useful for opcodes; it turns out that encoding unrelated entity state is a very similar problem. The benefit of a statically typed enum over strings and bit fields and being able to load and manipulate states via reflection and the various Class methods of Java are awesome. IE Class.getEnumConstants(); </p>
<p>The benefit of ExtEnumSet is that you can pack it with entity state enums that are unrelated to each other, but maintain one location for storing all entity state instead of separate location / data components. All systems just need access to the single ExtEnumSet stored in the entity. Otherwise if you store state for each subsystem area specifically in it&#8217;s own component (say an animation data component) then every system that acts on those states also has to depend on all of the data components storing the various state. This can quickly void the benefit from a dependency angle of a component architecture for more complex games. There is also no way to enumerate over all these states in mass with state stored in separate components.</p>
<p>Also check out the item 32 &amp; 33 of Effective Java and the EnumSet / EnumMap discussion. The phase change example can be extended / modified to encode and retrieve say animation transition states.</p>
<p>Now instead of polling with if conditional statements each frame consider storing additional helper systems (or just a callback interface / class type) in an EnumMap (or ExtEnumMap). IE an animation system component can store additional callbacks by transition state or perhaps just the normal entity states (run left, etc.) stored will also trigger callbacks when the EnumSet storing state is enumerated against the EnumMap storing the callbacks. I&#8217;m sure a little code example will make this clearer, but this seems like something to explore to complete an agnostic mechanism that can be loaded up in a data driven manner avoiding hard coded if conditional polling. This is at least how I will first approach a generic animation system.  This basic mechanism should work for both 2D sprite sheets and bones or other 3D animation systems.</p>
<p>Granted if your game is simple and everything is known in advance and you don&#8217;t mind hard coding the if / conditional / polling then that certainly will be the quickest. In my efforts I&#8217;m building generic subsystems such as animation that are entirely data driven. </p>
<p>I don&#8217;t have an official blog yet, but will be launching one officially for my efforts at the TyphonRT link.  I do post tech pontifications on G+ &#8211; <a href="https://plus.google.com/u/0/117904596907381647757/posts" onclick="javascript:pageTracker._trackPageview('/outbound/comment/https://plus.google.com/u/0/117904596907381647757/posts');">https://plus.google.com/u/0/117904596907381647757/posts</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on GDC 2012 Rejection by adam</title>
		<link>http://t-machine.org/index.php/2011/12/01/gdc-2012-rejection/comment-page-1/#comment-66448</link>
		<dc:creator>adam</dc:creator>
		<pubDate>Wed, 11 Apr 2012 13:45:44 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1766#comment-66448</guid>
		<description>@Wendy

Without a big corporate employer to pay travel costs, merely speaking at a USA conference costs me a minimum of $1,500 - and some local UK devs recently agreed that e.g. attending Apple&#039;s WWDC conf costs around $3,000-$4,500.

So ... not trying to go to conferences at the moment. Focussing on making stuff instead :) which a much better thing to do anyway!</description>
		<content:encoded><![CDATA[<p>@Wendy</p>
<p>Without a big corporate employer to pay travel costs, merely speaking at a USA conference costs me a minimum of $1,500 &#8211; and some local UK devs recently agreed that e.g. attending Apple&#8217;s WWDC conf costs around $3,000-$4,500.</p>
<p>So &#8230; not trying to go to conferences at the moment. Focussing on making stuff instead :) which a much better thing to do anyway!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Entity Systems: what makes good Components? good Entities? by JS</title>
		<link>http://t-machine.org/index.php/2012/03/16/entity-systems-what-makes-good-components-good-entities/comment-page-1/#comment-66214</link>
		<dc:creator>JS</dc:creator>
		<pubDate>Tue, 10 Apr 2012 09:04:53 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1832#comment-66214</guid>
		<description>@Both Thank you both again, I really appreciate your input. Mike do you have a blog or something alike?</description>
		<content:encoded><![CDATA[<p>@Both Thank you both again, I really appreciate your input. Mike do you have a blog or something alike?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Entity Systems: what makes good Components? good Entities? by JS</title>
		<link>http://t-machine.org/index.php/2012/03/16/entity-systems-what-makes-good-components-good-entities/comment-page-1/#comment-66213</link>
		<dc:creator>JS</dc:creator>
		<pubDate>Tue, 10 Apr 2012 09:04:31 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1832#comment-66213</guid>
		<description>@Adam: I apologize, it seems I am really bad at asking questions :D. I think one of the things that confused me most was a &quot;polling&quot; system for animation changes. By transitions I meant when an animation goes from standing idle to walking_left for example. An other thing that I was confused about was the entity system as a state machine itself. I wondered how that would be applicable here. -- However after searching and searching I think I&#039;ve been able to find most answers myself. I explain it here ( http://gamedev.stackexchange.com/questions/27079/data-driven-animation-states#comment44658_27079 ) if you&#039;d be interested. Don&#039;t feel obliged to check it out, though. It seems I am REALLY bad at asking questions ;).</description>
		<content:encoded><![CDATA[<p>@Adam: I apologize, it seems I am really bad at asking questions :D. I think one of the things that confused me most was a &#8220;polling&#8221; system for animation changes. By transitions I meant when an animation goes from standing idle to walking_left for example. An other thing that I was confused about was the entity system as a state machine itself. I wondered how that would be applicable here. &#8212; However after searching and searching I think I&#8217;ve been able to find most answers myself. I explain it here ( <a href="http://gamedev.stackexchange.com/questions/27079/data-driven-animation-states#comment44658_27079" onclick="javascript:pageTracker._trackPageview('/outbound/comment/http://gamedev.stackexchange.com/questions/27079/data-driven-animation-states#comment44658_27079');">http://gamedev.stackexchange.com/questions/27079/data-driven-animation-states#comment44658_27079</a> ) if you&#8217;d be interested. Don&#8217;t feel obliged to check it out, though. It seems I am REALLY bad at asking questions ;).</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Entity Systems: what makes good Components? good Entities? by JS</title>
		<link>http://t-machine.org/index.php/2012/03/16/entity-systems-what-makes-good-components-good-entities/comment-page-1/#comment-66212</link>
		<dc:creator>JS</dc:creator>
		<pubDate>Tue, 10 Apr 2012 09:04:05 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1832#comment-66212</guid>
		<description>@Mike Leahy That&#039;s really in-depth information. I did read your previous comments however it&#039;s not always easy to follow the comments so I didn&#039;t think it was very relevant to me. I&#039;m definitely going to follow your recommendation and see if ExtEnums are anything for me.</description>
		<content:encoded><![CDATA[<p>@Mike Leahy That&#8217;s really in-depth information. I did read your previous comments however it&#8217;s not always easy to follow the comments so I didn&#8217;t think it was very relevant to me. I&#8217;m definitely going to follow your recommendation and see if ExtEnums are anything for me.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Entity Systems: what makes good Components? good Entities? by adam</title>
		<link>http://t-machine.org/index.php/2012/03/16/entity-systems-what-makes-good-components-good-entities/comment-page-1/#comment-65868</link>
		<dc:creator>adam</dc:creator>
		<pubDate>Sun, 08 Apr 2012 10:34:15 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1832#comment-65868</guid>
		<description>@JS

I don&#039;t see the difficulty here, can you say what the specific problem is?

If you&#039;ve got something that plays an animation, then you already have some notion of gradually moving through an anim.

To add transitions, all you have to do is duplicate those items in your animation component, and prefix them something like &quot;transitionTo...&quot;, and add a 3rd framecounter, which is the &quot;percentageOfTransitionCompleted&quot;

On each frame, if you detect there&#039;s a transition in progress, you take the frame in the old anim, and the frame in the new anim, and then you use the percentageOfTransition.. to morph between them (and update the percentageOfTransition... counter too).

Depending on how your anims work, you MIGHT need to keep updating the framecounters for the two anims too - e.g. if someone is &quot;running&#039;, and then hits &quot;jump&quot;, then you probably want to keep the legs moving in the source anim while you transition it to the other anim. (this works fine in 3D, where you can tween the individual bones of the legs. If you&#039;re using 2D sprites with no bone info ... it probably looks very strange / wrong)</description>
		<content:encoded><![CDATA[<p>@JS</p>
<p>I don&#8217;t see the difficulty here, can you say what the specific problem is?</p>
<p>If you&#8217;ve got something that plays an animation, then you already have some notion of gradually moving through an anim.</p>
<p>To add transitions, all you have to do is duplicate those items in your animation component, and prefix them something like &#8220;transitionTo&#8230;&#8221;, and add a 3rd framecounter, which is the &#8220;percentageOfTransitionCompleted&#8221;</p>
<p>On each frame, if you detect there&#8217;s a transition in progress, you take the frame in the old anim, and the frame in the new anim, and then you use the percentageOfTransition.. to morph between them (and update the percentageOfTransition&#8230; counter too).</p>
<p>Depending on how your anims work, you MIGHT need to keep updating the framecounters for the two anims too &#8211; e.g. if someone is &#8220;running&#8217;, and then hits &#8220;jump&#8221;, then you probably want to keep the legs moving in the source anim while you transition it to the other anim. (this works fine in 3D, where you can tween the individual bones of the legs. If you&#8217;re using 2D sprites with no bone info &#8230; it probably looks very strange / wrong)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Entity Systems: what makes good Components? good Entities? by Mike Leahy</title>
		<link>http://t-machine.org/index.php/2012/03/16/entity-systems-what-makes-good-components-good-entities/comment-page-1/#comment-65793</link>
		<dc:creator>Mike Leahy</dc:creator>
		<pubDate>Sun, 08 Apr 2012 00:16:10 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1832#comment-65793</guid>
		<description>&gt;Undoubtedly my lack of experience puts me in a position where I’m not sure how to handle this while making sure to respect the Entity System Philosophy.

Don&#039;t sweat it too much. Things are still seemingly in the early adoption phase, so there isn&#039;t any one codified approach so to speak yet. There are small to large differences between most ES implementations. 

&gt;How should the states be saved? As a string in the a special component? Or as different components?

If you are using Java I am a huge fan of extensible enums. Josh Bloch&#039;s book Effective Java item 34 is a good place to start (http://tinyurl.com/73xvzo7). You&#039;ll notice though that even in Bloch&#039;s description of extensible enums he stops short and mentions that they are not usable with an EnumSet (item 32) which is a fast implementation of a Set for enums. 

To overcome this I&#039;ve made an extensible EnumSet (ExtEnumSet) that allows one or more extensible enums to be packed into a bit set. One of the only things in my ES efforts that defines an Entity vs just a standard component manager is that the Entity is guaranteed to have at least one ExtEnumSet to store state. An entity if necessary can have more than one, but due to the extensible nature of the set usually one is just fine. The really cool thing is that you can correlate combinations of state between unrelated extensible enums or even just retrieve the combinations of state stored for one extensible enum. 

&gt;Where would a current animation state be stored? How would the absence / presence of a component play a role here?

Buried in the &quot;goliath ES post&quot; I even discuss how it&#039;s possible to create an extensible enum component that conforms to the general ES mechanism. 

I much prefer extensible enums in my work as they provide a strongly typed way to store unrelated state and this definitely cuts out mistakes with a collection of Strings or the plain old bit fields. 

An animation system can then retrieve one or more enum sets from ExtEnumSet to determine currents state and say which sprite sheet to draw. Quite conceivably if there are parallel animations on the same entity 2 or more animation systems could run in parallel each frame. 

If there is complex transition state that can&#039;t be represented by on / off or a combination of state I suppose one could even create an &quot;in between&quot; extensible enum that stores a third state for a more complex action. This transition enum would be time varying somehow where a system would control it&#039;s state and not the user directly.. IE user presses a button state 1 is on; user lets go button and state one is off and then a system detects this and sets the in between state; x seconds later the system turns off the in between state. 

The nice thing about the ExtEnumSet is that it provides one data component that can generically store any number of different state enums. IE you don&#039;t have to make a custom component for each different type of state you want to store as it all can be packed into one ExtEnumSet. Various animation systems also just need to access the single ExtEnumSet. This also allows state to be programmatically set or say input oriented systems to directly store state in this ExtEnumSet and the animation systems don&#039;t have to know anything about the various input systems.

Unfortunately there is not a whole lot of folks out there who have written on using extensible enums or creating an extensible EnumSet. As far as I know with some Googling I haven&#039;t found anyone else mention the above.  It&#039;s been a huge boon in my efforts thought it&#039;s also not easy to create this additional EnumSet variation and I can see why work stopped at EnumSet in regard to the Java SDK and the general case. Definitely more error prone for a custom collection and my implementation is only 75% complete today, but brings great functionality already. 

I swear by extensible enums really... They are also a key way to share state between wholly distinct modules (usually an IDE project) greatly aiding reduction of dependencies for state between modules.</description>
		<content:encoded><![CDATA[<p>&gt;Undoubtedly my lack of experience puts me in a position where I’m not sure how to handle this while making sure to respect the Entity System Philosophy.</p>
<p>Don&#8217;t sweat it too much. Things are still seemingly in the early adoption phase, so there isn&#8217;t any one codified approach so to speak yet. There are small to large differences between most ES implementations. </p>
<p>&gt;How should the states be saved? As a string in the a special component? Or as different components?</p>
<p>If you are using Java I am a huge fan of extensible enums. Josh Bloch&#8217;s book Effective Java item 34 is a good place to start (<a href="http://tinyurl.com/73xvzo7" onclick="javascript:pageTracker._trackPageview('/outbound/comment/http://tinyurl.com/73xvzo7');">http://tinyurl.com/73xvzo7</a>). You&#8217;ll notice though that even in Bloch&#8217;s description of extensible enums he stops short and mentions that they are not usable with an EnumSet (item 32) which is a fast implementation of a Set for enums. </p>
<p>To overcome this I&#8217;ve made an extensible EnumSet (ExtEnumSet) that allows one or more extensible enums to be packed into a bit set. One of the only things in my ES efforts that defines an Entity vs just a standard component manager is that the Entity is guaranteed to have at least one ExtEnumSet to store state. An entity if necessary can have more than one, but due to the extensible nature of the set usually one is just fine. The really cool thing is that you can correlate combinations of state between unrelated extensible enums or even just retrieve the combinations of state stored for one extensible enum. </p>
<p>&gt;Where would a current animation state be stored? How would the absence / presence of a component play a role here?</p>
<p>Buried in the &#8220;goliath ES post&#8221; I even discuss how it&#8217;s possible to create an extensible enum component that conforms to the general ES mechanism. </p>
<p>I much prefer extensible enums in my work as they provide a strongly typed way to store unrelated state and this definitely cuts out mistakes with a collection of Strings or the plain old bit fields. </p>
<p>An animation system can then retrieve one or more enum sets from ExtEnumSet to determine currents state and say which sprite sheet to draw. Quite conceivably if there are parallel animations on the same entity 2 or more animation systems could run in parallel each frame. </p>
<p>If there is complex transition state that can&#8217;t be represented by on / off or a combination of state I suppose one could even create an &#8220;in between&#8221; extensible enum that stores a third state for a more complex action. This transition enum would be time varying somehow where a system would control it&#8217;s state and not the user directly.. IE user presses a button state 1 is on; user lets go button and state one is off and then a system detects this and sets the in between state; x seconds later the system turns off the in between state. </p>
<p>The nice thing about the ExtEnumSet is that it provides one data component that can generically store any number of different state enums. IE you don&#8217;t have to make a custom component for each different type of state you want to store as it all can be packed into one ExtEnumSet. Various animation systems also just need to access the single ExtEnumSet. This also allows state to be programmatically set or say input oriented systems to directly store state in this ExtEnumSet and the animation systems don&#8217;t have to know anything about the various input systems.</p>
<p>Unfortunately there is not a whole lot of folks out there who have written on using extensible enums or creating an extensible EnumSet. As far as I know with some Googling I haven&#8217;t found anyone else mention the above.  It&#8217;s been a huge boon in my efforts thought it&#8217;s also not easy to create this additional EnumSet variation and I can see why work stopped at EnumSet in regard to the Java SDK and the general case. Definitely more error prone for a custom collection and my implementation is only 75% complete today, but brings great functionality already. </p>
<p>I swear by extensible enums really&#8230; They are also a key way to share state between wholly distinct modules (usually an IDE project) greatly aiding reduction of dependencies for state between modules.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Entity Systems: what makes good Components? good Entities? by JS</title>
		<link>http://t-machine.org/index.php/2012/03/16/entity-systems-what-makes-good-components-good-entities/comment-page-1/#comment-65756</link>
		<dc:creator>JS</dc:creator>
		<pubDate>Sat, 07 Apr 2012 18:01:33 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1832#comment-65756</guid>
		<description>Thank you both for your advice, it&#039;s been very helpful to me.

I have one more question about systems and components. Currently I&#039;m working with animations and how to handle them. I created an animation component to work with a rendering component. A generic &quot;Animate&quot; system simply updates the frame count in the animation component and passes rendering information to the rendering component (more specific: which rectangle on the sheet to draw).

However my question is about how to handle transitions between animations / animation states. Where would you put that logic? In one system that checks animation states and events to change a state, or diffuse over all systems? How should the states be saved? As a string in the a special component? Or as different components?

Undoubtedly my lack of experience puts me in a position where I&#039;m not sure how to handle this while making sure to respect the Entity System Philosophy.

I noticed some one asked a similar question on one of your previous articles in the series, Adam. Oh, I just can&#039;t seem to find it at the moment. On gamedev.stackexchange there was a similar question though. I wondered what you&#039;d think about the answer, especially when you told us not to trust advice from that site :). http://gamedev.stackexchange.com/questions/25686/abstracting-entity- system-animation-states


You also mentioned in part 2: &quot;The Animation system constantly looks out for anything that would trigger a new animation, or cause an existing animation to change (e.g. player changes direction mid-step), and updates the data of each affected Entity (of course, only those that actually have the Animatable Component, i.e. are animations).&quot;

Could you help me out here and elaborate a bit on how that would work exactly? How does it &quot;look out&quot; for those triggers? A bunch of if-statements where we check keyboard input (while running, for example)? Where would a current animation state be stored? How would the absence / presence of a component play a role here?

Anyway, thanks for the advice you guys gave me and hopefully you&#039;ll find the time to help me out again. It&#039;s a learning process and I hope I&#039;m not bothering you with boring details, I&#039;m just trying to fit the pieces together.</description>
		<content:encoded><![CDATA[<p>Thank you both for your advice, it&#8217;s been very helpful to me.</p>
<p>I have one more question about systems and components. Currently I&#8217;m working with animations and how to handle them. I created an animation component to work with a rendering component. A generic &#8220;Animate&#8221; system simply updates the frame count in the animation component and passes rendering information to the rendering component (more specific: which rectangle on the sheet to draw).</p>
<p>However my question is about how to handle transitions between animations / animation states. Where would you put that logic? In one system that checks animation states and events to change a state, or diffuse over all systems? How should the states be saved? As a string in the a special component? Or as different components?</p>
<p>Undoubtedly my lack of experience puts me in a position where I&#8217;m not sure how to handle this while making sure to respect the Entity System Philosophy.</p>
<p>I noticed some one asked a similar question on one of your previous articles in the series, Adam. Oh, I just can&#8217;t seem to find it at the moment. On gamedev.stackexchange there was a similar question though. I wondered what you&#8217;d think about the answer, especially when you told us not to trust advice from that site :). <a href="http://gamedev.stackexchange.com/questions/25686/abstracting-entity-" onclick="javascript:pageTracker._trackPageview('/outbound/comment/http://gamedev.stackexchange.com/questions/25686/abstracting-entity-');">http://gamedev.stackexchange.com/questions/25686/abstracting-entity-</a> system-animation-states</p>
<p>You also mentioned in part 2: &#8220;The Animation system constantly looks out for anything that would trigger a new animation, or cause an existing animation to change (e.g. player changes direction mid-step), and updates the data of each affected Entity (of course, only those that actually have the Animatable Component, i.e. are animations).&#8221;</p>
<p>Could you help me out here and elaborate a bit on how that would work exactly? How does it &#8220;look out&#8221; for those triggers? A bunch of if-statements where we check keyboard input (while running, for example)? Where would a current animation state be stored? How would the absence / presence of a component play a role here?</p>
<p>Anyway, thanks for the advice you guys gave me and hopefully you&#8217;ll find the time to help me out again. It&#8217;s a learning process and I hope I&#8217;m not bothering you with boring details, I&#8217;m just trying to fit the pieces together.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on 8 things to avoid when building an MMOG server by Chris Ochs</title>
		<link>http://t-machine.org/index.php/2007/09/27/8-things-to-avoid-when-building-an-mmog-server/comment-page-1/#comment-65314</link>
		<dc:creator>Chris Ochs</dc:creator>
		<pubDate>Thu, 05 Apr 2012 11:14:09 +0000</pubDate>
		<guid isPermaLink="false">http://tmachine1.dh.bytemark.co.uk/blog/index.php/2007/09/27/8-things-to-avoid-when-building-an-mmog-server/#comment-65314</guid>
		<description>I&#039;ve used &#039;scripting&#039; languages at some scale for games, although very little with virtual worlds outside of personal projects.

My general approach is to use multiple languages.  So called scripting languages have come a long way.  I&#039;ve done some pretty amazing stuff with jruby for instance, because I can leverage the jvm and choose when to use pure java or do it in ruby.   And I&#039;ll sometimes drop out to C using extensions.

For network servers, messaging systems, etc.., you are better off using java or C.  Anything that has to handle thousands of operations a second, is going to benefit from a faster language.  But the key here is that with distributed computing and scaling horizontally, there are fewer places in your code that have to handle that kind of volume, so it opens the door to doing a lot more with more productive languages.  The big failure of the game industry has been to stick with vertical scaling. You don&#039;t need to handle thousands of requests per second on a single server, although I&#039;d say around a thousand is a good number for an intel box.

I haven&#039;t worked that much on physics engines in particular, but I&#039;ve spent many years on client/server architectures, and I work with live games where we are using distributed systems and message passing to a good degree of success.  I&#039;ve seen first hand the source code for several commercial engines, and how can I say it nicely, they are antiquated.  They can only scale vertically, they still have an rdbms as a central bottleneck.  Very little use of tools like redis, mongodb, zeromq, etc..   If you are still scaling vertically and your only option is to squeeze as much as you can out of a single server, you are doing it wrong.

Another major lesson I&#039;ve learned is that the performance of the language does not equal the performance of the system.  The main reason now days to choose languages like C or Java is the tools, that&#039;s where dynamic languages are still pretty far behind.  Things like thread/heap dumps, good memory management, profiling tools, that&#039;s what you miss the most.</description>
		<content:encoded><![CDATA[<p>I&#8217;ve used &#8216;scripting&#8217; languages at some scale for games, although very little with virtual worlds outside of personal projects.</p>
<p>My general approach is to use multiple languages.  So called scripting languages have come a long way.  I&#8217;ve done some pretty amazing stuff with jruby for instance, because I can leverage the jvm and choose when to use pure java or do it in ruby.   And I&#8217;ll sometimes drop out to C using extensions.</p>
<p>For network servers, messaging systems, etc.., you are better off using java or C.  Anything that has to handle thousands of operations a second, is going to benefit from a faster language.  But the key here is that with distributed computing and scaling horizontally, there are fewer places in your code that have to handle that kind of volume, so it opens the door to doing a lot more with more productive languages.  The big failure of the game industry has been to stick with vertical scaling. You don&#8217;t need to handle thousands of requests per second on a single server, although I&#8217;d say around a thousand is a good number for an intel box.</p>
<p>I haven&#8217;t worked that much on physics engines in particular, but I&#8217;ve spent many years on client/server architectures, and I work with live games where we are using distributed systems and message passing to a good degree of success.  I&#8217;ve seen first hand the source code for several commercial engines, and how can I say it nicely, they are antiquated.  They can only scale vertically, they still have an rdbms as a central bottleneck.  Very little use of tools like redis, mongodb, zeromq, etc..   If you are still scaling vertically and your only option is to squeeze as much as you can out of a single server, you are doing it wrong.</p>
<p>Another major lesson I&#8217;ve learned is that the performance of the language does not equal the performance of the system.  The main reason now days to choose languages like C or Java is the tools, that&#8217;s where dynamic languages are still pretty far behind.  Things like thread/heap dumps, good memory management, profiling tools, that&#8217;s what you miss the most.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Entity Systems: integrating Box2D with Artemis by Mike Leahy</title>
		<link>http://t-machine.org/index.php/2012/04/03/entity-systems-integrating-box2d-with-artemis/comment-page-1/#comment-64949</link>
		<dc:creator>Mike Leahy</dc:creator>
		<pubDate>Tue, 03 Apr 2012 15:21:48 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1854#comment-64949</guid>
		<description>For sure... Here is the particular post I was referring to in the other ES thread regarding the relative difficulty of recycling components when one combines an ES or in general a component architecture with a heavily OOP based framework like libgdx or really any OOP bound API / framework. I think this is definitely going to be a case to discuss as none of the publicly available Java based ES efforts do so yet; I&#039;m taking a solid stab at it, but is also a reason why I&#039;m still working on my efforts vs a public release. Good to see the Gemserk folks making their Artemis mods publicly available though!

http://blog.gemserk.com/2012/01/03/reusing-artemis-entities-by-enabling-disabling-and-storing-them/

Pretty much any 3rd party library one has to be mindful of how data/system components aggregate OOP bound objects including say the Android SDK which has provided its many &quot;bundles of joy&quot; to untangle. IMHO the majority of the Android SDK is hastily created, already shows the general failures of OOP, and real trouble spots w/ some underlying Harmony implementation _still_ plagues Android 3.5+ years on even w/ ICS - Google is more interested in adding new features _still_ instead of shoring up the bases and reducing technical debt instead of piling it on... (uh oh did I just go on another Android rant; love it). If you are lucky the objects are not just bound by DI or constructor injection; IE they are more POJO in nature and / or have getters / setters so that when an aggregate component is recycled these explicitly composed objects can be set with fresh data.

The Gemserk folks sort of cheat by simply disabling unused entities in their aggregated state and enabling them again when they are needed. This certainly works, but unfortunately is not much of an improvement over a heavyweight object pool.</description>
		<content:encoded><![CDATA[<p>For sure&#8230; Here is the particular post I was referring to in the other ES thread regarding the relative difficulty of recycling components when one combines an ES or in general a component architecture with a heavily OOP based framework like libgdx or really any OOP bound API / framework. I think this is definitely going to be a case to discuss as none of the publicly available Java based ES efforts do so yet; I&#8217;m taking a solid stab at it, but is also a reason why I&#8217;m still working on my efforts vs a public release. Good to see the Gemserk folks making their Artemis mods publicly available though!</p>
<p><a href="http://blog.gemserk.com/2012/01/03/reusing-artemis-entities-by-enabling-disabling-and-storing-them/" onclick="javascript:pageTracker._trackPageview('/outbound/comment/http://blog.gemserk.com/2012/01/03/reusing-artemis-entities-by-enabling-disabling-and-storing-them/');">http://blog.gemserk.com/2012/01/03/reusing-artemis-entities-by-enabling-disabling-and-storing-them/</a></p>
<p>Pretty much any 3rd party library one has to be mindful of how data/system components aggregate OOP bound objects including say the Android SDK which has provided its many &#8220;bundles of joy&#8221; to untangle. IMHO the majority of the Android SDK is hastily created, already shows the general failures of OOP, and real trouble spots w/ some underlying Harmony implementation _still_ plagues Android 3.5+ years on even w/ ICS &#8211; Google is more interested in adding new features _still_ instead of shoring up the bases and reducing technical debt instead of piling it on&#8230; (uh oh did I just go on another Android rant; love it). If you are lucky the objects are not just bound by DI or constructor injection; IE they are more POJO in nature and / or have getters / setters so that when an aggregate component is recycled these explicitly composed objects can be set with fresh data.</p>
<p>The Gemserk folks sort of cheat by simply disabling unused entities in their aggregated state and enabling them again when they are needed. This certainly works, but unfortunately is not much of an improvement over a heavyweight object pool.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Realm of the Mad God &#8211; a great game, interesting monetization by Andrew Crystall</title>
		<link>http://t-machine.org/index.php/2012/03/28/realm-of-the-mad-god-a-great-game-interesting-monetization/comment-page-1/#comment-64918</link>
		<dc:creator>Andrew Crystall</dc:creator>
		<pubDate>Tue, 03 Apr 2012 10:39:14 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1851#comment-64918</guid>
		<description>There&#039;s already a stand-alone (steam) client.</description>
		<content:encoded><![CDATA[<p>There&#8217;s already a stand-alone (steam) client.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Entity Systems: what makes good Components? good Entities? by Mike Leahy</title>
		<link>http://t-machine.org/index.php/2012/03/16/entity-systems-what-makes-good-components-good-entities/comment-page-1/#comment-64903</link>
		<dc:creator>Mike Leahy</dc:creator>
		<pubDate>Tue, 03 Apr 2012 08:56:25 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1832#comment-64903</guid>
		<description>Regarding category names. I do prefer data &amp; system components. Everything is ultimately a component at least in my efforts, so I think it&#039;s confusing to make a distinction of &quot;components&quot; as data and &quot;systems&quot; as logic.  I definitely prefer data component or system component. in my efforts there are also other component types. 

Regarding methods in data components. From my perspective this is certainly fine especially if the setter methods do some sort of error or bound correction as any externalization of this is kind of silly. Also the use of interfaces for components even data components one must have getter / setter accessors. 

@JS - &quot;cannot contain methods. However sometimes it seems to be logical for a component to hold a class object&quot;

Explicit composition / has a relationships are fine IMHO. In my efforts Since any component can also be a component manager it&#039;s possible to create a data component that supports implicit composition so one can dynamically aggregate and access additional child components. In my efforts generally where speed or data oriented concerns aren&#039;t in play the implicit composition form is preferred. In particular if one is combining a 3rd party OOP framework it&#039;s necessary to embed. One has to be careful though in this approach of embedding OOP frameworks in a component framework when it comes to recycling components especially if the contained OOP objects are only initialized via constructors.

An example of folks running into this type of problem are Gemserk folks who are customizing Artemis combined with libgdx which is an OOP framework. Recycling components becomes a problem when your core framework integration is OOP. Nice blog to follow on folks using entity systems: http://blog.gemserk.com/

In my efforts I provide essential parity in features compared to libgdx, but all APIs are component oriented thus recycling custom components that integrate graphics API components don&#039;t get gunked up with deeply embedding an OOP framework. Might I say though that it&#039;s taken me significantly longer to get my efforts publicly available due to the additional up front architecture complexity.</description>
		<content:encoded><![CDATA[<p>Regarding category names. I do prefer data &amp; system components. Everything is ultimately a component at least in my efforts, so I think it&#8217;s confusing to make a distinction of &#8220;components&#8221; as data and &#8220;systems&#8221; as logic.  I definitely prefer data component or system component. in my efforts there are also other component types. </p>
<p>Regarding methods in data components. From my perspective this is certainly fine especially if the setter methods do some sort of error or bound correction as any externalization of this is kind of silly. Also the use of interfaces for components even data components one must have getter / setter accessors. </p>
<p>@JS &#8211; &#8220;cannot contain methods. However sometimes it seems to be logical for a component to hold a class object&#8221;</p>
<p>Explicit composition / has a relationships are fine IMHO. In my efforts Since any component can also be a component manager it&#8217;s possible to create a data component that supports implicit composition so one can dynamically aggregate and access additional child components. In my efforts generally where speed or data oriented concerns aren&#8217;t in play the implicit composition form is preferred. In particular if one is combining a 3rd party OOP framework it&#8217;s necessary to embed. One has to be careful though in this approach of embedding OOP frameworks in a component framework when it comes to recycling components especially if the contained OOP objects are only initialized via constructors.</p>
<p>An example of folks running into this type of problem are Gemserk folks who are customizing Artemis combined with libgdx which is an OOP framework. Recycling components becomes a problem when your core framework integration is OOP. Nice blog to follow on folks using entity systems: <a href="http://blog.gemserk.com/" onclick="javascript:pageTracker._trackPageview('/outbound/comment/http://blog.gemserk.com/');">http://blog.gemserk.com/</a></p>
<p>In my efforts I provide essential parity in features compared to libgdx, but all APIs are component oriented thus recycling custom components that integrate graphics API components don&#8217;t get gunked up with deeply embedding an OOP framework. Might I say though that it&#8217;s taken me significantly longer to get my efforts publicly available due to the additional up front architecture complexity.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Entity Systems: what makes good Components? good Entities? by adam</title>
		<link>http://t-machine.org/index.php/2012/03/16/entity-systems-what-makes-good-components-good-entities/comment-page-1/#comment-64901</link>
		<dc:creator>adam</dc:creator>
		<pubDate>Tue, 03 Apr 2012 08:17:17 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1832#comment-64901</guid>
		<description>&quot;The problem with creating a PolygonCollidable component, for example, is that I can’t add methods to it. My collision code uses a polygon object with the method “projectAxis(Vector2d axis)”.&quot;

Methods live inside your System, not on your Compononents. Put the method inside your CD system - which is where it should be! It has nothing to do with anything except collision!

If you&#039;re desperate to keep it in separate methods-per-type, use Function Overloading, and have multiple static methods / instance methods on your System (or on a helper class for your system - which is probably the cleanest way to do it)</description>
		<content:encoded><![CDATA[<p>&#8220;The problem with creating a PolygonCollidable component, for example, is that I can’t add methods to it. My collision code uses a polygon object with the method “projectAxis(Vector2d axis)”.&#8221;</p>
<p>Methods live inside your System, not on your Compononents. Put the method inside your CD system &#8211; which is where it should be! It has nothing to do with anything except collision!</p>
<p>If you&#8217;re desperate to keep it in separate methods-per-type, use Function Overloading, and have multiple static methods / instance methods on your System (or on a helper class for your system &#8211; which is probably the cleanest way to do it)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Entity Systems: what makes good Components? good Entities? by adam</title>
		<link>http://t-machine.org/index.php/2012/03/16/entity-systems-what-makes-good-components-good-entities/comment-page-1/#comment-64898</link>
		<dc:creator>adam</dc:creator>
		<pubDate>Tue, 03 Apr 2012 08:08:48 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1832#comment-64898</guid>
		<description>&quot;How can I achieve this encapsulation of collision code so it doesn&#039;t have to know the entity system or what components are?&quot;

You can&#039;t.

You shouldn&#039;t.</description>
		<content:encoded><![CDATA[<p>&#8220;How can I achieve this encapsulation of collision code so it doesn&#8217;t have to know the entity system or what components are?&#8221;</p>
<p>You can&#8217;t.</p>
<p>You shouldn&#8217;t.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Entity Systems: what makes good Components? good Entities? by JS</title>
		<link>http://t-machine.org/index.php/2012/03/16/entity-systems-what-makes-good-components-good-entities/comment-page-1/#comment-64897</link>
		<dc:creator>JS</dc:creator>
		<pubDate>Tue, 03 Apr 2012 08:03:20 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1832#comment-64897</guid>
		<description>The problem with creating a PolygonCollidable component, for example, is that I can&#039;t add methods to it. My collision code uses a polygon object with the method &quot;projectAxis(Vector2d axis)&quot;.

I&#039;d like to seperate my collision code from the entity system. My &quot;CollisionSystem&quot; (or process in my implementation) should take data from the entity system, give it to a separate physics / collision engine, pull out results and create CollisionReaction components accordingly or update the data within the entity system.

What I want to avoid is to implement a set of collision algorithms that are dependent on a specific entity system component. How can I achieve this encapsulation of collision code so it doesn&#039;t have to know the entity system or what components are?</description>
		<content:encoded><![CDATA[<p>The problem with creating a PolygonCollidable component, for example, is that I can&#8217;t add methods to it. My collision code uses a polygon object with the method &#8220;projectAxis(Vector2d axis)&#8221;.</p>
<p>I&#8217;d like to seperate my collision code from the entity system. My &#8220;CollisionSystem&#8221; (or process in my implementation) should take data from the entity system, give it to a separate physics / collision engine, pull out results and create CollisionReaction components accordingly or update the data within the entity system.</p>
<p>What I want to avoid is to implement a set of collision algorithms that are dependent on a specific entity system component. How can I achieve this encapsulation of collision code so it doesn&#8217;t have to know the entity system or what components are?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Realm of the Mad God &#8211; a great game, interesting monetization by Amit Patel</title>
		<link>http://t-machine.org/index.php/2012/03/28/realm-of-the-mad-god-a-great-game-interesting-monetization/comment-page-1/#comment-64716</link>
		<dc:creator>Amit Patel</dc:creator>
		<pubDate>Mon, 02 Apr 2012 02:02:00 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1851#comment-64716</guid>
		<description>@Adam: The Flash install situation is both getting better and worse. Better: Adobe is pushing automatic updates now, so fewer people have old versions of Flash. Worse: more people are becoming anti-plugin, and this will affect both Flash and Unity.

RotMG could be much faster if they switch to Flash 11 / Stage3D. It&#039;s a 3d engine doing software rendering using Flash&#039;s 2d API. That port is probably more practical than a port to Unity :)</description>
		<content:encoded><![CDATA[<p>@Adam: The Flash install situation is both getting better and worse. Better: Adobe is pushing automatic updates now, so fewer people have old versions of Flash. Worse: more people are becoming anti-plugin, and this will affect both Flash and Unity.</p>
<p>RotMG could be much faster if they switch to Flash 11 / Stage3D. It&#8217;s a 3d engine doing software rendering using Flash&#8217;s 2d API. That port is probably more practical than a port to Unity :)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Entity Systems: what makes good Components? good Entities? by adam</title>
		<link>http://t-machine.org/index.php/2012/03/16/entity-systems-what-makes-good-components-good-entities/comment-page-1/#comment-64712</link>
		<dc:creator>adam</dc:creator>
		<pubDate>Mon, 02 Apr 2012 01:04:25 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1832#comment-64712</guid>
		<description>@Janne

re: Shape - sounds to me like you should have a PolygonCollidable component, a CircleCollidable component, etc. Why on earth would you have a &quot;Shape&quot;? I&#039;ve done it this way in a few games - then I can swap in/out new CD algorithms, e.g. algorithms that don&#039;t support circles, or only support 2D collision not 3D collision - and everything works fine because the algorithms only access the data that they understand.

Obviously, if there are entities that the algo doesnt understand, they dont participate in CD - but that&#039;s much better than any alternatives.

re: vector - If you&#039;re going to create new basic datatypes - e.g. Vector - then your choices depend on language. The purest approach is to make the new type IDENTICAL TO a fixed-size array of basic datatypes (i.e. a struct in C), and (if your language supports it) read/write to/from the raw basic datatypes - even if you use a flyweight / facade on the front to make it &quot;look like&quot; a basic datatype (in the form of an object). Creating new methods for the new type - that live outside the ES and outside your code - is OK. But a lot of people find it difficult to stop at that point; a lot of people are then tempted to add methods to their components themselves.

In general, though, I advise against adding new datatypes until you&#039;re 100% sure and comfortable with the ES. It&#039;s so easy to screw up at that point.

re: &quot;process&quot; - yes, &quot;System&quot; is too generic a name really, I&#039;m open to better names, but they&#039;re all too generic. e.g. Process is already defined to mean &quot;a kind of thread&quot; or &quot;an application&quot; in many programming languages :(.</description>
		<content:encoded><![CDATA[<p>@Janne</p>
<p>re: Shape &#8211; sounds to me like you should have a PolygonCollidable component, a CircleCollidable component, etc. Why on earth would you have a &#8220;Shape&#8221;? I&#8217;ve done it this way in a few games &#8211; then I can swap in/out new CD algorithms, e.g. algorithms that don&#8217;t support circles, or only support 2D collision not 3D collision &#8211; and everything works fine because the algorithms only access the data that they understand.</p>
<p>Obviously, if there are entities that the algo doesnt understand, they dont participate in CD &#8211; but that&#8217;s much better than any alternatives.</p>
<p>re: vector &#8211; If you&#8217;re going to create new basic datatypes &#8211; e.g. Vector &#8211; then your choices depend on language. The purest approach is to make the new type IDENTICAL TO a fixed-size array of basic datatypes (i.e. a struct in C), and (if your language supports it) read/write to/from the raw basic datatypes &#8211; even if you use a flyweight / facade on the front to make it &#8220;look like&#8221; a basic datatype (in the form of an object). Creating new methods for the new type &#8211; that live outside the ES and outside your code &#8211; is OK. But a lot of people find it difficult to stop at that point; a lot of people are then tempted to add methods to their components themselves.</p>
<p>In general, though, I advise against adding new datatypes until you&#8217;re 100% sure and comfortable with the ES. It&#8217;s so easy to screw up at that point.</p>
<p>re: &#8220;process&#8221; &#8211; yes, &#8220;System&#8221; is too generic a name really, I&#8217;m open to better names, but they&#8217;re all too generic. e.g. Process is already defined to mean &#8220;a kind of thread&#8221; or &#8220;an application&#8221; in many programming languages :(.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Entity Systems: what makes good Components? good Entities? by JS</title>
		<link>http://t-machine.org/index.php/2012/03/16/entity-systems-what-makes-good-components-good-entities/comment-page-1/#comment-64661</link>
		<dc:creator>JS</dc:creator>
		<pubDate>Sun, 01 Apr 2012 19:58:06 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1832#comment-64661</guid>
		<description>Hello there. I&#039;m a hobbyist using your articles to implement my own entity system in java. I had a question about components tho, maybe you could clear this up for me?

I know components can only hold data e.g. &quot;int&quot;, &quot;String&quot;, ... and cannot contain methods. However sometimes it seems to be logical for a component to hold a class object.

I have a very concrete example. My collision detection class has static methods for calculating if polygons and circles overlap. Therefor I have 3 important classes: Polygon, Circle, Vector. Those classes hold a bit of data [ Vector.x and Vector.y for example ] and a few simple methods to do math [ Vector.add(Vector v) ]. They clearly do not contain game logic.

It seems logical to create a &quot;Physical&quot; component with field &quot;shape&quot; which holds e.g. a Polygon object.

The other way to do this I see right now is to give a &quot;PhysicalPoly&quot; component a list of x values and a list of y values and a center and when I run the CollisionSystem create new Polygon objects based on the data in the PhysicalPoly components I need to check and destroy them in the end. However this seems quite intensive to do each game tick.

What am I overlooking here?

On a side note: I named my (sub)systems differently by the name of &quot;Process&quot;. Every process has one public method &quot;Process.run()&quot;. The way I understand your concept of an ES that seemed like a better naming to me. E.g. I have a component &quot;Position&quot; and a process &quot;Move&quot;. So I call Move.run() on every Position component I want to move.

Another thing I did is create simple groups of entities. Instead of letting my Move process on all entities with a specific component (like a &#039;Move&#039; component) I would let it process all entities who subscribed to the &quot;Movable&quot; group. So on entity creation I would add all components I want it to have and register the entity to all groups I want it to be processed in.

Here is an example of entity creation (I thought you might be interested):

        // Create player
        Integer player = em.createEntity();

        // Add player to groups
        em.addEntityToGroup(player, &quot;PLAYER&quot;); // Add player to group
        em.addEntityToGroup(player, &quot;MOVABLE&quot;); // Add player to group
        em.addEntityToGroup(player, &quot;ACCEL&quot;); // Add player to group
        em.addEntityToGroup(player, &quot;RENDERABLE&quot;); // Add player to group

        // Add components to player
        Position pos = new Position(0, 0); // Create component
        em.addComponent(player, pos); // Add component
        Velocity vel = new Velocity();
        em.addComponent(player, vel);
        Accel acc = new Accel(30);
        em.addComponent(player, acc);
        Rendering ren = new Rendering(0);
        em.addComponent(player, ren);</description>
		<content:encoded><![CDATA[<p>Hello there. I&#8217;m a hobbyist using your articles to implement my own entity system in java. I had a question about components tho, maybe you could clear this up for me?</p>
<p>I know components can only hold data e.g. &#8220;int&#8221;, &#8220;String&#8221;, &#8230; and cannot contain methods. However sometimes it seems to be logical for a component to hold a class object.</p>
<p>I have a very concrete example. My collision detection class has static methods for calculating if polygons and circles overlap. Therefor I have 3 important classes: Polygon, Circle, Vector. Those classes hold a bit of data [ Vector.x and Vector.y for example ] and a few simple methods to do math [ Vector.add(Vector v) ]. They clearly do not contain game logic.</p>
<p>It seems logical to create a &#8220;Physical&#8221; component with field &#8220;shape&#8221; which holds e.g. a Polygon object.</p>
<p>The other way to do this I see right now is to give a &#8220;PhysicalPoly&#8221; component a list of x values and a list of y values and a center and when I run the CollisionSystem create new Polygon objects based on the data in the PhysicalPoly components I need to check and destroy them in the end. However this seems quite intensive to do each game tick.</p>
<p>What am I overlooking here?</p>
<p>On a side note: I named my (sub)systems differently by the name of &#8220;Process&#8221;. Every process has one public method &#8220;Process.run()&#8221;. The way I understand your concept of an ES that seemed like a better naming to me. E.g. I have a component &#8220;Position&#8221; and a process &#8220;Move&#8221;. So I call Move.run() on every Position component I want to move.</p>
<p>Another thing I did is create simple groups of entities. Instead of letting my Move process on all entities with a specific component (like a &#8216;Move&#8217; component) I would let it process all entities who subscribed to the &#8220;Movable&#8221; group. So on entity creation I would add all components I want it to have and register the entity to all groups I want it to be processed in.</p>
<p>Here is an example of entity creation (I thought you might be interested):</p>
<p>        // Create player<br />
        Integer player = em.createEntity();</p>
<p>        // Add player to groups<br />
        em.addEntityToGroup(player, &#8220;PLAYER&#8221;); // Add player to group<br />
        em.addEntityToGroup(player, &#8220;MOVABLE&#8221;); // Add player to group<br />
        em.addEntityToGroup(player, &#8220;ACCEL&#8221;); // Add player to group<br />
        em.addEntityToGroup(player, &#8220;RENDERABLE&#8221;); // Add player to group</p>
<p>        // Add components to player<br />
        Position pos = new Position(0, 0); // Create component<br />
        em.addComponent(player, pos); // Add component<br />
        Velocity vel = new Velocity();<br />
        em.addComponent(player, vel);<br />
        Accel acc = new Accel(30);<br />
        em.addComponent(player, acc);<br />
        Rendering ren = new Rendering(0);<br />
        em.addComponent(player, ren);</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Realm of the Mad God &#8211; a great game, interesting monetization by adam</title>
		<link>http://t-machine.org/index.php/2012/03/28/realm-of-the-mad-god-a-great-game-interesting-monetization/comment-page-1/#comment-64612</link>
		<dc:creator>adam</dc:creator>
		<pubDate>Sun, 01 Apr 2012 14:30:00 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1851#comment-64612</guid>
		<description>@Amit

Thanks for the extra info!

re: TCP/UDP - doh, I&#039;d heard rumours that Flash supported UDP by now, but looking into it, I see that&#039;s not quite true (yet). That&#039;s a huge blow for fast MP games like RotMG :(.

I know a lot of indie game devs are switching to Unity now, due to frustration with Adobe. There&#039;s still a plugin to install, but I know a lot of Flash sites lose a lot of users when they move to newest Flash, and find many users don&#039;t want to / can&#039;t / can&#039;t be bothered to upgrade Flash.

Hmm ... RotMG ported to Unity ... that could be interesting....</description>
		<content:encoded><![CDATA[<p>@Amit</p>
<p>Thanks for the extra info!</p>
<p>re: TCP/UDP &#8211; doh, I&#8217;d heard rumours that Flash supported UDP by now, but looking into it, I see that&#8217;s not quite true (yet). That&#8217;s a huge blow for fast MP games like RotMG :(.</p>
<p>I know a lot of indie game devs are switching to Unity now, due to frustration with Adobe. There&#8217;s still a plugin to install, but I know a lot of Flash sites lose a lot of users when they move to newest Flash, and find many users don&#8217;t want to / can&#8217;t / can&#8217;t be bothered to upgrade Flash.</p>
<p>Hmm &#8230; RotMG ported to Unity &#8230; that could be interesting&#8230;.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Firefox Auto-restore (after a crash): Impressive stuff by Brad</title>
		<link>http://t-machine.org/index.php/2012/03/19/firefox-auto-restore-after-a-crash-impressive-stuff/comment-page-1/#comment-64306</link>
		<dc:creator>Brad</dc:creator>
		<pubDate>Fri, 30 Mar 2012 22:31:30 +0000</pubDate>
		<guid isPermaLink="false">http://t-machine.org/?p=1837#comment-64306</guid>
		<description>You should try the Session Manager add on my Morac.  I&#039;ve been using it for so long I didn&#039;t realize that parts of its functions (the restore window settings upon crash) had been added to regular Firefox.  One of the option Session Manager gives you is that you can save your current session for restore later, and reload those sessions when you want.

My main complaint is that Apple&#039;s Dev Forum doesn&#039;t restore properly, but I&#039;m willing to put part of the blame for that on how I think the Dev Forum is implement.</description>
		<content:encoded><![CDATA[<p>You should try the Session Manager add on my Morac.  I&#8217;ve been using it for so long I didn&#8217;t realize that parts of its functions (the restore window settings upon crash) had been added to regular Firefox.  One of the option Session Manager gives you is that you can save your current session for restore later, and reload those sessions when you want.</p>
<p>My main complaint is that Apple&#8217;s Dev Forum doesn&#8217;t restore properly, but I&#8217;m willing to put part of the blame for that on how I think the Dev Forum is implement.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

