<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3840335079354552095</id><updated>2011-07-28T20:39:52.443-07:00</updated><title type='text'>Botworx</title><subtitle type='html'>A BDI Agent Framework in C#</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.botworx.org/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://www.botworx.org/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Kurt</name><uri>http://www.blogger.com/profile/09204380726687323592</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_uKFuQzIsfRI/R9P1IeVuE2I/AAAAAAAAAAM/USUYNrnKgyw/S220/agent.PNG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>28</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3840335079354552095.post-6958735329949682273</id><published>2009-12-09T22:16:00.001-08:00</published><updated>2009-12-09T22:46:33.512-08:00</updated><title type='text'>Behavior Language</title><content type='html'>WIP:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: python"&gt;&lt;br /&gt;namespace SequenceTestNamespace&lt;br /&gt;&lt;br /&gt;using System&lt;br /&gt;using System.Collections.Generic&lt;br /&gt;using System.Text&lt;br /&gt;using System.IO&lt;br /&gt;&lt;br /&gt;using BwBot.Runtime&lt;br /&gt;using BwBot.Runtime.Tasks&lt;br /&gt;&lt;br /&gt;class SequenceTest()&lt;br /&gt;    def Main(sequence-test)&lt;br /&gt;        {Console.WriteLine("a");}&lt;br /&gt;        sequence&lt;br /&gt;            {Console.WriteLine("1");}&lt;br /&gt;            {Console.WriteLine("2");}&lt;br /&gt;            {Console.WriteLine("3");}&lt;br /&gt;        {Console.WriteLine("b");}&lt;br /&gt;        sequence&lt;br /&gt;            {Console.WriteLine("1");}&lt;br /&gt;            {Console.WriteLine("2");}&lt;br /&gt;            {Console.WriteLine("3");}&lt;br /&gt;        {Console.WriteLine("c");}&lt;br /&gt;        sequence&lt;br /&gt;            {Console.WriteLine("1");}&lt;br /&gt;            {Console.WriteLine("2");}&lt;br /&gt;            {Console.WriteLine("3");}&lt;br /&gt;            &lt;br /&gt;sequence-test&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3840335079354552095-6958735329949682273?l=www.botworx.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.botworx.org/feeds/6958735329949682273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3840335079354552095&amp;postID=6958735329949682273' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/6958735329949682273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/6958735329949682273'/><link rel='alternate' type='text/html' href='http://www.botworx.org/2009/12/behavior-language.html' title='Behavior Language'/><author><name>Kurt</name><uri>http://www.blogger.com/profile/09204380726687323592</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_uKFuQzIsfRI/R9P1IeVuE2I/AAAAAAAAAAM/USUYNrnKgyw/S220/agent.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3840335079354552095.post-8744203790584656590</id><published>2009-06-16T21:39:00.000-07:00</published><updated>2009-07-04T21:57:09.315-07:00</updated><title type='text'>Redo</title><content type='html'>I finally decided to go forward with a C# redo since the C++ version is too long and hard of a row to plow.&lt;br /&gt;&lt;br /&gt;I've also cooked up a new syntax that is basically a prefix version of Python's syntax.&lt;br /&gt;&lt;pre class="brush: python"&gt;&lt;br /&gt;class Test():&lt;br /&gt;    def Foo1($x is foo): #forward chaining method&lt;br /&gt;        rule:&lt;br /&gt;            $x has $y&lt;br /&gt;            $y is bar&lt;br /&gt;            --&gt;&lt;br /&gt;            $y is foo&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I've already written a simple tokenizer based on this &lt;a href="http://trackerrealm.com/blogs/2007/04/tokenize-string-with-c-regular.html"&gt;article&lt;/a&gt; about regular expression parsing in C#.   Another article that was helpful was &lt;a href="http://www.secnetix.de/%7Eolli/Python/block_indentation.hawk"&gt;Python: Myths about Indentation&lt;/a&gt;.  That only took one day.  The rest of the week was spent agonizing whether to have the parser just read the token list or convert to s-expressions and then parse.&lt;br /&gt;&lt;br /&gt;I finally went back to an earlier idea of writing a class called TokenTree that extends List(object) where each element is either a token or a subtree.  This should make things easier on the parsing end for various reasons.  The s-expression idea was kind of neat but it seems redundant since I need AST classes anyways.&lt;br /&gt;&lt;br /&gt;Later on I'll have to dump the RegEx stuff and write a more sophisticated tokenizer but at least this was a quick way to get started.  For now I need to start writing the recursive descent parsing functions and the AST classes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3840335079354552095-8744203790584656590?l=www.botworx.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.botworx.org/feeds/8744203790584656590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3840335079354552095&amp;postID=8744203790584656590' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/8744203790584656590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/8744203790584656590'/><link rel='alternate' type='text/html' href='http://www.botworx.org/2009/06/redo.html' title='Redo'/><author><name>Kurt</name><uri>http://www.blogger.com/profile/09204380726687323592</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_uKFuQzIsfRI/R9P1IeVuE2I/AAAAAAAAAAM/USUYNrnKgyw/S220/agent.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3840335079354552095.post-3164920316716953659</id><published>2008-12-11T02:23:00.000-08:00</published><updated>2009-06-11T10:21:04.801-07:00</updated><title type='text'>Agent Language Preview</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_uKFuQzIsfRI/SUDsoPaxqAI/AAAAAAAAALY/V0gIKpQcWZs/s1600-h/bwai_mac_medium.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 160px;" src="http://4.bp.blogspot.com/_uKFuQzIsfRI/SUDsoPaxqAI/AAAAAAAAALY/V0gIKpQcWZs/s200/bwai_mac_medium.png" alt="" id="BLOGGER_PHOTO_ID_5278478939355981826" border="0" /&gt;&lt;/a&gt;This is a preview of the Agent Language I'm working on.  More details will go in a Wiki or something.&lt;br /&gt;&lt;br /&gt;Methods are triggered by the addition and deletion of facts within the state.  Methods without triggers are evaluated upon state creation.  Rules within the methods are evaluated sequentially.  States are evaluated until no new information can be generated at which time any facts that were proposed will cause the creation of successor states into which those proposals will be added along with any other facts in the current state.&lt;br /&gt;&lt;br /&gt;This is a work in progress therefore any and all comments or criticisms are extremely welcome!&lt;br /&gt;&lt;br /&gt;$ = Logic variable&lt;br /&gt;. = Property of the rule, method, state, or agent&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: c-sharp"&gt;&lt;br /&gt;;&lt;br /&gt;; BwAi - Missionaries and Cannibals &lt;br /&gt;; Based on the Soar Version &lt;br /&gt;; Kurtis B Fields - 2008&lt;br /&gt;;&lt;br /&gt;(domain Mac ()&lt;br /&gt; (method main ()&lt;br /&gt;  ;state success&lt;br /&gt;  (rule&lt;br /&gt;   (topic $g (type goal))&lt;br /&gt;   ($g object $bank)&lt;br /&gt;   ($g missionaries $m1)&lt;br /&gt;   ($bank missionaries $m2)&lt;br /&gt;   ($m1 = $m2)&lt;br /&gt;   ($g cannibals $c1)&lt;br /&gt;   ($bank cannibals $c2)&lt;br /&gt;   ($c1 = $c2)&lt;br /&gt;   ($g boat $b1)&lt;br /&gt;   ($bank boat $b2)&lt;br /&gt;   ($b1 = $b2)&lt;br /&gt;   ==&gt;&lt;br /&gt;   halt&lt;br /&gt;  ) &lt;br /&gt;  ;state failure&lt;br /&gt;  (rule&lt;br /&gt;   (Bank-1 missionaries $m1)&lt;br /&gt;   ($m1 &gt; 0)&lt;br /&gt;   (Bank-1 cannibals $c1)&lt;br /&gt;   ($m1 &lt; $c1)&lt;br /&gt;   --&gt;&lt;br /&gt;   (assert(.state fail "Too many cannibals on Bank1!!!"))&lt;br /&gt;   ==&gt;&lt;br /&gt;   fail&lt;br /&gt;  )&lt;br /&gt;  ;state failure&lt;br /&gt;  (rule&lt;br /&gt;   (Bank-2 missionaries $m2)&lt;br /&gt;   ($m2 &gt; 0)&lt;br /&gt;   (Bank-2 cannibals $c2)&lt;br /&gt;   ($m2 &lt; $c2)&lt;br /&gt;   --&gt;&lt;br /&gt;   (assert(.state fail "Too many cannibals on Bank2!!!"))&lt;br /&gt;   ==&gt;&lt;br /&gt;   fail&lt;br /&gt;  )&lt;br /&gt;  ;state failure&lt;br /&gt;  (rule&lt;br /&gt;   (.parent (.goal missionaries $m1) (.goal cannibals $c1) )&lt;br /&gt;   (.goal missionaries $m2)&lt;br /&gt;   ($m1 = $m2)&lt;br /&gt;   (.goal cannibals $c2)&lt;br /&gt;   ($c1 = $c2)&lt;br /&gt;   --&gt;&lt;br /&gt;   (assert(.state fail "State undoes parent goal!!!"))&lt;br /&gt;   ==&gt;&lt;br /&gt;   fail&lt;br /&gt;  )&lt;br /&gt;  (rule&lt;br /&gt;   (topic $g (type goal))&lt;br /&gt;   (not($g is achieved))  &lt;br /&gt;   --&gt;&lt;br /&gt;   (temporary(.agent achieve $g))&lt;br /&gt;  )&lt;br /&gt; ) &lt;br /&gt; (method MoveMissionaryPropose (.agent achieve $g)&lt;br /&gt;  (rule&lt;br /&gt;   (topic $bank1 (type bank))&lt;br /&gt;   ($bank1 boat $boat)&lt;br /&gt;   ($bank1 missionaries $m)&lt;br /&gt;   ($m &gt; 0) &lt;br /&gt;   (topic $bank2 (type bank))&lt;br /&gt;   ($bank2 &lt;&gt; $bank1)   &lt;br /&gt;   --&gt;&lt;br /&gt;   (propose((.agent move-boat $boat)&lt;br /&gt;    (missionaries 1)&lt;br /&gt;    (cannibals 0)&lt;br /&gt;    (source $bank1)&lt;br /&gt;    (destination $bank2) ) )&lt;br /&gt;  )&lt;br /&gt; )&lt;br /&gt; (method MoveCannibalPropose (.agent achieve $g)&lt;br /&gt;  (rule&lt;br /&gt;   (topic $bank1 (type bank))&lt;br /&gt;   ($bank1 boat $boat)&lt;br /&gt;   ($bank1 cannibals $c)&lt;br /&gt;   ($c &gt; 0) &lt;br /&gt;   (topic $bank2 (type bank))&lt;br /&gt;   ($bank2 &lt;&gt; $bank1)   &lt;br /&gt;   --&gt;&lt;br /&gt;   (propose ((.agent move-boat $boat)&lt;br /&gt;    (missionaries 0)&lt;br /&gt;    (cannibals 1)&lt;br /&gt;    (source $bank1)&lt;br /&gt;    (destination $bank2) )&lt;br /&gt;   )&lt;br /&gt;  )&lt;br /&gt; )&lt;br /&gt; (method MoveMissionariesPropose (.agent achieve $g)&lt;br /&gt;  (rule&lt;br /&gt;   (topic $bank1 (type bank))&lt;br /&gt;   ($bank1 boat $boat)&lt;br /&gt;   ($bank1 missionaries $m)&lt;br /&gt;   ($m &gt; 1) &lt;br /&gt;   (topic $bank2 (type bank))&lt;br /&gt;   ($bank2 &lt;&gt; $bank1)   &lt;br /&gt;   --&gt;&lt;br /&gt;   (propose ((.agent move-boat $boat)&lt;br /&gt;    (missionaries 2)&lt;br /&gt;    (cannibals 0)&lt;br /&gt;    (source $bank1)&lt;br /&gt;    (destination $bank2) )&lt;br /&gt;   )&lt;br /&gt;  )&lt;br /&gt; )&lt;br /&gt; (method MoveCannibalsPropose (.agent achieve $g)&lt;br /&gt;  (rule&lt;br /&gt;   (topic $bank1 (type bank))&lt;br /&gt;   ($bank1 boat $boat)&lt;br /&gt;   ($bank1 cannibals $c)&lt;br /&gt;   ($c &gt; 1) &lt;br /&gt;   (topic $bank2 (type bank))&lt;br /&gt;   ($bank2 &lt;&gt; $bank1)   &lt;br /&gt;   --&gt;&lt;br /&gt;   (propose ((.agent move-boat $boat)&lt;br /&gt;    (missionaries 0)&lt;br /&gt;    (cannibals 2)&lt;br /&gt;    (source $bank1)&lt;br /&gt;    (destination $bank2) )&lt;br /&gt;   )&lt;br /&gt;  )&lt;br /&gt; )&lt;br /&gt; (method MoveMissionaryCannibalPropose (.agent achieve $g)&lt;br /&gt;  (rule&lt;br /&gt;   (topic $bank1 (type bank))&lt;br /&gt;   ($bank1 boat $boat)&lt;br /&gt;   ($bank1 missionaries $m)&lt;br /&gt;   ($m &gt; 0)&lt;br /&gt;   ($bank1 cannibals $c)&lt;br /&gt;   ($c &gt; 0) &lt;br /&gt;   (topic $bank2 (type bank))&lt;br /&gt;   ($bank2 &lt;&gt; $bank1)   &lt;br /&gt;   --&gt;&lt;br /&gt;   (propose ((.agent move-boat $boat)&lt;br /&gt;    (missionaries 1)&lt;br /&gt;    (cannibals 1)&lt;br /&gt;    (source $bank1)&lt;br /&gt;    (destination $bank2) )&lt;br /&gt;   )&lt;br /&gt;  )&lt;br /&gt; )&lt;br /&gt; (method MoveBoatApply (.agent move-boat $boat)&lt;br /&gt;  (rule&lt;br /&gt;   (.thought source $bank1)&lt;br /&gt;   (.thought destination $bank2)&lt;br /&gt;   (.thought missionaries $m)&lt;br /&gt;   (.thought cannibals $c)&lt;br /&gt;   ($bank1 missionaries $m1)&lt;br /&gt;   ($bank2 missionaries $m2)&lt;br /&gt;   ($bank1 cannibals $c1)&lt;br /&gt;   ($bank2 cannibals $c2)&lt;br /&gt;   --&gt;&lt;br /&gt;   (retract &lt;br /&gt;                ($bank1 boat $boat)&lt;br /&gt;    ($bank1 missionaries $m1)&lt;br /&gt;    ($bank2 missionaries $m2)&lt;br /&gt;    ($bank1 cannibals $c1)&lt;br /&gt;    ($bank2 cannibals $c2)            &lt;br /&gt;            )&lt;br /&gt;   (assert &lt;br /&gt;    ($bank2 boat $boat)   &lt;br /&gt;    ($bank1 missionaries (- $m1 $m))&lt;br /&gt;    ($bank2 missionaries (+ $m2 $m))&lt;br /&gt;    ($bank1 cannibals (- $c1 $c))&lt;br /&gt;    ($bank2 cannibals (+ $c2 $c))   &lt;br /&gt;   )&lt;br /&gt;  )&lt;br /&gt; )&lt;br /&gt;)&lt;br /&gt;;&lt;br /&gt;;&lt;br /&gt;;&lt;br /&gt;(problem Mac&lt;br /&gt; (topic Boat-1&lt;br /&gt;  (type boat)&lt;br /&gt; )&lt;br /&gt; (topic Bank-1&lt;br /&gt;  (type bank)&lt;br /&gt;  (missionaries 3)&lt;br /&gt;  (cannibals 3)&lt;br /&gt;  (boat Boat-1)&lt;br /&gt; )&lt;br /&gt; (topic Bank-2&lt;br /&gt;  (type bank)&lt;br /&gt;  (missionaries 0)&lt;br /&gt;  (cannibals 0)&lt;br /&gt; )&lt;br /&gt; (topic Goal-1&lt;br /&gt;  (type goal)&lt;br /&gt;  (object Bank-2)&lt;br /&gt;  (missionaries 3)&lt;br /&gt;  (cannibals 3)&lt;br /&gt;  (boat Boat-1)&lt;br /&gt; )&lt;br /&gt;)&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3840335079354552095-3164920316716953659?l=www.botworx.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.botworx.org/feeds/3164920316716953659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3840335079354552095&amp;postID=3164920316716953659' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/3164920316716953659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/3164920316716953659'/><link rel='alternate' type='text/html' href='http://www.botworx.org/2008/12/agent-language-preview.html' title='Agent Language Preview'/><author><name>Kurt</name><uri>http://www.blogger.com/profile/09204380726687323592</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_uKFuQzIsfRI/R9P1IeVuE2I/AAAAAAAAAAM/USUYNrnKgyw/S220/agent.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_uKFuQzIsfRI/SUDsoPaxqAI/AAAAAAAAALY/V0gIKpQcWZs/s72-c/bwai_mac_medium.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3840335079354552095.post-7049849649520098787</id><published>2008-12-11T01:36:00.000-08:00</published><updated>2009-06-11T10:19:26.603-07:00</updated><title type='text'>Syntax Highlighter Test</title><content type='html'>I found a way to insert code snippets into the blog.  As long as you can find somewhere to host the files &lt;a href="http://code.google.com/p/syntaxhighlighter/"&gt;SyntaxHighlighter&lt;/a&gt; seems to be the best solution.  Here is a &lt;a href="http://developertips.blogspot.com/2007/08/syntaxhighlighter-on-blogger.html"&gt;good tutorial&lt;/a&gt; to get rolling.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: cpp"&gt;&lt;br /&gt;class MyClass {&lt;br /&gt;    bool blah(){&lt;br /&gt;        return 2 &gt; 1 ; &lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3840335079354552095-7049849649520098787?l=www.botworx.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.botworx.org/feeds/7049849649520098787/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3840335079354552095&amp;postID=7049849649520098787' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/7049849649520098787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/7049849649520098787'/><link rel='alternate' type='text/html' href='http://www.botworx.org/2008/12/syntax-highlighter-test.html' title='Syntax Highlighter Test'/><author><name>Kurt</name><uri>http://www.blogger.com/profile/09204380726687323592</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_uKFuQzIsfRI/R9P1IeVuE2I/AAAAAAAAAAM/USUYNrnKgyw/S220/agent.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3840335079354552095.post-8678829889947525968</id><published>2008-05-11T20:40:00.000-07:00</published><updated>2008-05-12T00:56:42.909-07:00</updated><title type='text'>Looks are Everything</title><content type='html'>Well, I managed to rearrange and rebuild everything with Visual C++ 2008 express.&lt;br /&gt;&lt;br /&gt;Now it's time to get rid of the uglies!&lt;br /&gt;&lt;br /&gt;I went over to a place called &lt;a href="http://www.psionic3d.co.uk/gallery/thumbnails.php?album=2"&gt;Psionic&lt;/a&gt; where most Ogre folks get their free models.&lt;br /&gt;&lt;br /&gt;Thankfully I found a patch for the Ogre Blender Exporter that does the axis swapping again.&lt;br /&gt;&lt;br /&gt;Only problem is that the Jeep model is still backwards.  Either I research how to rotate vertices in Blender or I can just rotate the mesh in Ogre.&lt;br /&gt;&lt;br /&gt;It's never easy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3840335079354552095-8678829889947525968?l=www.botworx.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.botworx.org/feeds/8678829889947525968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3840335079354552095&amp;postID=8678829889947525968' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/8678829889947525968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/8678829889947525968'/><link rel='alternate' type='text/html' href='http://www.botworx.org/2008/05/looks-are-everything.html' title='Looks are Everything'/><author><name>Kurt</name><uri>http://www.blogger.com/profile/09204380726687323592</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_uKFuQzIsfRI/R9P1IeVuE2I/AAAAAAAAAAM/USUYNrnKgyw/S220/agent.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3840335079354552095.post-8982307893467256147</id><published>2008-05-09T03:26:00.000-07:00</published><updated>2008-05-09T05:42:23.750-07:00</updated><title type='text'>Rock and a Hard Place</title><content type='html'>Now I'm in a real dilemma. &lt;br /&gt;&lt;br /&gt;I'm having a problem with Boost 1.35, CeGui, and vc7.&lt;br /&gt;&lt;br /&gt;There isn't a problem with vc9, so it must be a bug in vc7 that they haven't done a workaround for yet.&lt;br /&gt;&lt;br /&gt;I could go back to Boost 1.34 but then I'd have to include ASIO separately and I'm not sure if I can use vc9 with it.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Hmmm...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3840335079354552095-8982307893467256147?l=www.botworx.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.botworx.org/feeds/8982307893467256147/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3840335079354552095&amp;postID=8982307893467256147' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/8982307893467256147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/8982307893467256147'/><link rel='alternate' type='text/html' href='http://www.botworx.org/2008/05/rock-and-hard-place.html' title='Rock and a Hard Place'/><author><name>Kurt</name><uri>http://www.blogger.com/profile/09204380726687323592</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_uKFuQzIsfRI/R9P1IeVuE2I/AAAAAAAAAAM/USUYNrnKgyw/S220/agent.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3840335079354552095.post-8131487484814378174</id><published>2008-05-08T13:53:00.000-07:00</published><updated>2008-05-09T03:26:26.616-07:00</updated><title type='text'>Shaking the Tree</title><content type='html'>Sometimes when your stuck in a rut it's time to shake things up.&lt;br /&gt;&lt;br /&gt;My way of shaking things up this time is to upgrade to Boost 1.35 and creating a build system for Visual C++ 2008.&lt;br /&gt;&lt;br /&gt;The reason for upgrading Boost is that ASIO is now an official part of the library and I need to replace the socket classes I wrote to make Botworx more portable.&lt;br /&gt;&lt;br /&gt;Unfortunately, they totally rewrote the thread library and the locks and mutexes I was using caused things to hang.  All that synchronization stuff probably needs a rewrite anyhow.&lt;br /&gt;&lt;br /&gt;I think I'm going to dump ODE and Bullet and just go with PhysX.  I can't count the hours I've spent making a hybrid system work.  It works, but ... time to move on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3840335079354552095-8131487484814378174?l=www.botworx.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.botworx.org/feeds/8131487484814378174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3840335079354552095&amp;postID=8131487484814378174' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/8131487484814378174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/8131487484814378174'/><link rel='alternate' type='text/html' href='http://www.botworx.org/2008/05/shaking-tree.html' title='Shaking the Tree'/><author><name>Kurt</name><uri>http://www.blogger.com/profile/09204380726687323592</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_uKFuQzIsfRI/R9P1IeVuE2I/AAAAAAAAAAM/USUYNrnKgyw/S220/agent.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3840335079354552095.post-437183867862846813</id><published>2008-05-07T21:13:00.000-07:00</published><updated>2008-05-09T03:26:14.598-07:00</updated><title type='text'>Back to the Grind</title><content type='html'>Well, PyWeek ended about a month ago but I kept fiddling with RoboCute until I could decide how to proceed with trying to beat this framework into shape.  Now it's back to C++.  Yay.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3840335079354552095-437183867862846813?l=www.botworx.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.botworx.org/feeds/437183867862846813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3840335079354552095&amp;postID=437183867862846813' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/437183867862846813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/437183867862846813'/><link rel='alternate' type='text/html' href='http://www.botworx.org/2008/05/back-to-grind.html' title='Back to the Grind'/><author><name>Kurt</name><uri>http://www.blogger.com/profile/09204380726687323592</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_uKFuQzIsfRI/R9P1IeVuE2I/AAAAAAAAAAM/USUYNrnKgyw/S220/agent.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3840335079354552095.post-6612730502710672801</id><published>2008-03-27T12:23:00.000-07:00</published><updated>2008-04-02T08:26:38.657-07:00</updated><title type='text'>Project on Hiatus until 4/7/2008</title><content type='html'>Yep, PyWeek is more important.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3840335079354552095-6612730502710672801?l=www.botworx.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.botworx.org/feeds/6612730502710672801/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3840335079354552095&amp;postID=6612730502710672801' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/6612730502710672801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/6612730502710672801'/><link rel='alternate' type='text/html' href='http://www.botworx.org/2008/03/botworx-ur.html' title='Project on Hiatus until 4/7/2008'/><author><name>Kurt</name><uri>http://www.blogger.com/profile/09204380726687323592</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_uKFuQzIsfRI/R9P1IeVuE2I/AAAAAAAAAAM/USUYNrnKgyw/S220/agent.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3840335079354552095.post-6931320436868461076</id><published>2008-03-20T10:14:00.000-07:00</published><updated>2008-03-20T10:25:42.919-07:00</updated><title type='text'>Methodology to the Madness</title><content type='html'>It just occurred to me that the way I'm getting this ready for publication is worthy of comment.&lt;br /&gt;&lt;br /&gt;I am restructuring this thing top down.  Starting with the top level concepts and classes to do some much needed refactoring, plus rearranging file directories and files in the process. I am also going to throw out a bunch of failed and half complete experiments along the way.  They can be reincorporated later if desired.&lt;br /&gt;&lt;br /&gt;After this restructuring/reevaluation phase I need to re-implement certain things from the bottom up.  The main thing is object lifetime.  That's always a ball of wax.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3840335079354552095-6931320436868461076?l=www.botworx.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.botworx.org/feeds/6931320436868461076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3840335079354552095&amp;postID=6931320436868461076' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/6931320436868461076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/6931320436868461076'/><link rel='alternate' type='text/html' href='http://www.botworx.org/2008/03/methodology-to-madness.html' title='Methodology to the Madness'/><author><name>Kurt</name><uri>http://www.blogger.com/profile/09204380726687323592</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_uKFuQzIsfRI/R9P1IeVuE2I/AAAAAAAAAAM/USUYNrnKgyw/S220/agent.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3840335079354552095.post-2612591281255304614</id><published>2008-03-20T10:05:00.001-07:00</published><updated>2008-03-20T10:12:40.693-07:00</updated><title type='text'>The Applet Concept</title><content type='html'>This concept is not to be confused with Java Applets.  The Applet concept goes further back if you look at the Wikipedia entry &lt;a href="http://en.wikipedia.org/wiki/Applet"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I had been tempted just to change the name to Application or App for short.  I'm going to stay with it in the eventuality that we may wish to run several of these side by side or embedded in a web page.  That makes the name stick.&lt;br /&gt;&lt;br /&gt;The Applet's main role is to serve as the root of the simulation heirarchy.&lt;br /&gt;&lt;br /&gt;Applets are derived according to which GUI system the user plans on using.  CEGUI and wxWidgets for now.  More to follow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3840335079354552095-2612591281255304614?l=www.botworx.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.botworx.org/feeds/2612591281255304614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3840335079354552095&amp;postID=2612591281255304614' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/2612591281255304614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/2612591281255304614'/><link rel='alternate' type='text/html' href='http://www.botworx.org/2008/03/applet-concept.html' title='The Applet Concept'/><author><name>Kurt</name><uri>http://www.blogger.com/profile/09204380726687323592</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_uKFuQzIsfRI/R9P1IeVuE2I/AAAAAAAAAAM/USUYNrnKgyw/S220/agent.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3840335079354552095.post-1072392669754178267</id><published>2008-03-20T06:37:00.000-07:00</published><updated>2008-03-20T06:48:51.231-07:00</updated><title type='text'>The User Concept</title><content type='html'>Each Scenario creates and owns a User object.&lt;br /&gt;&lt;br /&gt;The User object is created via a factory method of the Applet.  (Need to define Applet soon!)&lt;br /&gt;&lt;br /&gt;Each User class is specific to a particular GUI system.  CEGUI, wxWidgets, etc.&lt;br /&gt;&lt;br /&gt;Each User has a UserMode tree.&lt;br /&gt;&lt;br /&gt;A UserMode is a class that can be either an action, a UserMode group, or a mode of some kind.  For instance a dialog.&lt;br /&gt;&lt;br /&gt;User interaction consists of drilling down and escaping back out of this tree.&lt;br /&gt;&lt;br /&gt;It makes it extremely easy to implement user interfaces and is more intuitive than your average GUI with it's multiple menus, toolbars, etc., although these elements could be integrated into the User framework as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3840335079354552095-1072392669754178267?l=www.botworx.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.botworx.org/feeds/1072392669754178267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3840335079354552095&amp;postID=1072392669754178267' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/1072392669754178267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/1072392669754178267'/><link rel='alternate' type='text/html' href='http://www.botworx.org/2008/03/user-concept.html' title='The User Concept'/><author><name>Kurt</name><uri>http://www.blogger.com/profile/09204380726687323592</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_uKFuQzIsfRI/R9P1IeVuE2I/AAAAAAAAAAM/USUYNrnKgyw/S220/agent.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3840335079354552095.post-3839174421108993302</id><published>2008-03-20T06:27:00.000-07:00</published><updated>2008-03-20T06:34:39.650-07:00</updated><title type='text'>Fire Bad!!!</title><content type='html'>This thing is a Frankenstein creation for sure.  It's cobbled from open source components and it has graphics only a mother could love.&lt;br /&gt;&lt;br /&gt;I'm not sure when, or even if it's going to appear.  I'm not even sure about the license type yet.&lt;br /&gt;&lt;br /&gt;So ... I'm just going to keep throwing details on this Blog for no apparent reason. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3840335079354552095-3839174421108993302?l=www.botworx.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.botworx.org/feeds/3839174421108993302/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3840335079354552095&amp;postID=3839174421108993302' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/3839174421108993302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/3839174421108993302'/><link rel='alternate' type='text/html' href='http://www.botworx.org/2008/03/fire-bad.html' title='Fire Bad!!!'/><author><name>Kurt</name><uri>http://www.blogger.com/profile/09204380726687323592</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_uKFuQzIsfRI/R9P1IeVuE2I/AAAAAAAAAAM/USUYNrnKgyw/S220/agent.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3840335079354552095.post-3649481471081130526</id><published>2008-03-19T09:03:00.001-07:00</published><updated>2008-03-19T09:05:19.351-07:00</updated><title type='text'>Requests For Comments</title><content type='html'>I'm going to start tossing some RFCs up here to help resolve issues that I can't make a clear cut decision on, even after endless hours of searching the internet.&lt;br /&gt;&lt;br /&gt;Hopefully SOMEONE will participate.&lt;br /&gt;&lt;br /&gt;Thanks!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3840335079354552095-3649481471081130526?l=www.botworx.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.botworx.org/feeds/3649481471081130526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3840335079354552095&amp;postID=3649481471081130526' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/3649481471081130526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/3649481471081130526'/><link rel='alternate' type='text/html' href='http://www.botworx.org/2008/03/requests-for-comments.html' title='Requests For Comments'/><author><name>Kurt</name><uri>http://www.blogger.com/profile/09204380726687323592</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_uKFuQzIsfRI/R9P1IeVuE2I/AAAAAAAAAAM/USUYNrnKgyw/S220/agent.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3840335079354552095.post-2180880086364301409</id><published>2008-03-18T23:31:00.000-07:00</published><updated>2008-03-19T00:44:47.149-07:00</updated><title type='text'>GUI Madness</title><content type='html'>I'm probably the only person whose nuts enough to implement GUI interfaces for multiple GUI systems on a per scenario basis.&lt;br /&gt;&lt;br /&gt;It all got started because the 'in-game' GUI looked like crap inside wxWidgets.&lt;br /&gt;&lt;br /&gt;You could have GUIGUI wrappers but that would be insane, trying to wrap each element for each GUI system.&lt;br /&gt;&lt;br /&gt;The solution is to have a factory function that returns a User object specific to the GUI that creates the interface and manages event routing.&lt;br /&gt;&lt;br /&gt;This might be interesting in the fact that you could have the factory function create different interfaces depending on certain modalities: play, edit, etc.&lt;br /&gt;&lt;br /&gt;Hopefully I get it refactored and working properly by days end.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3840335079354552095-2180880086364301409?l=www.botworx.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.botworx.org/feeds/2180880086364301409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3840335079354552095&amp;postID=2180880086364301409' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/2180880086364301409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/2180880086364301409'/><link rel='alternate' type='text/html' href='http://www.botworx.org/2008/03/gui-madness.html' title='GUI Madness'/><author><name>Kurt</name><uri>http://www.blogger.com/profile/09204380726687323592</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_uKFuQzIsfRI/R9P1IeVuE2I/AAAAAAAAAAM/USUYNrnKgyw/S220/agent.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3840335079354552095.post-3143942164851590691</id><published>2008-03-18T13:37:00.000-07:00</published><updated>2008-12-11T00:20:22.458-08:00</updated><title type='text'>Botworx and wxPython</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_uKFuQzIsfRI/R-AoXeVuFQI/AAAAAAAAADg/Q_1dm98YZmU/s1600-h/BuggyBotsWx03182008.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://2.bp.blogspot.com/_uKFuQzIsfRI/R-AoXeVuFQI/AAAAAAAAADg/Q_1dm98YZmU/s200/BuggyBotsWx03182008.jpg" alt="" id="BLOGGER_PHOTO_ID_5179183955222336770" border="0" /&gt;&lt;/a&gt;After posting pics of the wxWidget integration it occurred to me that having a wxPython widget would be the bomb.&lt;br /&gt;&lt;br /&gt;This would allow rapid prototyping of editing and debugging aids.&lt;br /&gt;&lt;br /&gt;Of course that also means providing scripting support for a lot of the guts.&lt;br /&gt;&lt;br /&gt;That's probably aways down the road.  I need to clean this thing up and bang it into shape first.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3840335079354552095-3143942164851590691?l=www.botworx.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.botworx.org/feeds/3143942164851590691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3840335079354552095&amp;postID=3143942164851590691' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/3143942164851590691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/3143942164851590691'/><link rel='alternate' type='text/html' href='http://www.botworx.org/2008/03/botworx-and-wxpython.html' title='Botworx and wxPython'/><author><name>Kurt</name><uri>http://www.blogger.com/profile/09204380726687323592</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_uKFuQzIsfRI/R9P1IeVuE2I/AAAAAAAAAAM/USUYNrnKgyw/S220/agent.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_uKFuQzIsfRI/R-AoXeVuFQI/AAAAAAAAADg/Q_1dm98YZmU/s72-c/BuggyBotsWx03182008.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3840335079354552095.post-1305072586288691080</id><published>2008-03-18T10:25:00.001-07:00</published><updated>2008-03-18T10:28:09.588-07:00</updated><title type='text'>Fixing wxWidgets Integration</title><content type='html'>Oh boy.  This is setting off a whole chain reaction of refactoring I put off for a long time. :(&lt;br /&gt;&lt;br /&gt;The upside is that it should make adding more GUIs in the future easier.&lt;br /&gt;&lt;br /&gt;It's also getting rid of a lot of redundancy that existed between the CEGUI &amp;amp; wxWidgets wrapper classes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3840335079354552095-1305072586288691080?l=www.botworx.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.botworx.org/feeds/1305072586288691080/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3840335079354552095&amp;postID=1305072586288691080' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/1305072586288691080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/1305072586288691080'/><link rel='alternate' type='text/html' href='http://www.botworx.org/2008/03/fixing-wxwidgets-integration.html' title='Fixing wxWidgets Integration'/><author><name>Kurt</name><uri>http://www.blogger.com/profile/09204380726687323592</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_uKFuQzIsfRI/R9P1IeVuE2I/AAAAAAAAAAM/USUYNrnKgyw/S220/agent.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3840335079354552095.post-6138536879325631175</id><published>2008-03-17T06:33:00.000-07:00</published><updated>2008-03-17T06:43:22.785-07:00</updated><title type='text'>.5 Roadmap</title><content type='html'>This roadmap is contingent on interest in this project and the willingness of others to participate!&lt;br /&gt;&lt;br /&gt;Distribution will be in limited form and start at version .1&lt;br /&gt;&lt;br /&gt;Distribution of .1 will be somewhere between April and May of '08.&lt;br /&gt;&lt;br /&gt;Distribution of .1 will only be on an invitation basis.  Mainly to AI teachers, students and game programmers.&lt;br /&gt;&lt;br /&gt;After the period of about 1 year or I think it deserves a .5 moniker then it will go into general distribution.  Whichever comes first.&lt;br /&gt;&lt;br /&gt;The reasoning behind this is that I don't want to be a one man support team for a free product!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3840335079354552095-6138536879325631175?l=www.botworx.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.botworx.org/feeds/6138536879325631175/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3840335079354552095&amp;postID=6138536879325631175' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/6138536879325631175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/6138536879325631175'/><link rel='alternate' type='text/html' href='http://www.botworx.org/2008/03/5-roadmap.html' title='.5 Roadmap'/><author><name>Kurt</name><uri>http://www.blogger.com/profile/09204380726687323592</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_uKFuQzIsfRI/R9P1IeVuE2I/AAAAAAAAAAM/USUYNrnKgyw/S220/agent.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3840335079354552095.post-2598574445229883798</id><published>2008-03-17T05:52:00.001-07:00</published><updated>2008-03-17T06:02:57.043-07:00</updated><title type='text'>The Scenario Concept</title><content type='html'>This class is equivalent to a game 'level' in a game framework.&lt;br /&gt;&lt;br /&gt;It occurred to me while thinking about the text for this article that this would be closest to the Sandbox concept.&lt;br /&gt;&lt;br /&gt;I've managed to  move a lot of functionality that used to be in the main application into Scenarios.&lt;br /&gt;&lt;br /&gt;That means they manage their own scenegraphs via the Scene class, have another component that wraps up a GUI, and also manages the World and physics engines.&lt;br /&gt;&lt;br /&gt;Now that I think about it, the ultimate goal is to rework the reference application into a more generic IDE and call it BotworxApp for the raw fullscreen executable, and BotworxWx for the wxWidgets version.&lt;br /&gt;&lt;br /&gt;These also should be turned into .dll/.so file projects.&lt;br /&gt;&lt;br /&gt;Project wizards for Scenarios should be implemented even before an application wizard.&lt;br /&gt;&lt;br /&gt;You'll have to forgive me.  I haven't worked on this for awhile.  I'm just going to slap up information and tidbits as they come to me and reorganize into Wike format later.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3840335079354552095-2598574445229883798?l=www.botworx.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.botworx.org/feeds/2598574445229883798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3840335079354552095&amp;postID=2598574445229883798' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/2598574445229883798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/2598574445229883798'/><link rel='alternate' type='text/html' href='http://www.botworx.org/2008/03/scenario-concept.html' title='The Scenario Concept'/><author><name>Kurt</name><uri>http://www.blogger.com/profile/09204380726687323592</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_uKFuQzIsfRI/R9P1IeVuE2I/AAAAAAAAAAM/USUYNrnKgyw/S220/agent.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3840335079354552095.post-7660070631255912943</id><published>2008-03-17T00:59:00.001-07:00</published><updated>2008-03-17T06:32:51.574-07:00</updated><title type='text'>Botworx Simulation Overview</title><content type='html'>Botworx uses a dual phase stepping approach.  Step and PostStep.  I thought about adding PreStep but it doesn't seem necessary.&lt;br /&gt;&lt;br /&gt;I'm aware that scenegraph libraries such as Ogre can get by with just one pass and lazy updating but I don't know if it's possible here.&lt;br /&gt;&lt;br /&gt;Besides, I've seen physics and AI code that use dual phase so I won't obsess about it until someone proves me wrong.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;The Step Phase&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Here is the stepping order:&lt;br /&gt;&lt;br /&gt;Application&lt;br /&gt;Scenario&lt;br /&gt;... World&lt;br /&gt;...... Spaces&lt;br /&gt;... Physics&lt;br /&gt;... Renderer&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;The PostStep Phase&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Nodes in the SceneGraph get updated in this phase.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;The Wrap Up&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yeah,  I know, sketchy.  All of these articles are works in progress.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3840335079354552095-7660070631255912943?l=www.botworx.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.botworx.org/feeds/7660070631255912943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3840335079354552095&amp;postID=7660070631255912943' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/7660070631255912943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/7660070631255912943'/><link rel='alternate' type='text/html' href='http://www.botworx.org/2008/03/botworx-simulation-overview.html' title='Botworx Simulation Overview'/><author><name>Kurt</name><uri>http://www.blogger.com/profile/09204380726687323592</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_uKFuQzIsfRI/R9P1IeVuE2I/AAAAAAAAAAM/USUYNrnKgyw/S220/agent.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3840335079354552095.post-3937478951002276733</id><published>2008-03-16T23:57:00.000-07:00</published><updated>2008-03-17T00:33:10.690-07:00</updated><title type='text'>The Ultimate AI Sandbox</title><content type='html'>It's always good to dream about the ultimate and then scale back to the achievable.&lt;br /&gt;&lt;br /&gt;What features would our dream framework have?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Project Wizard&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is what I had earlier called an Automated Sandbox Generator.  It would be nice to have a wxPython application that can generate C++ projects once you tell it what platform and options you need.&lt;br /&gt;&lt;br /&gt;This made me think about the Sandbox concept in general.  (More research!)  Maybe some people think it should just be a single application.  If you want to write usable AI or get a job in 'The Business' seems like you need to be writing some C++ anyhow.  This could change once/if scripting support gets implemented.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;3D Graphics&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I think Ogre fits the bill nicely.  I put the visualization code into it's own subcomponent and used a separate math library if I ever decide to go with something different.  A renderer plugin system would be nice where you could switch between libraries but that would be a lot of work and it seems unnecessary.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Physics&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I am almost to the point of implementing a physics plugin system.  Right now they are implemented as static libraries.  One is a wrapper for ODE.  The other is a templated impulse based engine I wrote.  I may decide to just use Bullet's impulse system instead.&lt;br /&gt;&lt;br /&gt;PhysX integration?  More research on my part.  Doesn't look as flexible as ODE and Bullet.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Path Finding&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;People could just use Boost A* like I do, or design a path finding engine interface.  Not sure.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Steering&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Right now I'm using OpenSteer, it might be fun to do an in-house library though.  Turtles! =)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Messaging&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Botworx has a messaging system I wrote that uses Boost for serialization support to send them between processes and machines.  It works for me!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Networking&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I need to toss out the socket classes I wrote and replace them with Boost &lt;a href="http://asio.sourceforge.net/"&gt;ASIO&lt;/a&gt; is what I'm thinking.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Scripting&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;More work.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;The Wrap Up&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;That is all I can think of right now.  It seems like they are listed by priority also.  Leave a comment if you think of anything!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3840335079354552095-3937478951002276733?l=www.botworx.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.botworx.org/feeds/3937478951002276733/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3840335079354552095&amp;postID=3937478951002276733' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/3937478951002276733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/3937478951002276733'/><link rel='alternate' type='text/html' href='http://www.botworx.org/2008/03/ultimate-ai-sandbox.html' title='The Ultimate AI Sandbox'/><author><name>Kurt</name><uri>http://www.blogger.com/profile/09204380726687323592</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_uKFuQzIsfRI/R9P1IeVuE2I/AAAAAAAAAAM/USUYNrnKgyw/S220/agent.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3840335079354552095.post-4524974683519286357</id><published>2008-03-16T23:34:00.000-07:00</published><updated>2008-03-16T23:41:40.261-07:00</updated><title type='text'>Botworx and wxWidget Support</title><content type='html'>Unfortunately I broke it during the last total overhaul.  It should probably be fixed by the time I release the first .5 sample.  At least I think that should be the version number.  You decide!&lt;br /&gt;&lt;br /&gt;The main thing that needs to be implemented is a unified user interface system for both CEGUI and wxWidgets.  I'm having to implement redundant menu items and actions for both.  Negative!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3840335079354552095-4524974683519286357?l=www.botworx.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.botworx.org/feeds/4524974683519286357/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3840335079354552095&amp;postID=4524974683519286357' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/4524974683519286357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/4524974683519286357'/><link rel='alternate' type='text/html' href='http://www.botworx.org/2008/03/botworx-and-wxwidget-support.html' title='Botworx and wxWidget Support'/><author><name>Kurt</name><uri>http://www.blogger.com/profile/09204380726687323592</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_uKFuQzIsfRI/R9P1IeVuE2I/AAAAAAAAAAM/USUYNrnKgyw/S220/agent.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3840335079354552095.post-8725701966438366995</id><published>2008-03-16T23:31:00.001-07:00</published><updated>2008-03-16T23:33:08.655-07:00</updated><title type='text'>Automated Sandbox Generation</title><content type='html'>Your eyes probably popped when you saw the title. :)&lt;br /&gt;&lt;br /&gt;Sorry, this is an idea I just had to automatically generate Sandbox/Game projects using Python.&lt;br /&gt;&lt;br /&gt;You could probably get nutty with it by using XML to specify various options / flavors of the Sandbox.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3840335079354552095-8725701966438366995?l=www.botworx.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.botworx.org/feeds/8725701966438366995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3840335079354552095&amp;postID=8725701966438366995' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/8725701966438366995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/8725701966438366995'/><link rel='alternate' type='text/html' href='http://www.botworx.org/2008/03/automated-sandbox-generation.html' title='Automated Sandbox Generation'/><author><name>Kurt</name><uri>http://www.blogger.com/profile/09204380726687323592</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_uKFuQzIsfRI/R9P1IeVuE2I/AAAAAAAAAAM/USUYNrnKgyw/S220/agent.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3840335079354552095.post-563583900903504896</id><published>2008-03-16T23:13:00.001-07:00</published><updated>2008-12-11T00:20:22.688-08:00</updated><title type='text'>BuggyBots:  Reference Application and Library</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_uKFuQzIsfRI/R94MTeVuFOI/AAAAAAAAADQ/qiwvY38-MuU/s1600-h/BuggyBots03152008_175617900.screen.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://4.bp.blogspot.com/_uKFuQzIsfRI/R94MTeVuFOI/AAAAAAAAADQ/qiwvY38-MuU/s200/BuggyBots03152008_175617900.screen.jpg" alt="" id="BLOGGER_PHOTO_ID_5178590150223860962" border="0" /&gt;&lt;/a&gt;I broke up BuggyBots into a static library and a very thin executable project.  This enabled me to easily create a wxWidgets application that is basically the same 'game' with a minimal amount of extra code.&lt;br /&gt;&lt;br /&gt;This should probably be further refined by implementing a library that only contains Bots &amp;amp; Props.&lt;br /&gt;&lt;br /&gt;The goal is to write a tutorial that explains how to create your own project as simply as humanly possible and then make the necessary refinements to the framework.  It'll get there.  This is only .5!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3840335079354552095-563583900903504896?l=www.botworx.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.botworx.org/feeds/563583900903504896/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3840335079354552095&amp;postID=563583900903504896' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/563583900903504896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/563583900903504896'/><link rel='alternate' type='text/html' href='http://www.botworx.org/2008/03/buggybots-reference-application-and.html' title='BuggyBots:  Reference Application and Library'/><author><name>Kurt</name><uri>http://www.blogger.com/profile/09204380726687323592</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_uKFuQzIsfRI/R9P1IeVuE2I/AAAAAAAAAAM/USUYNrnKgyw/S220/agent.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_uKFuQzIsfRI/R94MTeVuFOI/AAAAAAAAADQ/qiwvY38-MuU/s72-c/BuggyBots03152008_175617900.screen.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3840335079354552095.post-1259543772652071693</id><published>2008-03-16T22:36:00.000-07:00</published><updated>2008-03-16T23:00:37.684-07:00</updated><title type='text'>Core Concepts</title><content type='html'>&lt;span style="font-size:130%;"&gt;Actor&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is probably the most important class in the whole thing.  It's not an Actor like in PhysX.  It's a more general concept that gets used throughout the whole framework.  It's basically a class with a 'stepping' interface.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Stage&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Normally this wouldn't be it's own separate class.  This is a class that acts as a container for Actor children and also manages / propagates the stepping.  This may get implemented as a template instead.  It's up for debate.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Space&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is what can be thought of as a Game Object.  It has a position, orientation and pointers to various components.  This may or may not be a confusing name.  Some may think that spaces are fixed.  There is a class called Place for that.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Shape&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is a space that that has geometry used for collision testing.  It does not have to be a solid.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Group&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Most people cram as much stuff into a base class that they can get away with.  I like to break things out into branch and leaf nodes.  It saves space in the base and compartmentalizes behavior.  But that's just my opinion.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Place&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This class extends Group and the name explains it all.  A Space that doesn't move.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;World&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This class is used to implement the root for the whole space heirarchy.  Actually, any Place derivative could be used as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3840335079354552095-1259543772652071693?l=www.botworx.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.botworx.org/feeds/1259543772652071693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3840335079354552095&amp;postID=1259543772652071693' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/1259543772652071693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/1259543772652071693'/><link rel='alternate' type='text/html' href='http://www.botworx.org/2008/03/core-concepts.html' title='Core Concepts'/><author><name>Kurt</name><uri>http://www.blogger.com/profile/09204380726687323592</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_uKFuQzIsfRI/R9P1IeVuE2I/AAAAAAAAAAM/USUYNrnKgyw/S220/agent.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3840335079354552095.post-8749081612457463031</id><published>2008-03-16T20:13:00.000-07:00</published><updated>2008-03-16T21:14:08.986-07:00</updated><title type='text'>The Good, the Bad and the Ugly</title><content type='html'>I was going to use a picture from the film from the Wikipedia entry &lt;a href="http://en.wikipedia.org/wiki/The_Good,_the_Bad_and_the_Ugly"&gt;here&lt;/a&gt;, but after reading all the legalese I figured you can just click the link. :)&lt;br /&gt;&lt;br /&gt;I'm just going to slap things up on this Blog and organize it into a Wiki at a later date.  The writing style will be informal and slightly slapstick.  This makes things more entertaining for both the writer and the reader.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;The Good&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Botworx is amazingly stable.  You are not going to have the application just quit for no apparent reason.  I must have some knack for writing robust systems.  I think it's really a philosophy of keeping things as simple as possible.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;The Bad&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Botworx has more dependencies than I care for but that's just the nature of the beast.  If your going to help work on it or use it to carry out your mad AI experiments be prepared to compile some of those dependencies from source.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;The Ugly&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I wrote this thing in my spare time.  If you take Ogre3D as an example, it may take another 3 years to attain the same quality.  And that means coders helping out.&lt;br /&gt;&lt;br /&gt;While we're on the subject of ugly, I did the Buggy skin etc. myself just to have something to look at.  I could have used third party, but that means work trying to massage it to get it right for the game.  People who like to skin and animate would be heartily welcome also!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3840335079354552095-8749081612457463031?l=www.botworx.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.botworx.org/feeds/8749081612457463031/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3840335079354552095&amp;postID=8749081612457463031' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/8749081612457463031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/8749081612457463031'/><link rel='alternate' type='text/html' href='http://www.botworx.org/2008/03/good-bad-and-ugly.html' title='The Good, the Bad and the Ugly'/><author><name>Kurt</name><uri>http://www.blogger.com/profile/09204380726687323592</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_uKFuQzIsfRI/R9P1IeVuE2I/AAAAAAAAAAM/USUYNrnKgyw/S220/agent.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3840335079354552095.post-4809047802867137182</id><published>2008-03-16T05:45:00.001-07:00</published><updated>2008-12-11T00:20:24.469-08:00</updated><title type='text'>Screen Shots</title><content type='html'>Here are some Screenies.  I'll try to elaborate on these in the future.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_uKFuQzIsfRI/R-ASTuVuFPI/AAAAAAAAADY/NtLU8LmCrSg/s1600-h/BuggyBotsWx03182008.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://3.bp.blogspot.com/_uKFuQzIsfRI/R-ASTuVuFPI/AAAAAAAAADY/NtLU8LmCrSg/s200/BuggyBotsWx03182008.jpg" alt="" id="BLOGGER_PHOTO_ID_5179159701542016242" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:130%;"&gt;wxWidgets Integration&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_uKFuQzIsfRI/R90XjeVuFHI/AAAAAAAAACU/-IgpkoAZE34/s1600-h/BuggyBots03152008_174958951.screen.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://3.bp.blogspot.com/_uKFuQzIsfRI/R90XjeVuFHI/AAAAAAAAACU/-IgpkoAZE34/s200/BuggyBots03152008_174958951.screen.jpg" alt="" id="BLOGGER_PHOTO_ID_5178321044752962674" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:130%;"&gt;Buggy Gazing from Afar&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_uKFuQzIsfRI/R90XT-VuFGI/AAAAAAAAACM/OdKi8HenmH4/s1600-h/BuggyBots03152008_175024737.screen.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_uKFuQzIsfRI/R90XT-VuFGI/AAAAAAAAACM/OdKi8HenmH4/s200/BuggyBots03152008_175024737.screen.jpg" alt="" id="BLOGGER_PHOTO_ID_5178320778464990306" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:130%;"&gt;Buggy with Laser Lance&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_uKFuQzIsfRI/R90X2eVuFII/AAAAAAAAACc/aP7h787EDr4/s1600-h/BuggyBots03152008_175046163.screen.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://3.bp.blogspot.com/_uKFuQzIsfRI/R90X2eVuFII/AAAAAAAAACc/aP7h787EDr4/s200/BuggyBots03152008_175046163.screen.jpg" alt="" id="BLOGGER_PHOTO_ID_5178321371170477186" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:130%;"&gt;Buggy Blowing Stuff Up with Missiles&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_uKFuQzIsfRI/R90YOeVuFJI/AAAAAAAAACk/yU4EKYCV6WM/s1600-h/BuggyBots03152008_175107687.screen.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://3.bp.blogspot.com/_uKFuQzIsfRI/R90YOeVuFJI/AAAAAAAAACk/yU4EKYCV6WM/s200/BuggyBots03152008_175107687.screen.jpg" alt="" id="BLOGGER_PHOTO_ID_5178321783487337618" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:130%;"&gt;Oops, I Made a Mess&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_uKFuQzIsfRI/R90ZLOVuFKI/AAAAAAAAACs/tjY8RaZlsnk/s1600-h/BuggyBots03152008_175320750.screen.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://2.bp.blogspot.com/_uKFuQzIsfRI/R90ZLOVuFKI/AAAAAAAAACs/tjY8RaZlsnk/s200/BuggyBots03152008_175320750.screen.jpg" alt="" id="BLOGGER_PHOTO_ID_5178322827164390562" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:130%;"&gt;Ninja and Robot Soccer&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_uKFuQzIsfRI/R90Zv-VuFLI/AAAAAAAAAC0/gFeQI-rq1Dg/s1600-h/BuggyBots03152008_175408966.screen.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_uKFuQzIsfRI/R90Zv-VuFLI/AAAAAAAAAC0/gFeQI-rq1Dg/s200/BuggyBots03152008_175408966.screen.jpg" alt="" id="BLOGGER_PHOTO_ID_5178323458524583090" border="0" /&gt;&lt;/a&gt;Hide and Go Seek&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_uKFuQzIsfRI/R90apuVuFMI/AAAAAAAAAC8/U21e5MPOytE/s1600-h/BuggyBots03152008_175518365.screen.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://4.bp.blogspot.com/_uKFuQzIsfRI/R90apuVuFMI/AAAAAAAAAC8/U21e5MPOytE/s200/BuggyBots03152008_175518365.screen.jpg" alt="" id="BLOGGER_PHOTO_ID_5178324450662028482" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;UFO Over Terrain&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_uKFuQzIsfRI/R90bTuVuFNI/AAAAAAAAADE/Ist4vo9p9eA/s1600-h/BuggyBots03152008_175617900.screen.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://4.bp.blogspot.com/_uKFuQzIsfRI/R90bTuVuFNI/AAAAAAAAADE/Ist4vo9p9eA/s200/BuggyBots03152008_175617900.screen.jpg" alt="" id="BLOGGER_PHOTO_ID_5178325172216534226" border="0" /&gt;&lt;/a&gt;Buggy and Crawler on Terrain&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3840335079354552095-4809047802867137182?l=www.botworx.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.botworx.org/feeds/4809047802867137182/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3840335079354552095&amp;postID=4809047802867137182' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/4809047802867137182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/4809047802867137182'/><link rel='alternate' type='text/html' href='http://www.botworx.org/2008/03/screen-shots.html' title='Screen Shots'/><author><name>Kurt</name><uri>http://www.blogger.com/profile/09204380726687323592</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_uKFuQzIsfRI/R9P1IeVuE2I/AAAAAAAAAAM/USUYNrnKgyw/S220/agent.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_uKFuQzIsfRI/R-ASTuVuFPI/AAAAAAAAADY/NtLU8LmCrSg/s72-c/BuggyBotsWx03182008.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3840335079354552095.post-1061107052060050611</id><published>2008-03-16T04:37:00.001-07:00</published><updated>2008-12-11T00:20:24.622-08:00</updated><title type='text'>Introduction</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_uKFuQzIsfRI/R9z91OVuFBI/AAAAAAAAABo/2XM_4pccu3s/s1600-h/BuggyBots03152008_175408966.screen.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_uKFuQzIsfRI/R9z91OVuFBI/AAAAAAAAABo/2XM_4pccu3s/s200/BuggyBots03152008_175408966.screen.jpg" alt="" id="BLOGGER_PHOTO_ID_5178292762393318418" border="0" /&gt;&lt;/a&gt;I've spent an inordinate amount of time on an AI Sandbox / Game Framework over the past 3 or 4 years.&lt;br /&gt;&lt;br /&gt;I'd like to keep the emphasis on the AI to keep from going off on a million different tangents, but who knows?  Maybe it could evolve into a more general game framework.&lt;br /&gt;&lt;br /&gt;It's written in C++&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt; Required Dependencies&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://boost.org/"&gt;Boost&lt;/a&gt;&lt;br /&gt;&lt;a href="http://ogre3d.org/"&gt;Ogre&lt;/a&gt;&lt;br /&gt;&lt;a href="http://sourceforge.net/projects/wgois"&gt;Open Input System (OIS)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.cegui.org.uk/wiki/index.php/Main_Page"&gt;Crazy Eddie's Graphical User Interface (CEGUI)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.ode.org/"&gt;Open Dynamics Engine (ODE)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.bulletphysics.com/"&gt;Bullet&lt;/a&gt;&lt;br /&gt;&lt;a href="http://ggt.sourceforge.net/"&gt;Generic Math Template Library (GMTL)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.openmesh.org/"&gt;Open Mesh&lt;/a&gt;&lt;br /&gt;&lt;a href="http://opensteer.sourceforge.net/"&gt;Open Steer&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Optional Dependencies&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.wxwidgets.org/"&gt;wxWidgets&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.collada.org/mediawiki/index.php/Main_Page"&gt;SCEA COLLADA&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3840335079354552095-1061107052060050611?l=www.botworx.org' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.botworx.org/feeds/1061107052060050611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3840335079354552095&amp;postID=1061107052060050611' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/1061107052060050611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3840335079354552095/posts/default/1061107052060050611'/><link rel='alternate' type='text/html' href='http://www.botworx.org/2008/03/introduction.html' title='Introduction'/><author><name>Kurt</name><uri>http://www.blogger.com/profile/09204380726687323592</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_uKFuQzIsfRI/R9P1IeVuE2I/AAAAAAAAAAM/USUYNrnKgyw/S220/agent.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_uKFuQzIsfRI/R9z91OVuFBI/AAAAAAAAABo/2XM_4pccu3s/s72-c/BuggyBots03152008_175408966.screen.jpg' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
