{"id":50,"date":"2011-05-17T23:26:33","date_gmt":"2011-05-18T03:26:33","guid":{"rendered":"http:\/\/GetOffMyLawnEntertainment.com\/blog\/2011\/05\/17\/game-engines-shouldnt-be-easy-to-use\/"},"modified":"2011-10-02T00:03:02","modified_gmt":"2011-10-02T04:03:02","slug":"game-engines-shouldnt-be-easy-to-use","status":"publish","type":"post","link":"http:\/\/GetOffMyLawnEntertainment.com\/blog\/2011\/05\/17\/game-engines-shouldnt-be-easy-to-use\/","title":{"rendered":"Game engines shouldn&#8217;t be easy to use"},"content":{"rendered":"<p>I was talking with a friend the other day about some engine design stuff when he told me someone suggested to him to make his image packing system easier to use and package in sprite data as well.  I don&#8217;t think that&#8217;s a very good at all.  You should not design an engine to be easy to use.  You should design your engine to be expressive!<br \/>\n<!--more--><\/p>\n<p>The engine should contain general infrastructure and patterns to do things in a certain way.  On top of that you do not want to lock your users into a certain implementation for things when there&#8217;s a ton of different ideas that could be used instead.  So lots of interfaces to be filled and plugged into.  Yes this often leads to boiler plate code and making it &#8216;not easy&#8217; to use.  Look at the opposite side though, if you don&#8217;t make things expressive, splitting up all your ideas into separate pieces that need to be tied together, then you get locked into certain patterns that are chosen for you and you end up trying to work around them instead.  Sure it may seem easy to use at first, but trust me it won&#8217;t be for long.<\/p>\n<p>The commentor was right about something though, things need to be easy to use.  Wait, but you just said this was wrong?  Not quite.  I said not to do this in the engine.  Instead ease of use functionality should be done in an extra layer of utility methods on top of everything else.  You can then still access the &#8216;rawer&#8217; parts of the engine when something doesn&#8217;t fit with what you need, allowing you the most ability to express your desires in your game.  And then the utility methods give you the ease of use for the majority of cases, along with faster devel time.  Wow the best of both worlds, awesome!  Now the harder part &#8230; trying to come up with a good engine design that allows for great flexibility and performance and isn&#8217;t impossible to use.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I was talking with a friend the other day about some engine design stuff when he told me someone suggested to him to make his image packing system easier to use and package in sprite data as well. I don&#8217;t think that&#8217;s a very good at all. You should not design an engine to be [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-50","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/GetOffMyLawnEntertainment.com\/blog\/wp-json\/wp\/v2\/posts\/50","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/GetOffMyLawnEntertainment.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/GetOffMyLawnEntertainment.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/GetOffMyLawnEntertainment.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/GetOffMyLawnEntertainment.com\/blog\/wp-json\/wp\/v2\/comments?post=50"}],"version-history":[{"count":1,"href":"http:\/\/GetOffMyLawnEntertainment.com\/blog\/wp-json\/wp\/v2\/posts\/50\/revisions"}],"predecessor-version":[{"id":134,"href":"http:\/\/GetOffMyLawnEntertainment.com\/blog\/wp-json\/wp\/v2\/posts\/50\/revisions\/134"}],"wp:attachment":[{"href":"http:\/\/GetOffMyLawnEntertainment.com\/blog\/wp-json\/wp\/v2\/media?parent=50"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/GetOffMyLawnEntertainment.com\/blog\/wp-json\/wp\/v2\/categories?post=50"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/GetOffMyLawnEntertainment.com\/blog\/wp-json\/wp\/v2\/tags?post=50"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}