(window.webpackJsonp=window.webpackJsonp||[]).push([[53],{103:function(e,t,a){"use strict";a.r(t),a.d(t,"frontMatter",(function(){return c})),a.d(t,"metadata",(function(){return m})),a.d(t,"rightToc",(function(){return d})),a.d(t,"default",(function(){return u}));var i=a(2),n=a(6),o=(a(0),a(131)),l=a(132),b=a(133),r=a.n(b),s=a(134),c={title:"Cargo Bots"},m={unversionedId:"examples/ai/bots",id:"examples/ai/bots",isDocsHomePage:!1,title:"Cargo Bots",description:"Source",source:"@site/docs\\examples\\ai\\bots.md",slug:"/examples/ai/bots",permalink:"/docs/examples/ai/bots",version:"current",sidebar:"docs",previous:{title:"Mandelbrot Set",permalink:"/docs/examples/graphics/mandelbrot"},next:{title:"Pixel-perfect hit test",permalink:"/docs/examples/other/perfect-hit-test"}},d=[{value:"Source",id:"source",children:[]},{value:"Entities",id:"entities",children:[]},{value:"States",id:"states",children:[]},{value:"Component Model",id:"component-model",children:[]}],p={rightToc:d};function u(e){var t=e.components,a=Object(n.a)(e,["components"]);return Object(o.b)("wrapper",Object(i.a)({},p,a,{components:t,mdxType:"MDXLayout"}),Object(o.b)("h3",{id:"source"},"Source"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"source: ",Object(o.b)("inlineCode",{parentName:"li"},"examples/src/08-ai/bots"))),Object(o.b)(s.a,{name:"Bots",mdxType:"APHCanvas"}),Object(o.b)("h3",{id:"entities"},"Entities"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"non-playable sandbox"),Object(o.b)("li",{parentName:"ul"},"there are resources of petrol and iron"),Object(o.b)("li",{parentName:"ul"},"the bots need to bring them to the warehouse"),Object(o.b)("li",{parentName:"ul"},"if the warehouse contains enough cargo (30 iron and 10 petrol), the factory will build a new bot"),Object(o.b)("li",{parentName:"ul"},"every source has got their own capacity - if the capacity is exhausted, its icon will turn black")),Object(o.b)("div",{className:r.a.figure},Object(o.b)("img",{className:r.a.fill,src:Object(l.a)("img/docs/bots/bots_desc.svg")})),Object(o.b)("h3",{id:"states"},"States"),Object(o.b)("div",{className:r.a.figure},Object(o.b)("img",{className:r.a.fill,src:Object(l.a)("img/docs/bots/bots_states.svg")})),Object(o.b)("h3",{id:"component-model"},"Component Model"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"the whole model is stored in ",Object(o.b)("inlineCode",{parentName:"li"},"model.ts")),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"GameModel")," contains the map and global attributes"),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"BotModel")," is a model for each bot"),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"CargoSourceModel")," is a model for iron ores and petrol rigs"),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"WarehouseModel")," and ",Object(o.b)("inlineCode",{parentName:"li"},"FactoryModel")," are models for the buildings"),Object(o.b)("li",{parentName:"ul"},"components attached to bots are responsible for movement and AI logic"),Object(o.b)("li",{parentName:"ul"},"AI logic is implemented in ",Object(o.b)("inlineCode",{parentName:"li"},"BotAI")," component"),Object(o.b)("li",{parentName:"ul"},"the bots use ",Object(o.b)("strong",{parentName:"li"},"pathfinding and steering behavior")," for movement"),Object(o.b)("li",{parentName:"ul"},"each state handler has their own method",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"processIdleState")),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"processGoingToLoadState")),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"processGoingToUnloadState")),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"processLoadingState")),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"processUnloadingState"))))),Object(o.b)("div",{className:r.a.figure},Object(o.b)("img",{className:r.a.fill,src:Object(l.a)("img/docs/bots/bots_components.svg")})))}u.isMDXComponent=!0}}]);