| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815 |
- <html xmlns:v="urn:schemas-microsoft-com:vml"
- xmlns:o="urn:schemas-microsoft-com:office:office"
- xmlns:w="urn:schemas-microsoft-com:office:word"
- xmlns:m="http://schemas.microsoft.com/office/2004/12/omml"
- xmlns="http://www.w3.org/TR/REC-html40">
- <head>
- <meta http-equiv=Content-Type content="text/html; charset=windows-1252">
- <meta name=ProgId content=Word.Document>
- <meta name=Generator content="Microsoft Word 12">
- <meta name=Originator content="Microsoft Word 12">
- <link rel=File-List href="development-guide_files/filelist.xml">
- <link rel=Edit-Time-Data href="development-guide_files/editdata.mso">
- <!--[if !mso]>
- <style>
- v\:* {behavior:url(#default#VML);}
- o\:* {behavior:url(#default#VML);}
- w\:* {behavior:url(#default#VML);}
- .shape {behavior:url(#default#VML);}
- </style>
- <![endif]--><!--[if gte mso 9]><xml>
- <o:DocumentProperties>
- <o:Author>user</o:Author>
- <o:LastAuthor>Windows User</o:LastAuthor>
- <o:Revision>3</o:Revision>
- <o:TotalTime>1343</o:TotalTime>
- <o:LastPrinted>2012-07-24T18:24:00Z</o:LastPrinted>
- <o:Created>2012-07-25T17:15:00Z</o:Created>
- <o:LastSaved>2012-07-25T17:15:00Z</o:LastSaved>
- <o:Pages>29</o:Pages>
- <o:Words>14412</o:Words>
- <o:Characters>82154</o:Characters>
- <o:Company>Research In Motion Limited</o:Company>
- <o:Lines>684</o:Lines>
- <o:Paragraphs>192</o:Paragraphs>
- <o:CharactersWithSpaces>96374</o:CharactersWithSpaces>
- <o:Version>12.00</o:Version>
- </o:DocumentProperties>
- </xml><![endif]-->
- <link rel=dataStoreItem href="development-guide_files/item0011.xml"
- target="development-guide_files/props0012.xml">
- <link rel=themeData href="development-guide_files/themedata.thmx">
- <link rel=colorSchemeMapping
- href="development-guide_files/colorschememapping.xml">
- <!--[if gte mso 9]><xml>
- <w:WordDocument>
- <w:TrackMoves>false</w:TrackMoves>
- <w:TrackFormatting/>
- <w:PunctuationKerning/>
- <w:DrawingGridHorizontalSpacing>6 pt</w:DrawingGridHorizontalSpacing>
- <w:DrawingGridVerticalSpacing>6 pt</w:DrawingGridVerticalSpacing>
- <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>
- <w:DisplayVerticalDrawingGridEvery>3</w:DisplayVerticalDrawingGridEvery>
- <w:UseMarginsForDrawingGridOrigin/>
- <w:ValidateAgainstSchemas>false</w:ValidateAgainstSchemas>
- <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
- <w:IgnoreMixedContent>false</w:IgnoreMixedContent>
- <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
- <w:DoNotUnderlineInvalidXML/>
- <w:DoNotPromoteQF/>
- <w:LidThemeOther>EN-US</w:LidThemeOther>
- <w:LidThemeAsian>X-NONE</w:LidThemeAsian>
- <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
- <w:DoNotShadeFormData/>
- <w:Compatibility>
- <w:SpaceForUL/>
- <w:BalanceSingleByteDoubleByteWidth/>
- <w:DoNotLeaveBackslashAlone/>
- <w:ULTrailSpace/>
- <w:DoNotExpandShiftReturn/>
- <w:FootnoteLayoutLikeWW8/>
- <w:ShapeLayoutLikeWW8/>
- <w:AlignTablesRowByRow/>
- <w:ForgetLastTabAlignment/>
- <w:AdjustLineHeightInTable/>
- <w:LayoutRawTableWidth/>
- <w:LayoutTableRowsApart/>
- <w:UseWord97LineBreakingRules/>
- <w:SelectEntireFieldWithStartOrEnd/>
- <w:UseWord2002TableStyleRules/>
- <w:DontUseIndentAsNumberingTabStop/>
- <w:FELineBreak11/>
- <w:WW11IndentRules/>
- <w:DontAutofitConstrainedTables/>
- <w:AutofitLikeWW11/>
- <w:UnderlineTabInNumList/>
- <w:HangulWidthLikeWW11/>
- <w:UseNormalStyleForList/>
- </w:Compatibility>
- <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
- <m:mathPr>
- <m:mathFont m:val="Cambria Math"/>
- <m:brkBin m:val="before"/>
- <m:brkBinSub m:val="--"/>
- <m:smallFrac m:val="off"/>
- <m:dispDef/>
- <m:lMargin m:val="0"/>
- <m:rMargin m:val="0"/>
- <m:defJc m:val="centerGroup"/>
- <m:wrapIndent m:val="1440"/>
- <m:intLim m:val="subSup"/>
- <m:naryLim m:val="undOvr"/>
- </m:mathPr></w:WordDocument>
- </xml><![endif]--><!--[if gte mso 9]><xml>
- <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
- DefSemiHidden="true" DefQFormat="false" DefPriority="99"
- LatentStyleCount="267">
- <w:LsdException Locked="false" Priority="0" SemiHidden="false"
- UnhideWhenUsed="false" QFormat="true" Name="Normal"/>
- <w:LsdException Locked="false" SemiHidden="false" UnhideWhenUsed="false"
- QFormat="true" Name="heading 1"/>
- <w:LsdException Locked="false" SemiHidden="false" UnhideWhenUsed="false"
- QFormat="true" Name="heading 2"/>
- <w:LsdException Locked="false" SemiHidden="false" UnhideWhenUsed="false"
- QFormat="true" Name="heading 3"/>
- <w:LsdException Locked="false" SemiHidden="false" UnhideWhenUsed="false"
- QFormat="true" Name="heading 4"/>
- <w:LsdException Locked="false" SemiHidden="false" UnhideWhenUsed="false"
- QFormat="true" Name="heading 5"/>
- <w:LsdException Locked="false" SemiHidden="false" UnhideWhenUsed="false"
- QFormat="true" Name="heading 6"/>
- <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/>
- <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/>
- <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/>
- <w:LsdException Locked="false" Priority="39" Name="toc 1"/>
- <w:LsdException Locked="false" Priority="39" Name="toc 2"/>
- <w:LsdException Locked="false" Priority="39" Name="toc 3"/>
- <w:LsdException Locked="false" Priority="39" Name="toc 4"/>
- <w:LsdException Locked="false" Priority="39" Name="toc 5"/>
- <w:LsdException Locked="false" Priority="39" Name="toc 6"/>
- <w:LsdException Locked="false" Priority="39" Name="toc 7"/>
- <w:LsdException Locked="false" Priority="39" Name="toc 8"/>
- <w:LsdException Locked="false" Priority="39" Name="toc 9"/>
- <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/>
- <w:LsdException Locked="false" Priority="10" SemiHidden="false"
- UnhideWhenUsed="false" QFormat="true" Name="Title"/>
- <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/>
- <w:LsdException Locked="false" Priority="11" SemiHidden="false"
- UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/>
- <w:LsdException Locked="false" Priority="22" SemiHidden="false"
- UnhideWhenUsed="false" QFormat="true" Name="Strong"/>
- <w:LsdException Locked="false" Priority="20" SemiHidden="false"
- UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/>
- <w:LsdException Locked="false" Priority="59" SemiHidden="false"
- UnhideWhenUsed="false" Name="Table Grid"/>
- <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/>
- <w:LsdException Locked="false" Priority="1" SemiHidden="false"
- UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/>
- <w:LsdException Locked="false" Priority="60" SemiHidden="false"
- UnhideWhenUsed="false" Name="Light Shading"/>
- <w:LsdException Locked="false" Priority="61" SemiHidden="false"
- UnhideWhenUsed="false" Name="Light List"/>
- <w:LsdException Locked="false" Priority="62" SemiHidden="false"
- UnhideWhenUsed="false" Name="Light Grid"/>
- <w:LsdException Locked="false" Priority="63" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium Shading 1"/>
- <w:LsdException Locked="false" Priority="64" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium Shading 2"/>
- <w:LsdException Locked="false" Priority="65" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium List 1"/>
- <w:LsdException Locked="false" Priority="66" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium List 2"/>
- <w:LsdException Locked="false" Priority="67" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium Grid 1"/>
- <w:LsdException Locked="false" Priority="68" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium Grid 2"/>
- <w:LsdException Locked="false" Priority="69" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium Grid 3"/>
- <w:LsdException Locked="false" Priority="70" SemiHidden="false"
- UnhideWhenUsed="false" Name="Dark List"/>
- <w:LsdException Locked="false" Priority="71" SemiHidden="false"
- UnhideWhenUsed="false" Name="Colorful Shading"/>
- <w:LsdException Locked="false" Priority="72" SemiHidden="false"
- UnhideWhenUsed="false" Name="Colorful List"/>
- <w:LsdException Locked="false" Priority="73" SemiHidden="false"
- UnhideWhenUsed="false" Name="Colorful Grid"/>
- <w:LsdException Locked="false" Priority="60" SemiHidden="false"
- UnhideWhenUsed="false" Name="Light Shading Accent 1"/>
- <w:LsdException Locked="false" Priority="61" SemiHidden="false"
- UnhideWhenUsed="false" Name="Light List Accent 1"/>
- <w:LsdException Locked="false" Priority="62" SemiHidden="false"
- UnhideWhenUsed="false" Name="Light Grid Accent 1"/>
- <w:LsdException Locked="false" Priority="63" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/>
- <w:LsdException Locked="false" Priority="64" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/>
- <w:LsdException Locked="false" Priority="65" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/>
- <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/>
- <w:LsdException Locked="false" Priority="34" SemiHidden="false"
- UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/>
- <w:LsdException Locked="false" Priority="29" SemiHidden="false"
- UnhideWhenUsed="false" QFormat="true" Name="Quote"/>
- <w:LsdException Locked="false" Priority="30" SemiHidden="false"
- UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/>
- <w:LsdException Locked="false" Priority="66" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/>
- <w:LsdException Locked="false" Priority="67" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/>
- <w:LsdException Locked="false" Priority="68" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/>
- <w:LsdException Locked="false" Priority="69" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/>
- <w:LsdException Locked="false" Priority="70" SemiHidden="false"
- UnhideWhenUsed="false" Name="Dark List Accent 1"/>
- <w:LsdException Locked="false" Priority="71" SemiHidden="false"
- UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/>
- <w:LsdException Locked="false" Priority="72" SemiHidden="false"
- UnhideWhenUsed="false" Name="Colorful List Accent 1"/>
- <w:LsdException Locked="false" Priority="73" SemiHidden="false"
- UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/>
- <w:LsdException Locked="false" Priority="60" SemiHidden="false"
- UnhideWhenUsed="false" Name="Light Shading Accent 2"/>
- <w:LsdException Locked="false" Priority="61" SemiHidden="false"
- UnhideWhenUsed="false" Name="Light List Accent 2"/>
- <w:LsdException Locked="false" Priority="62" SemiHidden="false"
- UnhideWhenUsed="false" Name="Light Grid Accent 2"/>
- <w:LsdException Locked="false" Priority="63" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/>
- <w:LsdException Locked="false" Priority="64" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/>
- <w:LsdException Locked="false" Priority="65" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/>
- <w:LsdException Locked="false" Priority="66" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/>
- <w:LsdException Locked="false" Priority="67" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/>
- <w:LsdException Locked="false" Priority="68" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/>
- <w:LsdException Locked="false" Priority="69" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/>
- <w:LsdException Locked="false" Priority="70" SemiHidden="false"
- UnhideWhenUsed="false" Name="Dark List Accent 2"/>
- <w:LsdException Locked="false" Priority="71" SemiHidden="false"
- UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/>
- <w:LsdException Locked="false" Priority="72" SemiHidden="false"
- UnhideWhenUsed="false" Name="Colorful List Accent 2"/>
- <w:LsdException Locked="false" Priority="73" SemiHidden="false"
- UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/>
- <w:LsdException Locked="false" Priority="60" SemiHidden="false"
- UnhideWhenUsed="false" Name="Light Shading Accent 3"/>
- <w:LsdException Locked="false" Priority="61" SemiHidden="false"
- UnhideWhenUsed="false" Name="Light List Accent 3"/>
- <w:LsdException Locked="false" Priority="62" SemiHidden="false"
- UnhideWhenUsed="false" Name="Light Grid Accent 3"/>
- <w:LsdException Locked="false" Priority="63" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/>
- <w:LsdException Locked="false" Priority="64" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/>
- <w:LsdException Locked="false" Priority="65" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/>
- <w:LsdException Locked="false" Priority="66" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/>
- <w:LsdException Locked="false" Priority="67" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/>
- <w:LsdException Locked="false" Priority="68" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/>
- <w:LsdException Locked="false" Priority="69" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/>
- <w:LsdException Locked="false" Priority="70" SemiHidden="false"
- UnhideWhenUsed="false" Name="Dark List Accent 3"/>
- <w:LsdException Locked="false" Priority="71" SemiHidden="false"
- UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/>
- <w:LsdException Locked="false" Priority="72" SemiHidden="false"
- UnhideWhenUsed="false" Name="Colorful List Accent 3"/>
- <w:LsdException Locked="false" Priority="73" SemiHidden="false"
- UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/>
- <w:LsdException Locked="false" Priority="60" SemiHidden="false"
- UnhideWhenUsed="false" Name="Light Shading Accent 4"/>
- <w:LsdException Locked="false" Priority="61" SemiHidden="false"
- UnhideWhenUsed="false" Name="Light List Accent 4"/>
- <w:LsdException Locked="false" Priority="62" SemiHidden="false"
- UnhideWhenUsed="false" Name="Light Grid Accent 4"/>
- <w:LsdException Locked="false" Priority="63" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/>
- <w:LsdException Locked="false" Priority="64" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/>
- <w:LsdException Locked="false" Priority="65" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/>
- <w:LsdException Locked="false" Priority="66" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/>
- <w:LsdException Locked="false" Priority="67" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/>
- <w:LsdException Locked="false" Priority="68" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/>
- <w:LsdException Locked="false" Priority="69" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/>
- <w:LsdException Locked="false" Priority="70" SemiHidden="false"
- UnhideWhenUsed="false" Name="Dark List Accent 4"/>
- <w:LsdException Locked="false" Priority="71" SemiHidden="false"
- UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/>
- <w:LsdException Locked="false" Priority="72" SemiHidden="false"
- UnhideWhenUsed="false" Name="Colorful List Accent 4"/>
- <w:LsdException Locked="false" Priority="73" SemiHidden="false"
- UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/>
- <w:LsdException Locked="false" Priority="60" SemiHidden="false"
- UnhideWhenUsed="false" Name="Light Shading Accent 5"/>
- <w:LsdException Locked="false" Priority="61" SemiHidden="false"
- UnhideWhenUsed="false" Name="Light List Accent 5"/>
- <w:LsdException Locked="false" Priority="62" SemiHidden="false"
- UnhideWhenUsed="false" Name="Light Grid Accent 5"/>
- <w:LsdException Locked="false" Priority="63" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/>
- <w:LsdException Locked="false" Priority="64" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/>
- <w:LsdException Locked="false" Priority="65" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/>
- <w:LsdException Locked="false" Priority="66" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/>
- <w:LsdException Locked="false" Priority="67" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/>
- <w:LsdException Locked="false" Priority="68" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/>
- <w:LsdException Locked="false" Priority="69" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/>
- <w:LsdException Locked="false" Priority="70" SemiHidden="false"
- UnhideWhenUsed="false" Name="Dark List Accent 5"/>
- <w:LsdException Locked="false" Priority="71" SemiHidden="false"
- UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/>
- <w:LsdException Locked="false" Priority="72" SemiHidden="false"
- UnhideWhenUsed="false" Name="Colorful List Accent 5"/>
- <w:LsdException Locked="false" Priority="73" SemiHidden="false"
- UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/>
- <w:LsdException Locked="false" Priority="60" SemiHidden="false"
- UnhideWhenUsed="false" Name="Light Shading Accent 6"/>
- <w:LsdException Locked="false" Priority="61" SemiHidden="false"
- UnhideWhenUsed="false" Name="Light List Accent 6"/>
- <w:LsdException Locked="false" Priority="62" SemiHidden="false"
- UnhideWhenUsed="false" Name="Light Grid Accent 6"/>
- <w:LsdException Locked="false" Priority="63" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/>
- <w:LsdException Locked="false" Priority="64" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/>
- <w:LsdException Locked="false" Priority="65" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/>
- <w:LsdException Locked="false" Priority="66" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/>
- <w:LsdException Locked="false" Priority="67" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/>
- <w:LsdException Locked="false" Priority="68" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/>
- <w:LsdException Locked="false" Priority="69" SemiHidden="false"
- UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/>
- <w:LsdException Locked="false" Priority="70" SemiHidden="false"
- UnhideWhenUsed="false" Name="Dark List Accent 6"/>
- <w:LsdException Locked="false" Priority="71" SemiHidden="false"
- UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/>
- <w:LsdException Locked="false" Priority="72" SemiHidden="false"
- UnhideWhenUsed="false" Name="Colorful List Accent 6"/>
- <w:LsdException Locked="false" Priority="73" SemiHidden="false"
- UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/>
- <w:LsdException Locked="false" Priority="19" SemiHidden="false"
- UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/>
- <w:LsdException Locked="false" Priority="21" SemiHidden="false"
- UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/>
- <w:LsdException Locked="false" Priority="31" SemiHidden="false"
- UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/>
- <w:LsdException Locked="false" Priority="32" SemiHidden="false"
- UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/>
- <w:LsdException Locked="false" Priority="33" SemiHidden="false"
- UnhideWhenUsed="false" QFormat="true" Name="Book Title"/>
- <w:LsdException Locked="false" Priority="37" Name="Bibliography"/>
- <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/>
- </w:LatentStyles>
- </xml><![endif]-->
- <style>
- <!--
- /* Font Definitions */
- @font-face
- {font-family:Wingdings;
- panose-1:5 0 0 0 0 0 0 0 0 0;
- mso-font-charset:2;
- mso-generic-font-family:auto;
- mso-font-pitch:variable;
- mso-font-signature:0 268435456 0 0 -2147483648 0;}
- @font-face
- {font-family:"MS Gothic";
- panose-1:2 11 6 9 7 2 5 8 2 4;
- mso-font-alt:"?l?r ?S?V?b?N";
- mso-font-charset:128;
- mso-generic-font-family:modern;
- mso-font-pitch:fixed;
- mso-font-signature:-536870145 1791491579 18 0 131231 0;}
- @font-face
- {font-family:"MS Gothic";
- panose-1:2 11 6 9 7 2 5 8 2 4;
- mso-font-alt:"?l?r ?S?V?b?N";
- mso-font-charset:128;
- mso-generic-font-family:modern;
- mso-font-pitch:fixed;
- mso-font-signature:-536870145 1791491579 18 0 131231 0;}
- @font-face
- {font-family:Cambria;
- panose-1:2 4 5 3 5 4 6 3 2 4;
- mso-font-charset:0;
- mso-generic-font-family:roman;
- mso-font-pitch:variable;
- mso-font-signature:-536870145 1073743103 0 0 415 0;}
- @font-face
- {font-family:Calibri;
- panose-1:2 15 5 2 2 2 4 3 2 4;
- mso-font-charset:0;
- mso-generic-font-family:swiss;
- mso-font-pitch:variable;
- mso-font-signature:-520092929 1073786111 9 0 415 0;}
- @font-face
- {font-family:Tahoma;
- panose-1:2 11 6 4 3 5 4 4 2 4;
- mso-font-charset:0;
- mso-generic-font-family:swiss;
- mso-font-pitch:variable;
- mso-font-signature:-520081665 -1073717157 41 0 66047 0;}
- @font-face
- {font-family:"Malgun Gothic";
- panose-1:2 11 5 3 2 0 0 2 0 4;
- mso-font-charset:129;
- mso-generic-font-family:swiss;
- mso-font-pitch:variable;
- mso-font-signature:-1879047505 165117179 18 0 524289 0;}
- @font-face
- {font-family:"\@Malgun Gothic";
- panose-1:2 11 5 3 2 0 0 2 0 4;
- mso-font-charset:129;
- mso-generic-font-family:swiss;
- mso-font-pitch:variable;
- mso-font-signature:-1879047505 165117179 18 0 524289 0;}
- @font-face
- {font-family:TradeGothicNextLTPro-Lt;
- panose-1:0 0 0 0 0 0 0 0 0 0;
- mso-font-alt:"Malgun Gothic";
- mso-font-charset:0;
- mso-generic-font-family:roman;
- mso-font-format:other;
- mso-font-pitch:auto;
- mso-font-signature:3 0 0 0 1 0;}
- @font-face
- {font-family:Consolas;
- panose-1:2 11 6 9 2 2 4 3 2 4;
- mso-font-charset:0;
- mso-generic-font-family:modern;
- mso-font-pitch:fixed;
- mso-font-signature:-520092929 1073806591 9 0 415 0;}
- @font-face
- {font-family:"\@MS Gothic";
- panose-1:2 11 6 9 7 2 5 8 2 4;
- mso-font-charset:128;
- mso-generic-font-family:modern;
- mso-font-pitch:fixed;
- mso-font-signature:-536870145 1791491579 18 0 131231 0;}
- /* Style Definitions */
- p.MsoNormal, li.MsoNormal, div.MsoNormal
- {mso-style-unhide:no;
- mso-style-qformat:yes;
- mso-style-parent:"";
- margin:0in;
- margin-bottom:.0001pt;
- mso-pagination:none;
- mso-layout-grid-align:none;
- text-autospace:none;
- font-size:11.0pt;
- font-family:"Malgun Gothic","sans-serif";
- mso-hansi-font-family:"Times New Roman";
- mso-bidi-font-family:TradeGothicNextLTPro-Lt;}
- h1
- {mso-style-priority:99;
- mso-style-unhide:no;
- mso-style-qformat:yes;
- mso-style-link:"Heading 1 Char";
- mso-style-next:Normal;
- margin:0in;
- margin-bottom:.0001pt;
- mso-pagination:none;
- mso-outline-level:1;
- mso-layout-grid-align:none;
- text-autospace:none;
- font-size:24.0pt;
- font-family:"Malgun Gothic","sans-serif";
- mso-hansi-font-family:"Times New Roman";
- mso-bidi-font-family:TradeGothicNextLTPro-Lt;
- mso-font-kerning:0pt;}
- h2
- {mso-style-priority:99;
- mso-style-unhide:no;
- mso-style-qformat:yes;
- mso-style-parent:Subtitle;
- mso-style-link:"Heading 2 Char";
- mso-style-next:Normal;
- margin-top:0in;
- margin-right:0in;
- margin-bottom:12.0pt;
- margin-left:0in;
- page-break-before:always;
- mso-pagination:none;
- mso-outline-level:2;
- mso-layout-grid-align:none;
- text-autospace:none;
- font-size:36.0pt;
- mso-bidi-font-size:12.0pt;
- font-family:"Malgun Gothic","sans-serif";
- mso-hansi-font-family:"Times New Roman";
- mso-bidi-font-family:"Times New Roman";
- color:#009ACD;
- mso-bidi-font-weight:normal;}
- h3
- {mso-style-priority:99;
- mso-style-unhide:no;
- mso-style-qformat:yes;
- mso-style-link:"Heading 3 Char";
- mso-style-next:Normal;
- margin-top:24.0pt;
- margin-right:0in;
- margin-bottom:6.0pt;
- margin-left:0in;
- mso-pagination:none;
- page-break-after:avoid;
- mso-outline-level:3;
- mso-layout-grid-align:none;
- text-autospace:none;
- font-size:18.0pt;
- mso-bidi-font-size:12.0pt;
- font-family:"Malgun Gothic","sans-serif";
- mso-hansi-font-family:"Times New Roman";
- mso-bidi-font-family:"Times New Roman";
- mso-bidi-font-weight:normal;}
- h4
- {mso-style-priority:99;
- mso-style-unhide:no;
- mso-style-qformat:yes;
- mso-style-link:"Heading 4 Char";
- mso-style-next:Normal;
- margin:0in;
- margin-bottom:.0001pt;
- mso-pagination:none;
- mso-outline-level:4;
- mso-layout-grid-align:none;
- text-autospace:none;
- font-size:13.0pt;
- font-family:"Malgun Gothic","sans-serif";
- mso-hansi-font-family:"Times New Roman";
- mso-bidi-font-family:"Times New Roman";
- mso-bidi-font-weight:normal;}
- h5
- {mso-style-priority:99;
- mso-style-unhide:no;
- mso-style-qformat:yes;
- mso-style-link:"Heading 5 Char";
- mso-style-next:Normal;
- margin:0in;
- margin-bottom:.0001pt;
- mso-pagination:none;
- mso-outline-level:5;
- mso-layout-grid-align:none;
- text-autospace:none;
- font-size:9.0pt;
- font-family:"Malgun Gothic","sans-serif";
- mso-hansi-font-family:"Times New Roman";
- mso-bidi-font-family:TradeGothicNextLTPro-Lt;}
- h6
- {mso-style-priority:99;
- mso-style-unhide:no;
- mso-style-qformat:yes;
- mso-style-link:"Heading 6 Char";
- mso-style-next:Normal;
- margin:0in;
- margin-bottom:.0001pt;
- mso-pagination:none;
- mso-outline-level:6;
- mso-layout-grid-align:none;
- text-autospace:none;
- font-size:8.0pt;
- font-family:"Malgun Gothic","sans-serif";
- mso-hansi-font-family:"Times New Roman";
- mso-bidi-font-family:TradeGothicNextLTPro-Lt;}
- p.MsoToc1, li.MsoToc1, div.MsoToc1
- {mso-style-update:auto;
- mso-style-priority:39;
- mso-style-next:Normal;
- margin:0in;
- margin-bottom:.0001pt;
- mso-pagination:none;
- mso-layout-grid-align:none;
- text-autospace:none;
- font-size:11.0pt;
- font-family:"Malgun Gothic","sans-serif";
- mso-hansi-font-family:"Times New Roman";
- mso-bidi-font-family:TradeGothicNextLTPro-Lt;}
- p.MsoToc2, li.MsoToc2, div.MsoToc2
- {mso-style-update:auto;
- mso-style-priority:39;
- mso-style-next:Normal;
- margin-top:0in;
- margin-right:0in;
- margin-bottom:0in;
- margin-left:11.0pt;
- margin-bottom:.0001pt;
- mso-pagination:none;
- mso-layout-grid-align:none;
- text-autospace:none;
- font-size:11.0pt;
- font-family:"Malgun Gothic","sans-serif";
- mso-hansi-font-family:"Times New Roman";
- mso-bidi-font-family:TradeGothicNextLTPro-Lt;}
- p.MsoToc3, li.MsoToc3, div.MsoToc3
- {mso-style-update:auto;
- mso-style-priority:39;
- mso-style-next:Normal;
- margin-top:0in;
- margin-right:0in;
- margin-bottom:0in;
- margin-left:22.0pt;
- margin-bottom:.0001pt;
- mso-pagination:none;
- mso-layout-grid-align:none;
- text-autospace:none;
- font-size:11.0pt;
- font-family:"Malgun Gothic","sans-serif";
- mso-hansi-font-family:"Times New Roman";
- mso-bidi-font-family:TradeGothicNextLTPro-Lt;}
- p.MsoToc4, li.MsoToc4, div.MsoToc4
- {mso-style-update:auto;
- mso-style-priority:39;
- mso-style-next:Normal;
- margin-top:0in;
- margin-right:0in;
- margin-bottom:5.0pt;
- margin-left:33.0pt;
- line-height:115%;
- mso-pagination:widow-orphan;
- font-size:11.0pt;
- font-family:"Calibri","sans-serif";
- mso-fareast-font-family:"Times New Roman";
- mso-bidi-font-family:"Times New Roman";}
- p.MsoToc5, li.MsoToc5, div.MsoToc5
- {mso-style-update:auto;
- mso-style-priority:39;
- mso-style-next:Normal;
- margin-top:0in;
- margin-right:0in;
- margin-bottom:5.0pt;
- margin-left:44.0pt;
- line-height:115%;
- mso-pagination:widow-orphan;
- font-size:11.0pt;
- font-family:"Calibri","sans-serif";
- mso-fareast-font-family:"Times New Roman";
- mso-bidi-font-family:"Times New Roman";}
- p.MsoToc6, li.MsoToc6, div.MsoToc6
- {mso-style-update:auto;
- mso-style-priority:39;
- mso-style-next:Normal;
- margin-top:0in;
- margin-right:0in;
- margin-bottom:5.0pt;
- margin-left:55.0pt;
- line-height:115%;
- mso-pagination:widow-orphan;
- font-size:11.0pt;
- font-family:"Calibri","sans-serif";
- mso-fareast-font-family:"Times New Roman";
- mso-bidi-font-family:"Times New Roman";}
- p.MsoToc7, li.MsoToc7, div.MsoToc7
- {mso-style-update:auto;
- mso-style-priority:39;
- mso-style-next:Normal;
- margin-top:0in;
- margin-right:0in;
- margin-bottom:5.0pt;
- margin-left:66.0pt;
- line-height:115%;
- mso-pagination:widow-orphan;
- font-size:11.0pt;
- font-family:"Calibri","sans-serif";
- mso-fareast-font-family:"Times New Roman";
- mso-bidi-font-family:"Times New Roman";}
- p.MsoToc8, li.MsoToc8, div.MsoToc8
- {mso-style-update:auto;
- mso-style-priority:39;
- mso-style-next:Normal;
- margin-top:0in;
- margin-right:0in;
- margin-bottom:5.0pt;
- margin-left:77.0pt;
- line-height:115%;
- mso-pagination:widow-orphan;
- font-size:11.0pt;
- font-family:"Calibri","sans-serif";
- mso-fareast-font-family:"Times New Roman";
- mso-bidi-font-family:"Times New Roman";}
- p.MsoToc9, li.MsoToc9, div.MsoToc9
- {mso-style-update:auto;
- mso-style-priority:39;
- mso-style-next:Normal;
- margin-top:0in;
- margin-right:0in;
- margin-bottom:5.0pt;
- margin-left:88.0pt;
- line-height:115%;
- mso-pagination:widow-orphan;
- font-size:11.0pt;
- font-family:"Calibri","sans-serif";
- mso-fareast-font-family:"Times New Roman";
- mso-bidi-font-family:"Times New Roman";}
- p.MsoTitle, li.MsoTitle, div.MsoTitle
- {mso-style-priority:10;
- mso-style-unhide:no;
- mso-style-qformat:yes;
- mso-style-link:"Title Char";
- mso-style-next:Normal;
- margin-top:12.0pt;
- margin-right:0in;
- margin-bottom:3.0pt;
- margin-left:0in;
- text-align:center;
- mso-pagination:none;
- mso-outline-level:1;
- mso-layout-grid-align:none;
- text-autospace:none;
- font-size:16.0pt;
- font-family:"Cambria","serif";
- mso-fareast-font-family:"Times New Roman";
- mso-bidi-font-family:"Times New Roman";
- mso-font-kerning:14.0pt;
- font-weight:bold;}
- p.MsoSubtitle, li.MsoSubtitle, div.MsoSubtitle
- {mso-style-priority:11;
- mso-style-unhide:no;
- mso-style-qformat:yes;
- mso-style-link:"Subtitle Char";
- mso-style-next:Normal;
- margin-top:0in;
- margin-right:0in;
- margin-bottom:3.0pt;
- margin-left:0in;
- mso-pagination:none;
- mso-outline-level:2;
- mso-layout-grid-align:none;
- text-autospace:none;
- font-size:36.0pt;
- mso-bidi-font-size:12.0pt;
- font-family:"Malgun Gothic","sans-serif";
- mso-hansi-font-family:"Times New Roman";
- mso-bidi-font-family:"Times New Roman";
- color:#009ACD;
- font-weight:bold;
- mso-bidi-font-weight:normal;}
- a:link, span.MsoHyperlink
- {mso-style-priority:99;
- font-family:"Times New Roman","serif";
- mso-bidi-font-family:"Times New Roman";
- color:blue;
- text-decoration:underline;
- text-underline:single;}
- a:visited, span.MsoHyperlinkFollowed
- {mso-style-noshow:yes;
- mso-style-priority:99;
- color:purple;
- mso-themecolor:followedhyperlink;
- text-decoration:underline;
- text-underline:single;}
- p.MsoDocumentMap, li.MsoDocumentMap, div.MsoDocumentMap
- {mso-style-noshow:yes;
- mso-style-priority:99;
- mso-style-link:"Document Map Char";
- margin:0in;
- margin-bottom:.0001pt;
- mso-pagination:none;
- mso-layout-grid-align:none;
- text-autospace:none;
- font-size:8.0pt;
- font-family:"Tahoma","sans-serif";
- mso-fareast-font-family:"Times New Roman";}
- pre
- {mso-style-priority:99;
- mso-style-link:"HTML Preformatted Char";
- margin:0in;
- margin-bottom:.0001pt;
- mso-pagination:widow-orphan;
- font-size:10.0pt;
- font-family:"Courier New";
- mso-fareast-font-family:"Times New Roman";}
- p.MsoTocHeading, li.MsoTocHeading, div.MsoTocHeading
- {mso-style-noshow:yes;
- mso-style-priority:39;
- mso-style-qformat:yes;
- mso-style-parent:"Heading 1";
- mso-style-next:Normal;
- margin-top:24.0pt;
- margin-right:0in;
- margin-bottom:0in;
- margin-left:0in;
- margin-bottom:.0001pt;
- line-height:115%;
- mso-pagination:widow-orphan lines-together;
- page-break-after:avoid;
- font-size:14.0pt;
- font-family:"Cambria","serif";
- mso-fareast-font-family:"MS Gothic";
- mso-bidi-font-family:"Times New Roman";
- color:#365F91;
- mso-fareast-language:JA;
- font-weight:bold;}
- span.Heading1Char
- {mso-style-name:"Heading 1 Char";
- mso-style-priority:9;
- mso-style-unhide:no;
- mso-style-locked:yes;
- mso-style-link:"Heading 1";
- mso-ansi-font-size:16.0pt;
- font-family:"Cambria","serif";
- mso-ascii-font-family:Cambria;
- mso-hansi-font-family:Cambria;
- mso-bidi-font-family:"Times New Roman";
- mso-font-kerning:16.0pt;
- font-weight:bold;
- mso-bidi-font-weight:normal;}
- span.Heading2Char
- {mso-style-name:"Heading 2 Char";
- mso-style-priority:99;
- mso-style-unhide:no;
- mso-style-locked:yes;
- mso-style-link:"Heading 2";
- mso-ansi-font-size:12.0pt;
- font-family:"Arial","sans-serif";
- mso-ascii-font-family:Arial;
- mso-hansi-font-family:Arial;
- mso-bidi-font-family:"Times New Roman";
- color:#009ACD;
- font-weight:bold;
- mso-bidi-font-weight:normal;}
- span.Heading3Char
- {mso-style-name:"Heading 3 Char";
- mso-style-priority:99;
- mso-style-unhide:no;
- mso-style-locked:yes;
- mso-style-link:"Heading 3";
- mso-ansi-font-size:12.0pt;
- font-family:"Malgun Gothic","sans-serif";
- mso-ascii-font-family:"Malgun Gothic";
- mso-fareast-font-family:"Malgun Gothic";
- mso-bidi-font-family:"Times New Roman";
- font-weight:bold;
- mso-bidi-font-weight:normal;}
- span.Heading4Char
- {mso-style-name:"Heading 4 Char";
- mso-style-priority:99;
- mso-style-unhide:no;
- mso-style-locked:yes;
- mso-style-link:"Heading 4";
- mso-ansi-font-size:13.0pt;
- font-family:"Malgun Gothic","sans-serif";
- mso-ascii-font-family:"Malgun Gothic";
- mso-fareast-font-family:"Malgun Gothic";
- mso-bidi-font-family:"Times New Roman";
- font-weight:bold;
- mso-bidi-font-weight:normal;}
- span.Heading5Char
- {mso-style-name:"Heading 5 Char";
- mso-style-noshow:yes;
- mso-style-priority:9;
- mso-style-unhide:no;
- mso-style-locked:yes;
- mso-style-link:"Heading 5";
- mso-ansi-font-size:13.0pt;
- font-family:"Times New Roman","serif";
- mso-bidi-font-family:"Times New Roman";
- font-weight:bold;
- mso-bidi-font-weight:normal;
- font-style:italic;
- mso-bidi-font-style:normal;}
- span.Heading6Char
- {mso-style-name:"Heading 6 Char";
- mso-style-noshow:yes;
- mso-style-priority:9;
- mso-style-unhide:no;
- mso-style-locked:yes;
- mso-style-link:"Heading 6";
- font-family:"Times New Roman","serif";
- mso-bidi-font-family:"Times New Roman";
- font-weight:bold;
- mso-bidi-font-weight:normal;}
- p.tableheader, li.tableheader, div.tableheader
- {mso-style-name:"table header";
- mso-style-priority:99;
- mso-style-unhide:no;
- mso-style-parent:"";
- margin:0in;
- margin-bottom:.0001pt;
- mso-pagination:none;
- mso-layout-grid-align:none;
- text-autospace:none;
- font-size:11.0pt;
- font-family:"TradeGothicNextLTPro-Lt","serif";
- mso-fareast-font-family:"Times New Roman";
- mso-bidi-font-family:TradeGothicNextLTPro-Lt;
- font-weight:bold;}
- p.link, li.link, div.link
- {mso-style-name:link;
- mso-style-priority:99;
- mso-style-unhide:no;
- mso-style-parent:"";
- margin:0in;
- margin-bottom:.0001pt;
- mso-pagination:none;
- mso-layout-grid-align:none;
- text-autospace:none;
- font-size:11.0pt;
- font-family:"TradeGothicNextLTPro-Lt","serif";
- mso-fareast-font-family:"Times New Roman";
- mso-bidi-font-family:TradeGothicNextLTPro-Lt;}
- p.tabletitle, li.tabletitle, div.tabletitle
- {mso-style-name:"table title";
- mso-style-priority:99;
- mso-style-unhide:no;
- mso-style-parent:"";
- margin:0in;
- margin-bottom:.0001pt;
- mso-pagination:none;
- mso-layout-grid-align:none;
- text-autospace:none;
- font-size:11.0pt;
- font-family:"TradeGothicNextLTPro-Lt","serif";
- mso-fareast-font-family:"Times New Roman";
- mso-bidi-font-family:TradeGothicNextLTPro-Lt;
- font-weight:bold;}
- span.SubtitleChar
- {mso-style-name:"Subtitle Char";
- mso-style-priority:11;
- mso-style-unhide:no;
- mso-style-locked:yes;
- mso-style-link:Subtitle;
- mso-ansi-font-size:12.0pt;
- font-family:"Malgun Gothic","sans-serif";
- mso-ascii-font-family:"Malgun Gothic";
- mso-fareast-font-family:"Malgun Gothic";
- mso-bidi-font-family:"Times New Roman";
- color:#009ACD;
- font-weight:bold;
- mso-bidi-font-weight:normal;}
- span.TitleChar
- {mso-style-name:"Title Char";
- mso-style-priority:10;
- mso-style-unhide:no;
- mso-style-locked:yes;
- mso-style-link:Title;
- mso-ansi-font-size:16.0pt;
- font-family:"Cambria","serif";
- mso-ascii-font-family:Cambria;
- mso-hansi-font-family:Cambria;
- mso-bidi-font-family:"Times New Roman";
- mso-font-kerning:14.0pt;
- font-weight:bold;
- mso-bidi-font-weight:normal;}
- span.DocumentMapChar
- {mso-style-name:"Document Map Char";
- mso-style-noshow:yes;
- mso-style-priority:99;
- mso-style-unhide:no;
- mso-style-locked:yes;
- mso-style-link:"Document Map";
- mso-ansi-font-size:8.0pt;
- font-family:"Tahoma","sans-serif";
- mso-ascii-font-family:Tahoma;
- mso-hansi-font-family:Tahoma;
- mso-bidi-font-family:"Times New Roman";}
- span.HTMLPreformattedChar
- {mso-style-name:"HTML Preformatted Char";
- mso-style-priority:99;
- mso-style-unhide:no;
- mso-style-locked:yes;
- mso-style-link:"HTML Preformatted";
- mso-ansi-font-size:10.0pt;
- font-family:"Courier New";
- mso-ascii-font-family:"Courier New";
- mso-hansi-font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman";}
- .MsoChpDefault
- {mso-style-type:export-only;
- mso-default-props:yes;
- font-family:"Calibri","sans-serif";
- mso-ascii-font-family:Calibri;
- mso-hansi-font-family:Calibri;
- mso-bidi-font-family:Calibri;}
- .MsoPapDefault
- {mso-style-type:export-only;}
- /* Page Definitions */
- @page
- {mso-page-border-surround-header:no;
- mso-page-border-surround-footer:no;
- mso-footnote-separator:url("development-guide_files/header.html") fs;
- mso-footnote-continuation-separator:url("development-guide_files/header.html") fcs;
- mso-endnote-separator:url("development-guide_files/header.html") es;
- mso-endnote-continuation-separator:url("development-guide_files/header.html") ecs;}
- @page WordSection1
- {size:8.5in 11.0in;
- margin:1.0in 1.0in 1.0in 1.0in;
- mso-header-margin:.5in;
- mso-footer-margin:.5in;
- mso-header:url("development-guide_files/header.html") h1;
- mso-footer:url("development-guide_files/header.html") f1;
- mso-paper-source:0;}
- div.WordSection1
- {page:WordSection1;}
- /* List Definitions */
- @list l0
- {mso-list-id:-2;
- mso-list-type:simple;
- mso-list-template-ids:950202048;}
- @list l0:level1
- {mso-level-start-at:0;
- mso-level-number-format:bullet;
- mso-level-text:*;
- mso-level-tab-stop:none;
- mso-level-number-position:left;
- margin-left:0in;
- text-indent:0in;}
- @list l1
- {mso-list-id:73743402;
- mso-list-type:hybrid;
- mso-list-template-ids:-1171616076 -625997186 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
- @list l1:level1
- {mso-level-tab-stop:none;
- mso-level-number-position:left;
- text-indent:-.25in;
- mso-bidi-font-family:"Times New Roman";}
- @list l1:level2
- {mso-level-number-format:alpha-lower;
- mso-level-tab-stop:none;
- mso-level-number-position:left;
- text-indent:-.25in;
- mso-bidi-font-family:"Times New Roman";}
- @list l2
- {mso-list-id:306319327;
- mso-list-type:hybrid;
- mso-list-template-ids:95300580 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
- @list l2:level1
- {mso-level-tab-stop:none;
- mso-level-number-position:left;
- text-indent:-.25in;
- mso-bidi-font-family:"Times New Roman";}
- @list l3
- {mso-list-id:434520757;
- mso-list-type:hybrid;
- mso-list-template-ids:-1276236932 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
- @list l3:level1
- {mso-level-tab-stop:none;
- mso-level-number-position:left;
- text-indent:-.25in;
- mso-bidi-font-family:"Times New Roman";}
- @list l4
- {mso-list-id:577519682;
- mso-list-type:hybrid;
- mso-list-template-ids:-681649560 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
- @list l4:level1
- {mso-level-number-format:bullet;
- mso-level-text:\F0B7;
- mso-level-tab-stop:none;
- mso-level-number-position:left;
- text-indent:-.25in;
- font-family:Symbol;}
- @list l4:level2
- {mso-level-number-format:bullet;
- mso-level-text:o;
- mso-level-tab-stop:none;
- mso-level-number-position:left;
- text-indent:-.25in;
- font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman";}
- @list l4:level3
- {mso-level-number-format:bullet;
- mso-level-text:\F0A7;
- mso-level-tab-stop:none;
- mso-level-number-position:left;
- text-indent:-.25in;
- font-family:Wingdings;}
- @list l4:level4
- {mso-level-number-format:bullet;
- mso-level-text:\F0B7;
- mso-level-tab-stop:none;
- mso-level-number-position:left;
- text-indent:-.25in;
- font-family:Symbol;}
- @list l5
- {mso-list-id:826633563;
- mso-list-type:hybrid;
- mso-list-template-ids:804055030 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
- @list l5:level1
- {mso-level-tab-stop:none;
- mso-level-number-position:left;
- text-indent:-.25in;
- mso-bidi-font-family:"Times New Roman";}
- @list l5:level2
- {mso-level-number-format:alpha-lower;
- mso-level-tab-stop:none;
- mso-level-number-position:left;
- text-indent:-.25in;
- mso-bidi-font-family:"Times New Roman";}
- @list l5:level3
- {mso-level-number-format:roman-lower;
- mso-level-tab-stop:none;
- mso-level-number-position:right;
- text-indent:-9.0pt;
- mso-bidi-font-family:"Times New Roman";}
- @list l6
- {mso-list-id:1953508898;
- mso-list-type:hybrid;
- mso-list-template-ids:815068686 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
- @list l6:level1
- {mso-level-tab-stop:none;
- mso-level-number-position:left;
- text-indent:-.25in;
- mso-bidi-font-family:"Times New Roman";}
- @list l7
- {mso-list-id:2078243896;
- mso-list-type:hybrid;
- mso-list-template-ids:-947758746 67698703 67698713 1271979950 775458348 67698713 67698715 67698703 67698713 67698715;}
- @list l7:level1
- {mso-level-tab-stop:none;
- mso-level-number-position:left;
- text-indent:-.25in;
- mso-bidi-font-family:"Times New Roman";}
- @list l7:level2
- {mso-level-number-format:alpha-lower;
- mso-level-tab-stop:none;
- mso-level-number-position:left;
- text-indent:-.25in;
- mso-bidi-font-family:"Times New Roman";}
- @list l7:level3
- {mso-level-start-at:7;
- mso-level-number-format:bullet;
- mso-level-text:-;
- mso-level-tab-stop:none;
- mso-level-number-position:left;
- margin-left:117.0pt;
- text-indent:-.25in;
- font-family:"Malgun Gothic","sans-serif";}
- @list l7:level4
- {mso-level-start-at:7;
- mso-level-number-format:bullet;
- mso-level-text:\F06E;
- mso-level-tab-stop:none;
- mso-level-number-position:left;
- text-indent:-.25in;
- font-family:Wingdings;
- mso-fareast-font-family:"Times New Roman";}
- @list l8
- {mso-list-id:2110463054;
- mso-list-type:hybrid;
- mso-list-template-ids:-554926380 -1058607584 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
- @list l8:level1
- {mso-level-start-at:5;
- mso-level-number-format:bullet;
- mso-level-text:\F06E;
- mso-level-tab-stop:none;
- mso-level-number-position:left;
- text-indent:-.25in;
- font-family:Wingdings;
- mso-fareast-font-family:"Times New Roman";
- color:blue;}
- @list l0:level1 lfo1
- {mso-level-numbering:continue;
- mso-level-text:\F0B7;
- mso-level-tab-stop:none;
- mso-level-number-position:left;
- mso-level-legacy:yes;
- mso-level-legacy-indent:9.0pt;
- mso-level-legacy-space:0in;
- margin-left:0in;
- text-indent:0in;
- mso-ansi-font-size:8.0pt;
- font-family:Symbol;}
- ol
- {margin-bottom:0in;}
- ul
- {margin-bottom:0in;}
- -->
- </style>
- <!--[if gte mso 10]>
- <style>
- /* Style Definitions */
- table.MsoNormalTable
- {mso-style-name:"Table Normal";
- mso-tstyle-rowband-size:0;
- mso-tstyle-colband-size:0;
- mso-style-noshow:yes;
- mso-style-priority:99;
- mso-style-qformat:yes;
- mso-style-parent:"";
- mso-padding-alt:0in 5.4pt 0in 5.4pt;
- mso-para-margin:0in;
- mso-para-margin-bottom:.0001pt;
- mso-pagination:widow-orphan;
- font-size:10.0pt;
- font-family:"Calibri","sans-serif";}
- </style>
- <![endif]--><!--[if gte mso 9]><xml>
- <o:shapedefaults v:ext="edit" spidmax="2050"/>
- </xml><![endif]--><!--[if gte mso 9]><xml>
- <o:shapelayout v:ext="edit">
- <o:idmap v:ext="edit" data="1"/>
- </o:shapelayout></xml><![endif]-->
- </head>
- <body lang=EN-US link=blue vlink=purple style='tab-interval:.5in;text-justify-trim:
- punctuation'>
- <div class=WordSection1>
- <p class=MsoNormal><!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600"
- o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f"
- stroked="f">
- <v:stroke joinstyle="miter"/>
- <v:formulas>
- <v:f eqn="if lineDrawn pixelLineWidth 0"/>
- <v:f eqn="sum @0 1 0"/>
- <v:f eqn="sum 0 0 @1"/>
- <v:f eqn="prod @2 1 2"/>
- <v:f eqn="prod @3 21600 pixelWidth"/>
- <v:f eqn="prod @3 21600 pixelHeight"/>
- <v:f eqn="sum @0 0 1"/>
- <v:f eqn="prod @6 1 2"/>
- <v:f eqn="prod @7 21600 pixelWidth"/>
- <v:f eqn="sum @8 21600 0"/>
- <v:f eqn="prod @7 21600 pixelHeight"/>
- <v:f eqn="sum @10 21600 0"/>
- </v:formulas>
- <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
- <o:lock v:ext="edit" aspectratio="t"/>
- </v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:460.5pt;
- height:91.5pt'>
- <v:imagedata src="development-guide_files/image001.png" o:title=""/>
- </v:shape><![endif]--><![if !vml]><img width=614 height=122
- src="development-guide_files/image001.png" v:shapes="_x0000_i1025"><![endif]></p>
- <p class=MsoSubtitle><a name="_Toc330902766">Development Guide</a></p>
- <b><span style='font-size:26.0pt;mso-bidi-font-size:12.0pt;font-family:"Malgun Gothic","sans-serif";
- mso-hansi-font-family:"Times New Roman";mso-bidi-font-family:"Times New Roman";
- color:#009ACD;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:
- AR-SA'><br clear=all style='page-break-before:always'>
- </span></b>
- <p class=MsoSubtitle><a name="_Toc330902767"><span style='font-size:26.0pt;
- mso-bidi-font-size:12.0pt;mso-bidi-font-weight:bold'>Contents</span></a></p>
- <p class=MsoNormal><span style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman";color:#009ACD'><o:p> </o:p></span></p>
- <p class=MsoToc2 style='tab-stops:right dotted 467.5pt'><!--[if supportFields]><span
- style='font-size:12.0pt;mso-hansi-font-family:"Malgun Gothic";mso-bidi-font-family:
- "Times New Roman";color:#009ACD'><span style='mso-element:field-begin'></span><span
- style='mso-spacerun:yes'> </span>TOC \o "1-2" \h \z \u <span
- style='mso-element:field-separator'></span></span><![endif]--><span
- style='font-size:12.0pt;mso-hansi-font-family:"Malgun Gothic";mso-bidi-font-family:
- "Times New Roman";color:#009ACD'><span style='mso-no-proof:yes'><a
- href="#_Toc330902766"><span style='color:#009ACD;text-decoration:none;
- text-underline:none'>Development Guide<span style='display:none;mso-hide:screen'><span
- style='mso-tab-count:1 dotted'>. </span></span></span><!--[if supportFields]><span
- style='color:#009ACD;display:none;mso-hide:screen;text-decoration:none;
- text-underline:none'><span style='mso-element:field-begin'></span> PAGEREF
- _Toc330902766 \h <span style='mso-element:field-separator'></span></span><![endif]--><span
- style='color:#009ACD;display:none;mso-hide:screen;text-decoration:none;
- text-underline:none'>1<!--[if gte mso 9]><xml>
- <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F00630033003300300039003000320037003600360000000000</w:data>
- </xml><![endif]--></span><!--[if supportFields]><span style='color:#009ACD;
- display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
- style='mso-element:field-end'></span></span><![endif]--></a><o:p></o:p></span></span></p>
- <p class=MsoToc2 style='tab-stops:right dotted 467.5pt'><span style='font-size:
- 12.0pt;mso-hansi-font-family:"Malgun Gothic";mso-bidi-font-family:"Times New Roman";
- color:#009ACD;mso-no-proof:yes'><a href="#_Toc330902767"><span
- style='color:#009ACD;text-decoration:none;text-underline:none'>Contents<span
- style='display:none;mso-hide:screen'><span style='mso-tab-count:1 dotted'> </span></span></span><!--[if supportFields]><span
- style='color:#009ACD;display:none;mso-hide:screen;text-decoration:none;
- text-underline:none'><span style='mso-element:field-begin'></span> PAGEREF
- _Toc330902767 \h <span style='mso-element:field-separator'></span></span><![endif]--><span
- style='color:#009ACD;display:none;mso-hide:screen;text-decoration:none;
- text-underline:none'>2<!--[if gte mso 9]><xml>
- <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F00630033003300300039003000320037003600370000000000</w:data>
- </xml><![endif]--></span><!--[if supportFields]><span style='color:#009ACD;
- display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
- style='mso-element:field-end'></span></span><![endif]--></a><o:p></o:p></span></p>
- <p class=MsoToc2 style='tab-stops:right dotted 467.5pt'><span style='font-size:
- 12.0pt;mso-hansi-font-family:"Malgun Gothic";mso-bidi-font-family:"Times New Roman";
- color:#009ACD;mso-no-proof:yes'><a href="#_Toc330902768"><span
- style='color:#009ACD;text-decoration:none;text-underline:none'>Overview<span
- style='display:none;mso-hide:screen'><span style='mso-tab-count:1 dotted'>.. </span></span></span><!--[if supportFields]><span
- style='color:#009ACD;display:none;mso-hide:screen;text-decoration:none;
- text-underline:none'><span style='mso-element:field-begin'></span> PAGEREF
- _Toc330902768 \h <span style='mso-element:field-separator'></span></span><![endif]--><span
- style='color:#009ACD;display:none;mso-hide:screen;text-decoration:none;
- text-underline:none'>3<!--[if gte mso 9]><xml>
- <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F00630033003300300039003000320037003600380000000000</w:data>
- </xml><![endif]--></span><!--[if supportFields]><span style='color:#009ACD;
- display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
- style='mso-element:field-end'></span></span><![endif]--></a><o:p></o:p></span></p>
- <p class=MsoToc2 style='tab-stops:right dotted 467.5pt'><span style='font-size:
- 12.0pt;mso-hansi-font-family:"Malgun Gothic";mso-bidi-font-family:"Times New Roman";
- color:#009ACD;mso-no-proof:yes'><a href="#_Toc330902769"><span
- style='color:#009ACD;text-decoration:none;text-underline:none'>Compiling
- framework<span style='display:none;mso-hide:screen'><span style='mso-tab-count:
- 1 dotted'>. </span></span></span><!--[if supportFields]><span style='color:
- #009ACD;display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
- style='mso-element:field-begin'></span> PAGEREF _Toc330902769 \h <span
- style='mso-element:field-separator'></span></span><![endif]--><span
- style='color:#009ACD;display:none;mso-hide:screen;text-decoration:none;
- text-underline:none'>5<!--[if gte mso 9]><xml>
- <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F00630033003300300039003000320037003600390000000000</w:data>
- </xml><![endif]--></span><!--[if supportFields]><span style='color:#009ACD;
- display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
- style='mso-element:field-end'></span></span><![endif]--></a><o:p></o:p></span></p>
- <p class=MsoToc2 style='tab-stops:right dotted 467.5pt'><span style='font-size:
- 12.0pt;mso-hansi-font-family:"Malgun Gothic";mso-bidi-font-family:"Times New Roman";
- color:#009ACD;mso-no-proof:yes'><a href="#_Toc330902770"><span
- style='color:#009ACD;text-decoration:none;text-underline:none'>Assets and
- authoring<span style='display:none;mso-hide:screen'><span style='mso-tab-count:
- 1 dotted'>. </span></span></span><!--[if supportFields]><span style='color:
- #009ACD;display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
- style='mso-element:field-begin'></span> PAGEREF _Toc330902770 \h <span
- style='mso-element:field-separator'></span></span><![endif]--><span
- style='color:#009ACD;display:none;mso-hide:screen;text-decoration:none;
- text-underline:none'>12<!--[if gte mso 9]><xml>
- <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F00630033003300300039003000320037003700300000000000</w:data>
- </xml><![endif]--></span><!--[if supportFields]><span style='color:#009ACD;
- display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
- style='mso-element:field-end'></span></span><![endif]--></a><o:p></o:p></span></p>
- <p class=MsoToc2 style='tab-stops:right dotted 467.5pt'><span style='font-size:
- 12.0pt;mso-hansi-font-family:"Malgun Gothic";mso-bidi-font-family:"Times New Roman";
- color:#009ACD;mso-no-proof:yes'><a href="#_Toc330902771"><span
- style='color:#009ACD;text-decoration:none;text-underline:none'>Game<span
- style='display:none;mso-hide:screen'><span style='mso-tab-count:1 dotted'>. </span></span></span><!--[if supportFields]><span
- style='color:#009ACD;display:none;mso-hide:screen;text-decoration:none;
- text-underline:none'><span style='mso-element:field-begin'></span> PAGEREF
- _Toc330902771 \h <span style='mso-element:field-separator'></span></span><![endif]--><span
- style='color:#009ACD;display:none;mso-hide:screen;text-decoration:none;
- text-underline:none'>15<!--[if gte mso 9]><xml>
- <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F00630033003300300039003000320037003700310000000000</w:data>
- </xml><![endif]--></span><!--[if supportFields]><span style='color:#009ACD;
- display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
- style='mso-element:field-end'></span></span><![endif]--></a><o:p></o:p></span></p>
- <p class=MsoToc2 style='tab-stops:right dotted 467.5pt'><span style='font-size:
- 12.0pt;mso-hansi-font-family:"Malgun Gothic";mso-bidi-font-family:"Times New Roman";
- color:#009ACD;mso-no-proof:yes'><a href="#_Toc330902772"><span
- style='color:#009ACD;text-decoration:none;text-underline:none'>Input and
- sensors<span style='display:none;mso-hide:screen'><span style='mso-tab-count:
- 1 dotted'> </span></span></span><!--[if supportFields]><span style='color:#009ACD;
- display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
- style='mso-element:field-begin'></span> PAGEREF _Toc330902772 \h <span
- style='mso-element:field-separator'></span></span><![endif]--><span
- style='color:#009ACD;display:none;mso-hide:screen;text-decoration:none;
- text-underline:none'>18<!--[if gte mso 9]><xml>
- <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F00630033003300300039003000320037003700320000000000</w:data>
- </xml><![endif]--></span><!--[if supportFields]><span style='color:#009ACD;
- display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
- style='mso-element:field-end'></span></span><![endif]--></a><o:p></o:p></span></p>
- <p class=MsoToc2 style='tab-stops:right dotted 467.5pt'><span style='font-size:
- 12.0pt;mso-hansi-font-family:"Malgun Gothic";mso-bidi-font-family:"Times New Roman";
- color:#009ACD;mso-no-proof:yes'><a href="#_Toc330902773"><span
- style='color:#009ACD;text-decoration:none;text-underline:none'>Sprites and
- fonts<span style='display:none;mso-hide:screen'><span style='mso-tab-count:
- 1 dotted'> </span></span></span><!--[if supportFields]><span style='color:#009ACD;
- display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
- style='mso-element:field-begin'></span> PAGEREF _Toc330902773 \h <span
- style='mso-element:field-separator'></span></span><![endif]--><span
- style='color:#009ACD;display:none;mso-hide:screen;text-decoration:none;
- text-underline:none'>20<!--[if gte mso 9]><xml>
- <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F00630033003300300039003000320037003700330000000000</w:data>
- </xml><![endif]--></span><!--[if supportFields]><span style='color:#009ACD;
- display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
- style='mso-element:field-end'></span></span><![endif]--></a><o:p></o:p></span></p>
- <p class=MsoToc2 style='tab-stops:right dotted 467.5pt'><span style='font-size:
- 12.0pt;mso-hansi-font-family:"Malgun Gothic";mso-bidi-font-family:"Times New Roman";
- color:#009ACD;mso-no-proof:yes'><a href="#_Toc330902774"><span
- style='color:#009ACD;text-decoration:none;text-underline:none'>Scene and nodes<span
- style='display:none;mso-hide:screen'><span style='mso-tab-count:1 dotted'> </span></span></span><!--[if supportFields]><span
- style='color:#009ACD;display:none;mso-hide:screen;text-decoration:none;
- text-underline:none'><span style='mso-element:field-begin'></span> PAGEREF
- _Toc330902774 \h <span style='mso-element:field-separator'></span></span><![endif]--><span
- style='color:#009ACD;display:none;mso-hide:screen;text-decoration:none;
- text-underline:none'>22<!--[if gte mso 9]><xml>
- <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F00630033003300300039003000320037003700340000000000</w:data>
- </xml><![endif]--></span><!--[if supportFields]><span style='color:#009ACD;
- display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
- style='mso-element:field-end'></span></span><![endif]--></a><o:p></o:p></span></p>
- <p class=MsoToc2 style='tab-stops:right dotted 467.5pt'><span style='font-size:
- 12.0pt;mso-hansi-font-family:"Malgun Gothic";mso-bidi-font-family:"Times New Roman";
- color:#009ACD;mso-no-proof:yes'><a href="#_Toc330902775"><span
- style='color:#009ACD;text-decoration:none;text-underline:none'>Model and mesh<span
- style='display:none;mso-hide:screen'><span style='mso-tab-count:1 dotted'>. </span></span></span><!--[if supportFields]><span
- style='color:#009ACD;display:none;mso-hide:screen;text-decoration:none;
- text-underline:none'><span style='mso-element:field-begin'></span> PAGEREF
- _Toc330902775 \h <span style='mso-element:field-separator'></span></span><![endif]--><span
- style='color:#009ACD;display:none;mso-hide:screen;text-decoration:none;
- text-underline:none'>28<!--[if gte mso 9]><xml>
- <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F00630033003300300039003000320037003700350000000000</w:data>
- </xml><![endif]--></span><!--[if supportFields]><span style='color:#009ACD;
- display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
- style='mso-element:field-end'></span></span><![endif]--></a><o:p></o:p></span></p>
- <p class=MsoToc2 style='tab-stops:right dotted 467.5pt'><span style='font-size:
- 12.0pt;mso-hansi-font-family:"Malgun Gothic";mso-bidi-font-family:"Times New Roman";
- color:#009ACD;mso-no-proof:yes'><a href="#_Toc330902776"><span
- style='color:#009ACD;text-decoration:none;text-underline:none'>Lights<span
- style='display:none;mso-hide:screen'><span style='mso-tab-count:1 dotted'> </span></span></span><!--[if supportFields]><span
- style='color:#009ACD;display:none;mso-hide:screen;text-decoration:none;
- text-underline:none'><span style='mso-element:field-begin'></span> PAGEREF
- _Toc330902776 \h <span style='mso-element:field-separator'></span></span><![endif]--><span
- style='color:#009ACD;display:none;mso-hide:screen;text-decoration:none;
- text-underline:none'>30<!--[if gte mso 9]><xml>
- <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F00630033003300300039003000320037003700360000000000</w:data>
- </xml><![endif]--></span><!--[if supportFields]><span style='color:#009ACD;
- display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
- style='mso-element:field-end'></span></span><![endif]--></a><o:p></o:p></span></p>
- <p class=MsoToc2 style='tab-stops:right dotted 467.5pt'><span style='font-size:
- 12.0pt;mso-hansi-font-family:"Malgun Gothic";mso-bidi-font-family:"Times New Roman";
- color:#009ACD;mso-no-proof:yes'><a href="#_Toc330902777"><span
- style='color:#009ACD;text-decoration:none;text-underline:none'>Materials and
- shaders<span style='display:none;mso-hide:screen'><span style='mso-tab-count:
- 1 dotted'> </span></span></span><!--[if supportFields]><span style='color:#009ACD;
- display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
- style='mso-element:field-begin'></span> PAGEREF _Toc330902777 \h <span
- style='mso-element:field-separator'></span></span><![endif]--><span
- style='color:#009ACD;display:none;mso-hide:screen;text-decoration:none;
- text-underline:none'>33<!--[if gte mso 9]><xml>
- <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F00630033003300300039003000320037003700370000000000</w:data>
- </xml><![endif]--></span><!--[if supportFields]><span style='color:#009ACD;
- display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
- style='mso-element:field-end'></span></span><![endif]--></a><o:p></o:p></span></p>
- <p class=MsoToc2 style='tab-stops:right dotted 467.5pt'><span style='font-size:
- 12.0pt;mso-hansi-font-family:"Malgun Gothic";mso-bidi-font-family:"Times New Roman";
- color:#009ACD;mso-no-proof:yes'><a href="#_Toc330902778"><span
- style='color:#009ACD;text-decoration:none;text-underline:none'>Particle
- emitters<span style='display:none;mso-hide:screen'><span style='mso-tab-count:
- 1 dotted'> </span></span></span><!--[if supportFields]><span style='color:#009ACD;
- display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
- style='mso-element:field-begin'></span> PAGEREF _Toc330902778 \h <span
- style='mso-element:field-separator'></span></span><![endif]--><span
- style='color:#009ACD;display:none;mso-hide:screen;text-decoration:none;
- text-underline:none'>37<!--[if gte mso 9]><xml>
- <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F00630033003300300039003000320037003700380000000000</w:data>
- </xml><![endif]--></span><!--[if supportFields]><span style='color:#009ACD;
- display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
- style='mso-element:field-end'></span></span><![endif]--></a><o:p></o:p></span></p>
- <p class=MsoToc2 style='tab-stops:right dotted 467.5pt'><span style='font-size:
- 12.0pt;mso-hansi-font-family:"Malgun Gothic";mso-bidi-font-family:"Times New Roman";
- color:#009ACD;mso-no-proof:yes'><a href="#_Toc330902779"><span
- style='color:#009ACD;text-decoration:none;text-underline:none'>Physics<span
- style='display:none;mso-hide:screen'><span style='mso-tab-count:1 dotted'> </span></span></span><!--[if supportFields]><span
- style='color:#009ACD;display:none;mso-hide:screen;text-decoration:none;
- text-underline:none'><span style='mso-element:field-begin'></span> PAGEREF
- _Toc330902779 \h <span style='mso-element:field-separator'></span></span><![endif]--><span
- style='color:#009ACD;display:none;mso-hide:screen;text-decoration:none;
- text-underline:none'>39<!--[if gte mso 9]><xml>
- <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F00630033003300300039003000320037003700390000000000</w:data>
- </xml><![endif]--></span><!--[if supportFields]><span style='color:#009ACD;
- display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
- style='mso-element:field-end'></span></span><![endif]--></a><o:p></o:p></span></p>
- <p class=MsoToc2 style='tab-stops:right dotted 467.5pt'><span style='font-size:
- 12.0pt;mso-hansi-font-family:"Malgun Gothic";mso-bidi-font-family:"Times New Roman";
- color:#009ACD;mso-no-proof:yes'><a href="#_Toc330902780"><span
- style='color:#009ACD;text-decoration:none;text-underline:none'>Animation<span
- style='display:none;mso-hide:screen'><span style='mso-tab-count:1 dotted'>. </span></span></span><!--[if supportFields]><span
- style='color:#009ACD;display:none;mso-hide:screen;text-decoration:none;
- text-underline:none'><span style='mso-element:field-begin'></span> PAGEREF
- _Toc330902780 \h <span style='mso-element:field-separator'></span></span><![endif]--><span
- style='color:#009ACD;display:none;mso-hide:screen;text-decoration:none;
- text-underline:none'>48<!--[if gte mso 9]><xml>
- <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F00630033003300300039003000320037003800300000000000</w:data>
- </xml><![endif]--></span><!--[if supportFields]><span style='color:#009ACD;
- display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
- style='mso-element:field-end'></span></span><![endif]--></a><o:p></o:p></span></p>
- <p class=MsoToc2 style='tab-stops:right dotted 467.5pt'><span style='font-size:
- 12.0pt;mso-hansi-font-family:"Malgun Gothic";mso-bidi-font-family:"Times New Roman";
- color:#009ACD;mso-no-proof:yes'><a href="#_Toc330902781"><span
- style='color:#009ACD;text-decoration:none;text-underline:none'>Audio<span
- style='display:none;mso-hide:screen'><span style='mso-tab-count:1 dotted'>. </span></span></span><!--[if supportFields]><span
- style='color:#009ACD;display:none;mso-hide:screen;text-decoration:none;
- text-underline:none'><span style='mso-element:field-begin'></span> PAGEREF
- _Toc330902781 \h <span style='mso-element:field-separator'></span></span><![endif]--><span
- style='color:#009ACD;display:none;mso-hide:screen;text-decoration:none;
- text-underline:none'>53<!--[if gte mso 9]><xml>
- <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F00630033003300300039003000320037003800310000000000</w:data>
- </xml><![endif]--></span><!--[if supportFields]><span style='color:#009ACD;
- display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
- style='mso-element:field-end'></span></span><![endif]--></a><o:p></o:p></span></p>
- <p class=MsoToc2 style='tab-stops:right dotted 467.5pt'><span style='font-size:
- 12.0pt;mso-hansi-font-family:"Malgun Gothic";mso-bidi-font-family:"Times New Roman";
- color:#009ACD;mso-no-proof:yes'><a href="#_Toc330902782"><span
- style='color:#009ACD;text-decoration:none;text-underline:none'>User Interface<span
- style='display:none;mso-hide:screen'><span style='mso-tab-count:1 dotted'>. </span></span></span><!--[if supportFields]><span
- style='color:#009ACD;display:none;mso-hide:screen;text-decoration:none;
- text-underline:none'><span style='mso-element:field-begin'></span> PAGEREF
- _Toc330902782 \h <span style='mso-element:field-separator'></span></span><![endif]--><span
- style='color:#009ACD;display:none;mso-hide:screen;text-decoration:none;
- text-underline:none'>55<!--[if gte mso 9]><xml>
- <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F00630033003300300039003000320037003800320000000000</w:data>
- </xml><![endif]--></span><!--[if supportFields]><span style='color:#009ACD;
- display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
- style='mso-element:field-end'></span></span><![endif]--></a><o:p></o:p></span></p>
- <p class=MsoToc2 style='tab-stops:right dotted 467.5pt'><span style='font-size:
- 12.0pt;mso-hansi-font-family:"Malgun Gothic";mso-bidi-font-family:"Times New Roman";
- color:#009ACD;mso-no-proof:yes'><a href="#_Toc330902783"><span
- style='color:#009ACD;text-decoration:none;text-underline:none'>Scripting<span
- style='display:none;mso-hide:screen'><span style='mso-tab-count:1 dotted'>. </span></span></span><!--[if supportFields]><span
- style='color:#009ACD;display:none;mso-hide:screen;text-decoration:none;
- text-underline:none'><span style='mso-element:field-begin'></span> PAGEREF
- _Toc330902783 \h <span style='mso-element:field-separator'></span></span><![endif]--><span
- style='color:#009ACD;display:none;mso-hide:screen;text-decoration:none;
- text-underline:none'>65<!--[if gte mso 9]><xml>
- <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F00630033003300300039003000320037003800330000000000</w:data>
- </xml><![endif]--></span><!--[if supportFields]><span style='color:#009ACD;
- display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
- style='mso-element:field-end'></span></span><![endif]--></a><o:p></o:p></span></p>
- <p class=MsoToc2 style='tab-stops:right dotted 467.5pt'><span style='font-size:
- 12.0pt;mso-hansi-font-family:"Malgun Gothic";mso-bidi-font-family:"Times New Roman";
- color:#009ACD;mso-no-proof:yes'><a href="#_Toc330902784"><span
- style='color:#009ACD;text-decoration:none;text-underline:none'>License<span
- style='display:none;mso-hide:screen'><span style='mso-tab-count:1 dotted'>. </span></span></span><!--[if supportFields]><span
- style='color:#009ACD;display:none;mso-hide:screen;text-decoration:none;
- text-underline:none'><span style='mso-element:field-begin'></span> PAGEREF
- _Toc330902784 \h <span style='mso-element:field-separator'></span></span><![endif]--><span
- style='color:#009ACD;display:none;mso-hide:screen;text-decoration:none;
- text-underline:none'>71<!--[if gte mso 9]><xml>
- <w:data>08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F00630033003300300039003000320037003800340000000000</w:data>
- </xml><![endif]--></span><!--[if supportFields]><span style='color:#009ACD;
- display:none;mso-hide:screen;text-decoration:none;text-underline:none'><span
- style='mso-element:field-end'></span></span><![endif]--></a><o:p></o:p></span></p>
- <p class=link><!--[if supportFields]><span style='font-size:12.0pt;mso-hansi-font-family:
- "Malgun Gothic";mso-bidi-font-family:"Times New Roman";color:#009ACD'><span
- style='mso-element:field-end'></span></span><![endif]--><span style='mso-bidi-font-size:
- 12.0pt;mso-bidi-font-family:"Times New Roman";color:#009ACD'><span
- style='mso-tab-count:7'> </span><span
- style='mso-spacerun:yes'> </span><span style='mso-tab-count:4'> </span><o:p></o:p></span></p>
- <p class=link><a name=d3e3a1310></a><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman";color:#00C2FE'><o:p> </o:p></span></p>
- <h2><a name="_Toc330902768">Overview</a></h2>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- gameplay framework is an open-source, cross-platform gaming framework that is
- designed to make it easy to learn to write 3-D mobile and desktop games using
- native C++. In this guide, we cover a top-down approach to teaching you the
- gameplay library, tools, and all the major parts of the APIs that are included
- in the framework. This guide covers a set of the C++ classes that you can use
- to write your games.<o:p></o:p></span></p>
- <h3>Design goals and considerations</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>In
- creating the gameplay framework, the goal was not only to focus on creating a
- high performance native C++ game framework, but also on a clean, simple, and
- elegant architecture. The framework uses a minimal set of cross-platform
- external dependencies and tries to take a minimalist approach to designing the
- classes. This approach allows you to learn from the classes in the library and
- extend the framework to build your own game engine or tools. The framework is a
- good starting block for learning how to write 3-D cross-platform mobile and
- desktop games, allowing you to spend more time designing your game.<o:p></o:p></span></p>
- <h3>Why write another game engine?</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>We
- actually hope it will be considered more of a gaming framework; however, in
- essence, it is really still just the core components of a game engine. There
- are several reasons why the gameplay framework was developed. <o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>First,
- most modern 3-D game engines, while sometimes free or cheap, are closed source.
- Additionally, they usually have licensing fees. The gameplay framework is free,
- open-source software under the Apache 2.0 license. We want more people to learn
- about the fact that cross-platform is a reality and building a good base lets
- you move forward to writing game titles.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Secondly,
- a game engine is not only about rendering. Yes, it</span><span
- style='font-size:12.0pt;font-family:"Times New Roman","serif";mso-ascii-font-family:
- "Malgun Gothic"'>’</span><span style='font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman"'>s a huge part, but equally important are other aspects of
- game engines, such as audio, physics, animation, UI forms, particle emitters,
- scripting, and math. Searching on the web and trying to find information on how
- to fit these things into your game engine, or games, will likely scatter you
- across many different places, with the chance of gaps in your learning. This
- framework will hopefully bring it all together for you.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Lastly,
- mobile is hot! The gameplay framework will have a lot of emphasis on gaming on
- mobile devices. Today, mobile gaming is the largest growing sector of the game
- industry. Additionally, we still provide support for desktop platforms for both
- tooling and gaming. However, we think more focus should be on mobile gaming and
- learning how to write games that can easily target the cross-platform mobile
- sector. <o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <h2><a name="_Toc330902769">Compiling framework</a></h2>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>To
- build the gameplay library, tools, and samples as well as write your own games,
- you will have to install and use the platform specific tools listed below.
- These are the supported development environments for each specific operating
- system as a target platform.<o:p></o:p></span></p>
- <p class=MsoNormal><a name=d4e13a1310></a><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
- style='border-collapse:collapse;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
- <thead>
- <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;height:20.45pt'>
- <td width=205 valign=top style='width:153.45pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt;height:20.45pt'>
- <p class=tableheader style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman";
- mso-bidi-font-weight:normal'>Desktop OS<o:p></o:p></span></p>
- </td>
- <td width=210 valign=top style='width:157.45pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt;height:20.45pt'>
- <p class=tableheader style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman";
- mso-bidi-font-weight:normal'>Tool <o:p></o:p></span></p>
- </td>
- <td width=221 valign=top style='width:165.4pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt;height:20.45pt'>
- <p class=tableheader style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman";
- mso-bidi-font-weight:normal'>Development environment<o:p></o:p></span></p>
- </td>
- </tr>
- </thead>
- <tr style='mso-yfti-irow:1;height:20.45pt'>
- <td width=205 valign=top style='width:153.45pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt;height:20.45pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Microsoft
- Windows 7<o:p></o:p></span></p>
- </td>
- <td width=210 valign=top style='width:157.45pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt;height:20.45pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Visual
- Studio 2010<o:p></o:p></span></p>
- </td>
- <td width=221 valign=top style='width:165.4pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt;height:20.45pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Windows
- 7<o:p></o:p></span></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:2;mso-yfti-lastrow:yes;height:20.45pt'>
- <td width=205 valign=top style='width:153.45pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt;height:20.45pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Apple
- Mac OS X<o:p></o:p></span></p>
- </td>
- <td width=210 valign=top style='width:157.45pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt;height:20.45pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Xcode
- 4.3.2<o:p></o:p></span></p>
- </td>
- <td width=221 valign=top style='width:165.4pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt;height:20.45pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Mac
- OS X<o:p></o:p></span></p>
- </td>
- </tr>
- </table>
- <p class=MsoNormal style='text-align:justify;mso-layout-grid-align:auto;
- text-autospace:ideograph-numeric ideograph-other'><a name=d4e85a1310></a><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
- style='border-collapse:collapse;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
- <thead>
- <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
- <td width=210 valign=top style='width:157.75pt;background:#E6E6E6;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=tableheader style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman";
- mso-bidi-font-weight:normal'>Mobile OS<o:p></o:p></span></p>
- </td>
- <td width=210 valign=top style='width:157.7pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=tableheader style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman";
- mso-bidi-font-weight:normal'>Tool <o:p></o:p></span></p>
- </td>
- <td width=218 valign=top style='width:163.35pt;background:#E6E6E6;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=tableheader style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman";
- mso-bidi-font-weight:normal'>Development environment<o:p></o:p></span></p>
- </td>
- </tr>
- </thead>
- <tr style='mso-yfti-irow:1'>
- <td width=210 valign=top style='width:157.75pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>BlackBerry
- PlayBook OS 2.0<o:p></o:p></span></p>
- </td>
- <td width=210 valign=top style='width:157.7pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>BlackBerry
- Native SDK 2.0<o:p></o:p></span></p>
- </td>
- <td width=218 valign=top style='width:163.35pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Windows
- 7, Mac OS X<o:p></o:p></span></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:2'>
- <td width=210 valign=top style='width:157.75pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Android
- 2.3<o:p></o:p></span></p>
- </td>
- <td width=210 valign=top style='width:157.7pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Android
- NDK 7<o:p></o:p></span></p>
- </td>
- <td width=218 valign=top style='width:163.35pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Windows
- 7, Mac OS X<o:p></o:p></span></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:3;mso-yfti-lastrow:yes'>
- <td width=210 valign=top style='width:157.75pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>iOS
- 5.1<o:p></o:p></span></p>
- </td>
- <td width=210 valign=top style='width:157.7pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Xcode
- 4.3.2<o:p></o:p></span></p>
- </td>
- <td width=218 valign=top style='width:163.35pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Mac
- OS X<o:p></o:p></span></p>
- </td>
- </tr>
- </table>
- <h3>Project repository</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Included
- in the project repository are the following notable folder and files: <o:p></o:p></span></p>
- <p class=MsoNormal><a name=d4e186a1310></a><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
- style='margin-left:.9pt;border-collapse:collapse;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
- <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
- <td width=234 valign=top style='width:175.5pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=tableheader style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman";
- mso-bidi-font-weight:normal'>Folder/Files</span><span style='mso-bidi-font-size:
- 12.0pt;mso-bidi-font-family:"Times New Roman";font-weight:normal'><o:p></o:p></span></p>
- </td>
- <td width=403 valign=top style='width:4.2in;background:#E6E6E6;padding:0in 5.4pt 0in 5.4pt'>
- <p class=tableheader style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman";
- mso-bidi-font-weight:normal'>Description<o:p></o:p></span></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:1'>
- <td width=234 valign=top style='width:175.5pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>/bin<o:p></o:p></span></p>
- </td>
- <td width=403 valign=top style='width:4.2in;background:whitesmoke;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Precompiled
- binary tools<o:p></o:p></span></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:2'>
- <td width=234 valign=top style='width:175.5pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>/external-deps
- <o:p></o:p></span></p>
- </td>
- <td width=403 valign=top style='width:4.2in;background:#E6E6E6;padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>External
- dependency libraries<o:p></o:p></span></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:3'>
- <td width=234 valign=top style='width:175.5pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>/gameplay
- <o:p></o:p></span></p>
- </td>
- <td width=403 valign=top style='width:4.2in;background:whitesmoke;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- gameplay library<o:p></o:p></span></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:4'>
- <td width=234 valign=top style='width:175.5pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>/gameplay-api
- <o:p></o:p></span></p>
- </td>
- <td width=403 valign=top style='width:4.2in;background:#E6E6E6;padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Doxygen
- API Reference<o:p></o:p></span></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:5'>
- <td width=234 valign=top style='width:175.5pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>/gameplay-docs
- <o:p></o:p></span></p>
- </td>
- <td width=403 valign=top style='width:4.2in;background:whitesmoke;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Documentation
- guides and tutorials<o:p></o:p></span></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:6'>
- <td width=234 valign=top style='width:175.5pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>/gameplay-encoder
- <o:p></o:p></span></p>
- </td>
- <td width=403 valign=top style='width:4.2in;background:#E6E6E6;padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Game
- asset/content encoding tool<o:p></o:p></span></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:7;page-break-inside:avoid'>
- <td width=234 valign=top style='width:175.5pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>/gameplay-luagen<o:p></o:p></span></p>
- </td>
- <td width=403 valign=top style='width:4.2in;background:whitesmoke;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Lua
- script bindings generator tool<o:p></o:p></span></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:8;page-break-inside:avoid'>
- <td width=234 valign=top style='width:175.5pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>/gameplay-template<o:p></o:p></span></p>
- </td>
- <td width=403 valign=top style='width:4.2in;background:#E6E6E6;padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Game
- samples template project files<o:p></o:p></span></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:9'>
- <td width=234 valign=top style='width:175.5pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>/gameplay-samples<o:p></o:p></span></p>
- </td>
- <td width=403 valign=top style='width:4.2in;background:whitesmoke;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Game
- samples<o:p></o:p></span></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:10'>
- <td width=234 valign=top style='width:175.5pt;background:#D9D9D9;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>gameplay.xcworkspace<o:p></o:p></span></p>
- </td>
- <td width=403 valign=top style='width:4.2in;background:#D9D9D9;padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Xcode
- workspace<o:p></o:p></span></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:11'>
- <td width=234 valign=top style='width:175.5pt;background:#F2F2F2;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>gameplay.sln<o:p></o:p></span></p>
- </td>
- <td width=403 valign=top style='width:4.2in;background:#F2F2F2;padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Microsoft
- Visual Studio solution<o:p></o:p></span></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:12;mso-yfti-lastrow:yes'>
- <td width=234 valign=top style='width:175.5pt;background:#D9D9D9;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>gameplay-newproject.bat/.sh<o:p></o:p></span></p>
- </td>
- <td width=403 valign=top style='width:4.2in;background:#D9D9D9;padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>New
- cross-platform project script<o:p></o:p></span></p>
- </td>
- </tr>
- </table>
- <h3>Getting started on desktop</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- quickest way to get started using the gameplay framework and tools is to simply
- start working in one of the desktop environments. You could use Microsoft
- Visual Studio 2010 Express, Professional on a Windows 7 operating system, or
- Xcode 4.3.2 on an Apple Mac OS X operating system. Then just open either the
- Microsoft Visual Studio solution or Xcode workspace, and build and run the
- projects. These solutions/workspaces are set up by default to build all the
- projects needed and to run the samples you have selected as active.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Voila!
- You now have one of several simple, interactive samples running on your desktop
- environment, which you can explore and become more familiar with.<o:p></o:p></span></p>
- <h3>Game samples</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- gameplay-docs folder contains additional tutorial documentation for our
- gameplay-samples. These are intended to go into more detail for designing and
- coding games written using the framework. They all have a good starting point
- but have intentionally been left incomplete. This gives you the opportunity to
- change the samples, and complete them to make them more fun to interact and
- play with. They provide good building blocks and are a basis for you to explore
- various features in the framework. You can utilize code snippets from the
- samples to help speed up the development cycle in your own games.<o:p></o:p></span></p>
- <h3>API reference</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>We
- firmly believe in making a very intuitive set of APIs that are as
- straight-forward and as consistent as possible. However, all of the classes in
- the framework have been well documented with Doxygen formatting. The classes
- will be updated and improved iteratively throughout each release. This is to
- help you learn about what classes or sets of functions can be used and the
- recommended practices in using them.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>You
- should consider reading the latest versions of the API reference from the
- pre-generated HTML Doxygen API documentation in the gameplay-api folder. This
- will give you a deeper understanding of the C++ gameplay framework.<o:p></o:p></span></p>
- <h3>Getting started on mobile</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Now
- that you are up and running on one of the desktop environments, we recommend
- you take this seriously and go mobile! In today</span><span style='font-size:
- 12.0pt;font-family:"Times New Roman","serif";mso-ascii-font-family:"Malgun Gothic"'>’</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>s mobile game
- market, cross-platform development is a reality. It is quite simple and easy to
- use the gameplay framework to target a wider device audience. Start by
- downloading the native development kit for one of the various supported mobile
- operating system targets or set them all up. <o:p></o:p></span></p>
- <h3>Mobile setup instructions</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Listed
- below are the basic setup instructions for downloading and installing the
- supported mobile platform and development environments for gameplay.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>BlackBerry
- Native SDK 2.0/10 Beta (PlayBook tablets and BlackBerry 10 devices)</span></b><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p></o:p></span></p>
- <p class=link style='margin-left:.5in;text-align:justify;text-indent:-.25in;
- mso-list:l6 level1 lfo2'><a name=d4e432a1310></a><![if !supportLists]><span
- style='mso-bidi-font-size:12.0pt;mso-fareast-font-family:TradeGothicNextLTPro-Lt'><span
- style='mso-list:Ignore'>1.<span style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><u><span style='font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman";color:blue'><a
- href="https://bdsc.webapps.blackberry.com/native/download/">Download</a> </span></u><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>and
- install the BlackBerry Native SDK 2.0 or BlackBerry 10 Beta<span
- style='mso-tab-count:1'> </span><o:p></o:p></span></p>
- <ol style='margin-top:0in' start=2 type=1>
- <li class=MsoNormal style='text-align:justify;mso-list:l6 level1 lfo2'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Run
- the QNX Momentics IDE (Eclipse CDT based) and click <br>
- <b style='mso-bidi-font-weight:normal'>File > Import > Import
- Existing Projects</b>.<span style='mso-tab-count:2'> </span><o:p></o:p></span></li>
- <li class=MsoNormal style='text-align:justify;mso-list:l6 level1 lfo2'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Import
- all the gameplay projects by selecting the repository project folder.<span
- style='mso-tab-count:2'> </span><o:p></o:p></span></li>
- <li class=MsoNormal style='text-align:justify;mso-list:l6 level1 lfo2'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Set
- the active configuration to one of the Device-XXX or Simulator-XXX
- profiles.<o:p></o:p></span></li>
- <li class=MsoNormal style='text-align:justify;mso-list:l6 level1 lfo2'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Build
- and run any of the game samples.<o:p></o:p></span></li>
- </ol>
- <p class=MsoNormal style='margin-left:.25in;text-indent:-9.0pt'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><span
- style='mso-tab-count:6'> </span><o:p></o:p></span></p>
- <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Apple Xcode
- 4.3.2 (iPad tablets and iPhone devices)</span></b><a name=d4e478a1310></a><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p></o:p></span></p>
- <p class=link style='margin-left:.5in;text-align:justify;text-indent:-.25in;
- mso-list:l7 level1 lfo3'><![if !supportLists]><span style='mso-bidi-font-size:
- 12.0pt;mso-fareast-font-family:TradeGothicNextLTPro-Lt'><span style='mso-list:
- Ignore'>1.<span style='font:7.0pt "Times New Roman"'> </span></span></span><![endif]><u><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman";color:blue'><a
- href="https://developer.apple.com/xcode/">Download</a> </span></u><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>and
- install Apple Xcode 4.<o:p></o:p></span></p>
- <ol style='margin-top:0in' start=2 type=1>
- <li class=MsoNormal style='text-align:justify;mso-list:l7 level1 lfo3'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Open
- the <b style='mso-bidi-font-weight:normal'>gameplay.xc</b> workspace.<o:p></o:p></span></li>
- <li class=MsoNormal style='text-align:justify;mso-list:l7 level1 lfo3'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Change
- the active configuration to <b style='mso-bidi-font-weight:normal'>iOS
- Device</b>, <b style='mso-bidi-font-weight:normal'>iPhone Simulator,</b>
- or <b style='mso-bidi-font-weight:normal'>iPad Simulator</b>.<o:p></o:p></span></li>
- <li class=MsoNormal style='text-align:justify;mso-list:l7 level1 lfo3'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Build
- and run any of the game samples.<o:p></o:p></span></li>
- </ol>
- <p class=MsoNormal style='margin-left:.25in;text-indent:-9.0pt'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Android NDK 7
- (Android tablets and devices)</span></b><a name=d4e517a1310></a><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p></o:p></span></p>
- <p class=link style='margin-left:.5in;text-align:justify;text-indent:-.25in;
- mso-list:l5 level1 lfo4'><![if !supportLists]><span style='mso-bidi-font-size:
- 12.0pt;mso-fareast-font-family:TradeGothicNextLTPro-Lt'><span style='mso-list:
- Ignore'>1.<span style='font:7.0pt "Times New Roman"'> </span></span></span><![endif]><u><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman";color:blue'><a
- href="http://developer.android.com/sdk/ndk/index.html">Download</a> </span></u><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>and
- install Android NDK 7, Android SDK, Apache Ant, and GNU Make for Cygwin. <a
- name=d4e533a1310></a><span style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=link style='margin-left:1.0in;text-align:justify;text-indent:-.25in;
- mso-list:l5 level2 lfo4'><![if !supportLists]><span style='mso-bidi-font-size:
- 12.0pt;mso-fareast-font-family:TradeGothicNextLTPro-Lt'><span style='mso-list:
- Ignore'>a.<span style='font:7.0pt "Times New Roman"'> </span></span></span><![endif]><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Setup
- the </span><u><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman";
- color:blue'><a href="http://developer.android.com/sdk/index.html">Android SDK</a></span></u><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>. <o:p></o:p></span></p>
- <ol style='margin-top:0in' start=1 type=1>
- <ol style='margin-top:0in' start=2 type=a>
- <li class=MsoNormal style='text-align:justify;mso-list:l5 level2 lfo4'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Make
- sure <android-sdk-path>/tools and <android-sdk-path>/platform-tools
- are added to PATH. <o:p></o:p></span></li>
- </ol>
- </ol>
- <p class=link style='margin-left:1.0in;text-align:justify;text-indent:-.25in;
- mso-list:l5 level2 lfo4'><![if !supportLists]><span style='mso-bidi-font-size:
- 12.0pt;mso-fareast-font-family:TradeGothicNextLTPro-Lt'><span style='mso-list:
- Ignore'>c.<span style='font:7.0pt "Times New Roman"'> </span></span></span><![endif]><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Setup
- the </span><u><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman";
- color:blue'><a href="http://developer.android.com/sdk/ndk/index.html">Android
- NDK</a> </span></u><span style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman"'>and </span><u><span style='font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman";color:blue'><a
- href="http://developer.android.com/sdk/ndk/overview.html">follow these
- instructions</a></span></u><span style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman"'>. <o:p></o:p></span></p>
- <ol style='margin-top:0in' start=1 type=1>
- <ol style='margin-top:0in' start=4 type=a>
- <li class=MsoNormal style='text-align:justify;mso-list:l5 level2 lfo4'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Make
- sure <android-ndk-path> is added to PATH. <o:p></o:p></span></li>
- </ol>
- </ol>
- <p class=link style='margin-left:1.0in;text-align:justify;text-indent:-.25in;
- mso-list:l5 level2 lfo4'><![if !supportLists]><span style='mso-bidi-font-size:
- 12.0pt;mso-fareast-font-family:TradeGothicNextLTPro-Lt'><span style='mso-list:
- Ignore'>e.<span style='font:7.0pt "Times New Roman"'> </span></span></span><![endif]><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Install
- </span><u><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman";
- color:blue'><a href="http://ant.apache.org/manual/install.html">Apache Ant</a></span></u><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>. <o:p></o:p></span></p>
- <p class=link style='margin-left:1.0in;text-align:justify;text-indent:-.25in;
- mso-list:l5 level2 lfo4'><![if !supportLists]><span style='mso-bidi-font-size:
- 12.0pt;mso-fareast-font-family:TradeGothicNextLTPro-Lt'><span style='mso-list:
- Ignore'>f.<span style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>Make sure <ant-path>/bin is added
- the PATH.<o:p></o:p></span></p>
- <p class=link style='margin-left:1.0in;text-align:justify;text-indent:-.25in;
- mso-list:l5 level2 lfo4'><![if !supportLists]><span style='mso-bidi-font-size:
- 12.0pt;mso-fareast-font-family:TradeGothicNextLTPro-Lt'><span style='mso-list:
- Ignore'>g.<span style='font:7.0pt "Times New Roman"'> </span></span></span><![endif]><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Install
- </span><u><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman";
- color:blue'><a href="http://cygwin.com/install.html">Cygwin</a> </span></u><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>and
- select and add the package <b style='mso-bidi-font-weight:normal'>make: The GNU
- version of the 'make' utility</b> during installation. <o:p></o:p></span></p>
- <ol style='margin-top:0in' start=1 type=1>
- <ol style='margin-top:0in' start=8 type=a>
- <li class=MsoNormal style='text-align:justify;mso-list:l5 level2 lfo4'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Rename
- <b style='mso-bidi-font-weight:normal'>awk.exe</b> to something else
- (awk_.exe for example) in <android-ndk-path>/prebuilt/windows/bin.
- This is to prevent the Android build system from being confused by the
- cygwin's awk.<span style='mso-tab-count:1'> </span><o:p></o:p></span></li>
- </ol>
- <li class=MsoNormal style='text-align:justify;mso-list:l5 level1 lfo4'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Build
- the gameplay library using following steps: <a name=d4e593a1310></a><span
- style='mso-spacerun:yes'> </span><o:p></o:p></span></li>
- <ol style='margin-top:0in' start=1 type=a>
- <li class=MsoNormal style='text-align:justify;mso-list:l5 level2 lfo4'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Open
- the Cygwin terminal. <o:p></o:p></span></li>
- <li class=MsoNormal style='text-align:justify;mso-list:l5 level2 lfo4'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Change
- to the <b style='mso-bidi-font-weight:normal'><gameplay-root>/gameplay/android</b>
- folder. <o:p></o:p></span></li>
- <li class=MsoNormal style='text-align:justify;mso-list:l5 level2 lfo4'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Run
- the following command to generate the needed files to build the project:<br>
- </span><b style='mso-bidi-font-weight:normal'><span style='font-size:
- 12.0pt;font-family:"Courier New"'>> android.bat update project -t 1 -p
- . -s</span></b><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p></o:p></span></li>
- <li class=MsoNormal style='text-align:justify;mso-list:l5 level2 lfo4'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Run
- the following command to build the gameplay library:<o:p></o:p></span></li>
- </ol>
- </ol>
- <p class=MsoNormal style='margin-left:1.0in'><b style='mso-bidi-font-weight:
- normal'><span style='font-size:12.0pt;font-family:"Courier New"'>> ndk-build</span></b><span
- style='font-size:12.0pt;font-family:"Courier New"'><o:p></o:p></span></p>
- <p class=MsoNormal style='text-indent:1.0in'><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <ol style='margin-top:0in' start=3 type=1>
- <li class=MsoNormal style='text-align:justify;mso-list:l5 level1 lfo4'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Build
- a sample game(s) with following steps: <a name=d4e619a1310></a><span
- style='mso-spacerun:yes'> </span><o:p></o:p></span></li>
- <ol style='margin-top:0in' start=1 type=a>
- <li class=MsoNormal style='text-align:justify;mso-list:l5 level2 lfo4'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Open
- the Cygwin terminal. <o:p></o:p></span></li>
- <li class=MsoNormal style='text-align:justify;mso-list:l5 level2 lfo4'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Change
- to the:<o:p></o:p></span></li>
- </ol>
- </ol>
- <p class=MsoNormal style='margin-left:1.0in;text-align:justify'><b
- style='mso-bidi-font-weight:normal'><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'><gameplay-root/gameplay-samples/sampleXX-XXXXX>/android</span></b><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> folder.<o:p></o:p></span></p>
- <ol style='margin-top:0in' start=3 type=1>
- <ol style='margin-top:0in' start=3 type=a>
- <li class=MsoNormal style='text-align:justify;mso-list:l5 level2 lfo4'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Run
- the following command to generate the needed files to build the project:<br>
- </span><b style='mso-bidi-font-weight:normal'><span style='font-size:
- 12.0pt;font-family:"Courier New"'>> android.bat update project -t 1 -p
- . -s</span></b><span style='font-size:12.0pt;font-family:"Courier New"'> </span><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p></o:p></span></li>
- <li class=MsoNormal style='text-align:justify;mso-list:l5 level2 lfo4'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Run
- the following command to build the gameplay sample:<br>
- </span><b style='mso-bidi-font-weight:normal'><span style='font-size:
- 12.0pt;font-family:"Courier New"'>> ndk-build </span></b><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p></o:p></span></li>
- </ol>
- </ol>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <h4 style='margin-left:.5in'>Android NDK permissions errors:</h4>
- <p class=MsoNormal style='margin-left:.5in'><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>If you see an error like </span><span
- style='font-size:12.0pt;font-family:"Courier New"'>"./obj/local/armeabi/libpng.a:
- No such file: Permission denied",</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'> make sure that the </span><span
- style='font-size:12.0pt;font-family:"Courier New"'>"*.a" </span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>files have read
- permission by running:<o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:.5in'><b style='mso-bidi-font-weight:
- normal'><span style='font-size:12.0pt;font-family:"Courier New"'>> chmod +r
- obj/local/armeabi/*.a</span></b><b style='mso-bidi-font-weight:normal'><span
- style='font-size:12.0pt;mso-bidi-font-family:"Courier New"'><o:p></o:p></span></b></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <ol style='margin-top:0in' start=4 type=1>
- <li class=MsoNormal style='text-align:justify;mso-list:l5 level1 lfo4'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Connect
- the device and run the following command in the Cygwin terminal to deploy
- the game:<br>
- </span><b style='mso-bidi-font-weight:normal'><span style='font-size:12.0pt;
- font-family:"Courier New"'>> ant debug install</span></b><span
- style='font-size:12.0pt;font-family:"Courier New"'> </span><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p></o:p></span></li>
- </ol>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <h3>Mobile platform considerations</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Ensure
- that you test early on the physical devices. Depending on the type of game you
- want to write and on your design ideas, you</span><span style='font-size:12.0pt;
- font-family:"Times New Roman","serif";mso-ascii-font-family:"Malgun Gothic"'>’</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>ll want to get
- some idea of what type of performance you</span><span style='font-size:12.0pt;
- font-family:"Times New Roman","serif";mso-ascii-font-family:"Malgun Gothic"'>’</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>ll get with the
- game plan and prototypes you are working towards. Be careful and do not to rely
- on desktop and mobile simulators as an indicator of performance or mobile
- device capabilities.<o:p></o:p></span></p>
- <h3>Game consoles and Linux distributions</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- gameplay framework can be extended to target game consoles and custom Linux distributions.
- Currently there is no support for these systems, however<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Linux
- support will be coming soon.<o:p></o:p></span></p>
- <h3>Creating new projects</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>To
- create a new cross-platform game project, run the gameplay-newproject.bat/.sh
- script. The following is an example of running the gameplay-newproject.bat
- script:<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>1. Enter
- a name for the new project.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>This name will be given to the project<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>executable and a folder with this name<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>will be created to store all project files.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>Project
- name: test<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>2. Enter
- a game title.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>On some platforms, this title is used to<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>identify the game during installation and<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>on shortcuts/icons.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>Title:
- Test<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>3. Enter
- a short game description.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>Description:
- Test Game<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>4. Enter
- a unique identifier for your project.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>This should be a human readable package
- name,<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>containing at least two words separated by a<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>period (eg. com.surname.gamename).<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>Unique
- ID: org.gameplay3d.test<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>5. Enter
- author name.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>On BlackBerry targets, this is used for<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>signing and must match the developer name<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>of your development certificate.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>Author:
- My Company<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>6. Enter
- your game's main class name.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>Your initial game header and source file<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>will be given this name and a class with<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>this name will be created in these files.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>Class
- name: TestGame<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>7. Enter
- the project path.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>This can be a relative path, absolute path,<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>or empty for the current folder. Note that<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>a project folder named test will also<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>be created inside this folder.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>Path:
- gameplay-samples<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>1 file copied.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>...<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- simplest way to run the project on Windows is to add the Visual Studio project
- to the existing gameplay.sln solution, set the "gameplay" project as
- a dependency (right-click on the new project, click "Project Dependencies…",
- and select the "gameplay" project), and then build and run.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Similarly,
- the easiest way to run the project on BlackBerry is import the new project into
- a QNX Momentics IDE workspace that already contains the gameplay project, set
- the "gameplay" project as a dependency (right-click the new project,
- click "Properties", go to "Project References", and select
- the "gameplay" project), and then build and run. (Note: make sure
- that both projects are set to the same Build Configuration.) <o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>To
- run the project on Mac, simply open the Xcode project and build and run.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal style='text-align:justify'><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>To run the project on Android from
- Windows, use the </span><span style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman"'>steps described above for running the samples.</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p></o:p></span></p>
- <h2><a name="_Toc330902770">Assets and authoring</a></h2>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Game
- assets are extremely important for the quality of a good game. Not only do the
- game assets need to be fitted for the game design, but they also need to load
- as quickly as possible and at the highest quality within the platform hardware
- limitations.<o:p></o:p></span></p>
- <h3>Binary game assets</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>A
- very practical way to ensure that you</span><span style='font-size:12.0pt;
- font-family:"Times New Roman","serif";mso-ascii-font-family:"Malgun Gothic"'>’</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>re being
- efficient is to always bundle and load all your game assets as binary formats.
- Common assets include images, fonts, audio, and 3-D scenes. Most game engines
- will always include some sort of authoring tool to allow developers to encode
- and process their content to be game-ready. The gameplay framework also
- includes an executable tool for this called the gameplay-encoder.<o:p></o:p></span></p>
- <h3>Using fonts and 3-D scenes</h3>
- <p class=link><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>For
- fonts and 3-D scenes, you will want to support industry-standard file formats,
- such as <u><span style='color:blue'><a
- href="http://en.wikipedia.org/wiki/TrueType">TrueType</a> </span></u>for fonts
- and popular modern 3-D scene formats such as <u><span style='color:blue'><a
- href="https://collada.org/mediawiki/index.php/COLLADA_-_Digital_Asset_and_FX_Exchange_Schema">COLLADA</a>
- </span></u>and the <u><span style='color:blue'><a
- href="http://usa.autodesk.com/adsk/servlet/pc/index?id=6837478&amp;siteID=123112">FBX</a>
- </span></u>formats. <o:p></o:p></span></p>
- <p class=link><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=link><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Although
- these formats are popular and have the widest support in tooling options, they
- are not considered efficient runtime formats. The gameplay library requires
- that you convert these formats to its documented <u><span style='color:blue'><a
- href="https://github.com/blackberry/GamePlay/blob/master/gameplay-encoder/gameplay-bundle.txt">gameplay
- bundle format (.gpb)</a> </span></u>using the gameplay-encoder executable.<o:p></o:p></span></p>
- <h3>Pre-built gameplay-encoder tool</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- gameplay-encoder executable tool comes pre-built for Windows 7 and Mac OS X and
- can be found in the </span><b style='mso-bidi-font-weight:normal'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><gameplay-root>/bin</span></b><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>
- folders. The general usage is:<o:p></o:p></span></p>
- <p class=MsoNormal><span style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>>gameplay-encoder
- <options> files<o:p></o:p></span></p>
- <h3>Building gameplay-encoder</h3>
- <p class=MsoNormal>Even though the gameplay-encoder tool comes pre-built, you
- make want to customize it and built it again yourself. To build the
- gameplay-encoder project, open the gameplay-encoder project in Visual Studio or
- XCode and build the executable. </p>
- <h3>Building support for the FBX format</h3>
- <p class=link><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Although
- the FBX format is supported by the gameplay-encoder tools, FBX is not allowed
- to be re-distributed as part of our framework. However, it is free for you to
- use. Simply download the <u><span style='color:blue'><a
- href="http://usa.autodesk.com/adsk/servlet/pc/index?id=6837478&amp;siteID=123112">FBX
- SDK</a> </span></u>and then re-build the code in the gameplay-encoder using the
- USE_FBX preprocessor directive and ensure that you include the header and
- library paths in the project to the FBX SDK paths.<o:p></o:p></span></p>
- <h3>Content pipeline</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- content pipeline for fonts and scenes works like this:<a name=d5e88a1310></a><o:p></o:p></span></p>
- <ol style='margin-top:0in' start=1 type=1>
- <li class=MsoNormal style='text-align:justify;mso-list:l1 level1 lfo5'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Take
- any TrueType fonts or COLLADA/FBX scene files.<span style='mso-tab-count:
- 2'> </span><o:p></o:p></span></li>
- <li class=MsoNormal style='text-align:justify;mso-list:l1 level1 lfo5'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Run
- the gameplay-encoder executable passing in the font or scene file path and
- optional parameters to produce a gameplay binary version for the file (.gpb).<span
- style='mso-tab-count:2'> </span><o:p></o:p></span></li>
- <li class=MsoNormal style='text-align:justify;mso-list:l1 level1 lfo5'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Bundle
- your game and include the gameplay binary file as a binary game asset.<o:p></o:p></span></li>
- <li class=MsoNormal style='text-align:justify;mso-list:l1 level1 lfo5'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Load
- any binary game assets using the </span><span style='mso-bidi-font-size:
- 12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Bundle</span><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>
- class.</span><span style='mso-tab-count:3'> </span><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p></o:p></span></li>
- </ol>
- <h3>Using binary bundles</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Use
- the </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>gameplay::Bundle</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'> class from your C++ game source code
- to load your encoded binary files as bundles. The class offers methods to load
- both fonts and scenes. Scenes are loaded as a hierarchical structure of nodes,
- with various entities attached to them. These entities include things like mesh
- geometry or groups of meshes, and cameras and lights. The </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Bundle</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> class also has
- methods to filter only the parts of a scene that you want to load.<o:p></o:p></span></p>
- <h3>Release mode assets</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>When
- releasing your game title, all of the images should be optimized and converted
- to the compressed texture format that is supported by OpenGL (ES). Audio should
- be encoded to save space on storage. <a name=d6e3a1310></a><o:p></o:p></span></p>
- <h2><a name="_Toc330902771">Game</a></h2>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>gameplay::Game</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'> class is the base class for all your
- games created with the gameplay framework. You are required to extend this
- class using C++ and to override the core game and lifecycle event methods
- initialize, finalize, update, and render. This is where you</span><span
- style='font-size:12.0pt;font-family:"Times New Roman","serif";mso-ascii-font-family:
- "Malgun Gothic"'>’</span><span style='font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman"'>ll write your code to load the game assets and apply game
- logic and rendering code. Under the hood, the game class will receive events
- and act as an abstraction between the running game and the underlying platform
- layer that is running the game loop and reacting to operating systems. <o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>There
- are four methods you must implement to get started in writing your own game: <o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <pre style='background:white'><span style='font-family:Consolas;color:blue'>#include</span><span
- style='font-family:Consolas;color:black'> </span><span style='font-family:
- Consolas;color:#A31515'>"gameplay.h"</span><span style='font-family:
- Consolas;color:black'><o:p></o:p></span></pre>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'><span
- style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:blue'>using</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> </span><span
- style='font-size:10.0pt;font-family:Consolas;color:blue'>namespace</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> gameplay;<o:p></o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'><span
- style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:blue'>class</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> MyGame : </span><span
- style='font-size:10.0pt;font-family:Consolas;color:blue'>public</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> Game<o:p></o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'>{<o:p></o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> </span><span
- style='font-size:10.0pt;font-family:Consolas;color:blue'>void</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> initialize();<o:p></o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> </span><span
- style='font-size:10.0pt;font-family:Consolas;color:blue'>void</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> finalize();<span
- style='mso-tab-count:1'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> </span><span
- style='font-size:10.0pt;font-family:Consolas;color:blue'>void</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> update(</span><span
- style='font-size:10.0pt;font-family:Consolas;color:blue'>float</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> elapsedTime);<o:p></o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> </span><span
- style='font-size:10.0pt;font-family:Consolas;color:blue'>void</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> render(</span><span
- style='font-size:10.0pt;font-family:Consolas;color:blue'>float</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> elapsedTime);<o:p></o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'>};<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>Game::initialize()</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'> and </span><span style='font-size:
- 12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>Game::finalize()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> methods are
- called when the game starts up and shuts down, respectively. They are the
- methods to which you</span><span style='font-size:12.0pt;font-family:"Times New Roman","serif";
- mso-ascii-font-family:"Malgun Gothic"'>’</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>ll add code to load your game assets
- and cleanup when the game has ended. The </span><span style='font-size:12.0pt;
- font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>Game::update()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> and </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>Game::render()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> methods are
- called once per frame from the game loop implemented in the </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Platform</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> for each
- operating system. This allows you to separate the code between handling updates
- to your game</span><span style='font-size:12.0pt;font-family:"Times New Roman","serif";
- mso-ascii-font-family:"Malgun Gothic"'>’</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>s state and rendering your game</span><span
- style='font-size:12.0pt;font-family:"Times New Roman","serif";mso-ascii-font-family:
- "Malgun Gothic"'>’</span><span style='font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman"'>s visuals. You can use a variety of built-in classes to help
- with the game rendering.<o:p></o:p></span></p>
- <h3>Accessing the game instance</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>gameplay::Game</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'> class can be accessed from anywhere in
- your game code. It implements a singleton design pattern. Call the static
- method </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>Game::getInstance()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> to gain access
- to the instance of your game from any code. <o:p></o:p></span></p>
- <h3>Graphics and audio devices</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>After
- your game has started, the underlying graphics and audio devices will
- automatically initialize. This happens prior to the </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>Game::initialize()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> method being
- called and readies any classes that use OpenGL (ES) 2.0 or Open AL 1.1. The
- graphics devices of your </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>Game</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'> will be set up with a default 32-bit
- color frame buffer, a 24-bit depth buffer, and an 8-bit stencil buffer ready
- for your use. These are the active graphics hardware buffers, which are
- rendered into from your rendering code. <o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>For
- more advanced usage, you can apply alternative frame buffers using the </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::FrameBuffer</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> class.
- Immediately after the </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>Game::render()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> method, the
- frame buffer is swapped/presented to the physical display for the user to see.
- You can invoke the </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>Game::clear()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> method to
- clear the buffers through any of the methods. You can also call </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>Game::renderOnce()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> from code,
- such as from the </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>Game::initialize()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> method, to
- callback onto a method that will be called only once and then swapped/presented
- to the display. This is useful for presenting ad-hoc updates to the screen
- during initialization for rendering, such as loading screens.<o:p></o:p></span></p>
- <h3>Game sub-system controllers</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>gameplay::Game</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'> class also manages game sub-system
- controllers, such as audio, animation and physics controllers, and provides
- access to them directly using getter methods. These classes act as controlling
- interfaces for managing and playing audio and animations that are active in the
- game, as well as updates to dynamics in the physics systems. These controllers
- are hosted by the </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>gameplay::Game</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> class and
- react on lifecycle events being handled in the game.<o:p></o:p></span></p>
- <h3>Game time and state</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Once
- the instance of a </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>gameplay::Game</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> class has
- started, the game starts a running time. You can call the </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>Game::getGameTime()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> to determine
- how long a game has been running. You can also call </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>Game::getAbsoluteTime()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> to determine
- the absolute time that has elapsed since the first </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>Game::run()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> call. This
- includes any paused time too. You can call the </span><span style='font-size:
- 12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>Game::pause()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> method and the
- game will be put into the </span><span style='font-size:12.0pt;font-family:
- "Courier New";mso-bidi-font-family:"Times New Roman"'>Game::PAUSED</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> state. If the
- user on the platform puts the game into the background, the game time is also
- paused. If the user puts the game back into the foreground, the game will
- invoke </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>Game::play()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> and the game
- will resume. At any time in the game you can determine the game state by
- calling </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>Game::getState()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>. The game
- state can be UNINITIALIZED, RUNNING or PAUSED.<a name=d7e3a1310></a><o:p></o:p></span></p>
- <h2><a name="_Toc330902772">Input and sensors</a></h2>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>By
- creating your game and extending </span><span style='font-size:12.0pt;
- font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Game</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>, you</span><span
- style='font-size:12.0pt;font-family:"Times New Roman","serif";mso-ascii-font-family:
- "Malgun Gothic"'>’</span><span style='font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman"'>ll be able to add all the required handlers of input events.
- Additionally, there are methods on </span><span style='font-size:12.0pt;
- font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Game</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> to poll for
- the current sensor data. This architecture insulates you, as a developer, from
- the platform-specific details on handling keyboard, touch and mouse events, and
- from polling the accelerometer state. The following illustrates overridden
- methods to handle input events:<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <pre style='background:white'><span style='font-family:Consolas;color:blue'>#include</span><span
- style='font-family:Consolas;color:black'> </span><span style='font-family:
- Consolas;color:#A31515'>"gameplay.h"</span><span style='font-family:
- Consolas;color:black'><o:p></o:p></span></pre><pre style='background:white'><span
- style='font-family:Consolas;color:black'> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:blue'>using</span><span
- style='font-family:Consolas;color:black'> </span><span style='font-family:
- Consolas;color:blue'>namespace</span><span style='font-family:Consolas;
- color:black'> gameplay;<o:p></o:p></span></pre><pre style='background:
- white'><span style='font-family:Consolas;color:black'> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:blue'>class</span><span
- style='font-family:Consolas;color:black'> MyGame : </span><span
- style='font-family:Consolas;color:blue'>public</span><span style='font-family:
- Consolas;color:black'> Game<o:p></o:p></span></pre><pre style='background:
- white'><span style='font-family:Consolas;color:black'>{<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> ...<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:blue'>void</span><span style='font-family:
- Consolas;color:black'> keyEvent(Keyboard::KeyEvent evt, </span><span
- style='font-family:Consolas;color:blue'>int</span><span style='font-family:
- Consolas;color:black'> key);<o:p></o:p></span></pre><pre style='background:
- white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:blue'>void</span><span style='font-family:
- Consolas;color:black'> touchEvent(Touch::TouchEvent evt, </span><span
- style='font-family:Consolas;color:blue'>int</span><span style='font-family:
- Consolas;color:black'> x, </span><span style='font-family:Consolas;
- color:blue'>int</span><span style='font-family:Consolas;color:black'> y, </span><span
- style='font-family:Consolas;color:blue'>unsigned</span><span style='font-family:
- Consolas;color:black'> </span><span style='font-family:Consolas;
- color:blue'>int</span><span style='font-family:Consolas;color:black'> contactIndex);<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:blue'>bool</span><span style='font-family:
- Consolas;color:black'> mouseEvent(Mouse::MouseEvent evt, </span><span
- style='font-family:Consolas;color:blue'>int</span><span style='font-family:
- Consolas;color:black'> x, </span><span style='font-family:Consolas;
- color:blue'>int</span><span style='font-family:Consolas;color:black'> y);<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:blue'>void</span><span style='font-family:
- Consolas;color:black'> getAccelerometerValues(</span><span
- style='font-family:Consolas;color:blue'>float</span><span style='font-family:
- Consolas;color:black'>* pitch, </span><span style='font-family:Consolas;
- color:blue'>float</span><span style='font-family:Consolas;color:black'>* roll); <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>};<o:p></o:p></span></pre>
- <h3>Handling input events</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>You
- have the opportunity, on either desktop platforms or mobile devices, to handle
- mouse events uniquely from the </span><span style='font-size:12.0pt;font-family:
- "Courier New";mso-bidi-font-family:"Times New Roman"'>Game::touchEvent()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> method (this
- includes support for a Bluetooth enabled mouse). However, this is not required,
- and the default implementation of the </span><span style='font-size:12.0pt;
- font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>Game::mouseEvent()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> method returns
- </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>false</span><span style='font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman"'>, which means that the user can allow mouse events to be
- treated automatically as touch events.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>You
- can decide to disable multi-touch support for games when you do not want this
- functionality. You can call </span><span style='font-size:12.0pt;font-family:
- "Courier New";mso-bidi-font-family:"Times New Roman"'>Game::setMultiTouch()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> and pass in </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>false</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> to ensure that
- the platform treats and handles touch events as single touches.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>You
- can also call </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>Game::displayKeyboard()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> to show or
- hide a virtual keyboard for platforms that support it. You</span><span
- style='font-size:12.0pt;font-family:"Times New Roman","serif";mso-ascii-font-family:
- "Malgun Gothic"'>’</span><span style='font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman"'>ll want to integrate it into points in the game and user
- interfaces in the game where text input is required.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>You
- can call </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>Game::getAccelerometerValues()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> and pass in
- pointers to parameters that will be populated with the current sensor values
- for the accelerometer.<a name=d8e3a1310></a><o:p></o:p></span></p>
- <h2><a name="_Toc330902773">Sprites and fonts</a></h2>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Use
- the </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>gameplay::SpriteBatch</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'> and </span><span style='font-size:
- 12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Font</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> classes to
- integrate simple 2-D sprite and text rendering for both 2-D and 3-D games. <o:p></o:p></span></p>
- <h3>Binary encoding fonts</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- first thing to do is to create or find a TrueType font that you want to use.
- There are a number of sites on the web that offer .TTF files to purchase, or
- tools to make them yourself.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Next,
- you</span><span style='font-size:12.0pt;font-family:"Times New Roman","serif";
- mso-ascii-font-family:"Malgun Gothic"'>’</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>ll want to binary encode your TrueType
- font to a binary format via gameplay-encoder to produce a binary file. To do
- this run the following command with your gameplay-encoder executable:<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>> gameplay-encoder
- -s 28 airstrip.ttf<o:p></o:p></span></p>
- <h3>Drawing text and images</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- following code sample illustrates how to render and image and text together:<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <pre style='background:white'><span style='font-family:Consolas;color:blue'>void</span><span
- style='font-family:Consolas;color:black'> MyGame::initialize()<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>{<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:green'>// Create your sprite batch and font and associate resources</span><span
- style='font-family:Consolas;color:black'><o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> _batch = SpriteBatch::create(</span><span
- style='font-family:Consolas;color:#A31515'>"res/image.png"</span><span
- style='font-family:Consolas;color:black'>);<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> _font = Font::create(</span><span
- style='font-family:Consolas;color:#A31515'>"res/airstrip28.gpb"</span><span
- style='font-family:Consolas;color:black'>);<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>}<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:blue'>void</span><span
- style='font-family:Consolas;color:black'> MyGame::render(</span><span
- style='font-family:Consolas;color:blue'>float</span><span style='font-family:
- Consolas;color:black'> elapsedTime)<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>{<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:green'>// Clear the frame buffer</span><span
- style='font-family:Consolas;color:black'><o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> clear(CLEAR_COLOR_DEPTH, Vector4(0, 0, 0, 1), 1.0f, 0);<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:green'>// Draw your sprites (we will only draw one now</span><span
- style='font-family:Consolas;color:black'><o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> _batch->begin();<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> _batch->draw(Rectangle(0, 0, WINDOW_WIDTH, WINDOW_HEIGHT), <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> Rectangle(0, 0, WINDOW_WIDTH, WINDOW_HEIGHT), Vector4::one());<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> _batch->end();<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:green'>// Draw the text at position 20,20 using red color</span><span
- style='font-family:Consolas;color:black'><o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> _font->begin();<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:blue'>char</span><span style='font-family:
- Consolas;color:black'> text[1024];<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> sprintf(text, </span><span
- style='font-family:Consolas;color:#A31515'>"FPS:%d"</span><span
- style='font-family:Consolas;color:black'>, Game::getFrameRate());<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> _font->drawText(</span><span
- style='font-family:Consolas;color:#A31515'>"Game 20, 20, Vector4(1, 0, 0, 1), _font->getSize());</span><span
- style='font-family:Consolas;color:black'><o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> _font->end();<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>}<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:blue'>void</span><span
- style='font-family:Consolas;color:black'> MyGame::finalize()<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>{<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:green'>// Use built-in macros to clean up our resources.</span><span
- style='font-family:Consolas;color:black'><o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> SAFE_DELETE(_batch);<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> SAFE_DELETE(_font);<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>}<o:p></o:p></span></pre>
- <h3>Batch, batch, batch</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>You</span><span
- style='font-size:12.0pt;font-family:"Times New Roman","serif";mso-ascii-font-family:
- "Malgun Gothic"'>’</span><span style='font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman"'>ll notice that the </span><span style='font-size:12.0pt;
- font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::SpritchBatch</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> and </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Font</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> code sequences
- above both have a common flow to them. The developer performs a call to </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>begin()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> followed by
- drawing operations and finishing with a call to </span><span style='font-size:
- 12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>end()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>. This is to
- support batching or combining drawing operations into a single hardware
- rendering call.<a name=d9e3a1310></a><o:p></o:p></span></p>
- <h2><a name="_Toc330902774">Scene and nodes</a></h2>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>At
- the heart of any game is a visual scene. Using the </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Scene</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> class, you can
- create and retain a rich 3-D scene for organizing visual, audio, animation and
- physics components in your game.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>gameplay::Scene</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'> class is based on a hierarchical data
- structure that is often referred to as a scene graph. Using the </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Scene</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> and </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Node</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> classes, you
- can build up a game level by attaching various game components to the nodes in
- the scene. The node will maintain the transformation for any attachments. As a
- basic example, a scene might have two nodes. The first node could have a </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Camera</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> attached to it
- and the second node could have a </span><span style='font-size:12.0pt;
- font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Model</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> attached to
- it. The </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>gameplay::Scene</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> will have the
- camera set as the active camera. You could then transform either/both of the
- nodes to change the player</span><span style='font-size:12.0pt;font-family:
- "Times New Roman","serif";mso-ascii-font-family:"Malgun Gothic"'>’</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>s perspective
- on what they will see in the game.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>There
- are a variety of components you can attach to the </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Node</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> class:<o:p></o:p></span></p>
- <p class=MsoNormal><a name=d9e44a1310></a><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
- style='border-collapse:collapse;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
- <thead>
- <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
- <td width=301 valign=top style='width:225.9pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=tableheader style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman";
- mso-bidi-font-weight:normal'>Component<o:p></o:p></span></p>
- </td>
- <td width=337 valign=top style='width:252.9pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=tableheader style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman";
- mso-bidi-font-weight:normal'>Description<o:p></o:p></span></p>
- </td>
- </tr>
- </thead>
- <tr style='mso-yfti-irow:1'>
- <td width=301 valign=top style='width:225.9pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>gameplay::Model</span><span style='mso-bidi-font-size:
- 12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p></o:p></span></p>
- </td>
- <td width=337 valign=top style='width:252.9pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Used
- to represent the mesh/geometry in the scene.<o:p></o:p></span></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:2'>
- <td width=301 valign=top style='width:225.9pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>gameplay::Camera</span><span style='mso-bidi-font-size:
- 12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p></o:p></span></p>
- </td>
- <td width=337 valign=top style='width:252.9pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Used
- to represent a view/perspective into the scene.<o:p></o:p></span></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:3'>
- <td width=301 valign=top style='width:225.9pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>gameplay::Light</span><span style='mso-bidi-font-size:
- 12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p></o:p></span></p>
- </td>
- <td width=337 valign=top style='width:252.9pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Used
- to hold lighting information that can affect how a </span><span
- style='mso-bidi-font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>Model</span><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'> is rendered.<o:p></o:p></span></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:4'>
- <td width=301 valign=top style='width:225.9pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>gameplay::PhysicsCollisionObject</span><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p></o:p></span></p>
- </td>
- <td width=337 valign=top style='width:252.9pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Used
- to define the basic physics dynamics that will be simulated.<o:p></o:p></span></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:5'>
- <td width=301 valign=top style='width:225.9pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>gameplay::ParticleEmitter</span><span style='mso-bidi-font-size:
- 12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p></o:p></span></p>
- </td>
- <td width=337 valign=top style='width:252.9pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Used
- to represent smoke, steam, fire and other atmospheric effects.<o:p></o:p></span></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:6;mso-yfti-lastrow:yes'>
- <td width=301 valign=top style='width:225.9pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>gameplay::AudioSource</span><span style='mso-bidi-font-size:
- 12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p></o:p></span></p>
- </td>
- <td width=337 valign=top style='width:252.9pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Use
- to represent a source where audio is being played from.<o:p></o:p></span></p>
- </td>
- </tr>
- </table>
- <p class=MsoNormal style='text-align:justify;mso-layout-grid-align:auto;
- text-autospace:ideograph-numeric ideograph-other'><span style='mso-bidi-font-size:
- 12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal style='text-align:justify;mso-layout-grid-align:auto;
- text-autospace:ideograph-numeric ideograph-other'><span style='mso-bidi-font-size:
- 12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>A
- typical flow will have you loading/building a large scene representing all the
- components needed in the game level. This is done once during </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>Game::initialize()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>. For every
- call to the </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>Game::update()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> method, the
- code will update changes to the nodes and attached components based on events
- such as user input . Then the application will traverse the scene and render
- the parts in the scene that are visible from scene's active camera.<o:p></o:p></span></p>
- <h3>Exporting a 3-D scene from Autodesk Maya/Max</h3>
- <p class=link><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>If
- you want to export 3-D scenes, use the native FBX Export (for FBX) or DAE_FBX
- Export (for COLLADA). <o:p></o:p></span></p>
- <p class=link><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=link><span style='mso-no-proof:yes'><!--[if gte vml 1]><v:shape id="Picture_x0020_1"
- o:spid="_x0000_i1026" type="#_x0000_t75" style='width:455.25pt;height:311.25pt;
- visibility:visible'>
- <v:imagedata src="development-guide_files/image003.png" o:title=""/>
- </v:shape><![endif]--><![if !vml]><img border=0 width=607 height=415
- src="development-guide_files/image004.jpg" v:shapes="Picture_x0020_1"><![endif]></span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <h3>Exporting a 3-D scene from Blender</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Blender
- supports exporting to the COLLADA and FBX file formats. <o:p></o:p></span></p>
- <p class=MsoNormal><a name=d9e229a1310></a><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'><span style='mso-tab-count:2'> </span></span><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><span
- style='mso-tab-count:1'> </span></span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:21.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><b style='mso-bidi-font-weight:normal'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>File >
- Export > Autodesk FBX (.fbx)</span></b><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:21.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><b style='mso-bidi-font-weight:normal'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>File
- > Export > COLLADA (.dae)</span></b><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'><span style='mso-tab-count:1'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:.25in;text-indent:-9.0pt'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><span
- style='mso-tab-count:6'> </span><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>If
- you run into problems when using COLLADA files from Blender, try re-importing
- the COLLADA file back into Blender or Maya software to see if there is a
- problem with the exported model.<o:p></o:p></span></p>
- <h3>Binary encoding a scene</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Run
- gameplay-encoder with no arguments to see the usage information and supported
- arguments.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>Usage:
- gameplay-encoder [options] <i style='mso-bidi-font-style:normal'><filepath></i><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Example</span></b><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Convert
- the COLLADA file duck.dae into gameplay binary file duck.gpb.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>> gameplay-encoder
- duck.dae<o:p></o:p></span></p>
- <h3>Encoding an FBX file</h3>
- <p class=link><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>To
- convert an FBX file to a gameplay binary file, you must install the FBX SDK and
- set the preprocessor directive USE_FBX. See the instructions in the <u><span
- style='color:blue'>gameplay-encoder README </span></u>on GitHub.<o:p></o:p></span></p>
- <h3>Loading a scene</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Using
- the </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>gameplay::Bundle</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'> class, you can load either an entire
- scene or various parts of a scene into any existing scene. The </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Bundle</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> parses the
- binary file and de-serializes the objects from the file so that you can use
- them in your game. <o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Here
- is an example of loading a simple scene containing a model of a duck, a light,
- and a camera from a gameplay binary file:<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <pre style='background:white'><span style='font-family:Consolas;color:blue'>void</span><span
- style='font-family:Consolas;color:black'> MeshGame::initialize()<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>{<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:green'>// Load the scene from our gameplay binary file</span><span
- style='font-family:Consolas;color:black'><o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> Bundle* bundle = Bundle::create(</span><span
- style='font-family:Consolas;color:#A31515'>"res/duck.gpb"</span><span
- style='font-family:Consolas;color:black'>);<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> Scene* scene = bundle->loadScene();<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> SAFE_RELEASE(bundle);<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:green'>// Get handles to the nodes of interest in the scene</span><span
- style='font-family:Consolas;color:black'><o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> _modelNode = scene->findNode(</span><span
- style='font-family:Consolas;color:#A31515'>"duck"</span><span
- style='font-family:Consolas;color:black'>);<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> Node* _lightNode = scene->findNode(</span><span
- style='font-family:Consolas;color:#A31515'>"directionalLight1"</span><span
- style='font-family:Consolas;color:black'>);<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> Node* _cameraNode = scene->findNode(</span><span
- style='font-family:Consolas;color:#A31515'>"camera1"</span><span
- style='font-family:Consolas;color:black'>);<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:green'>// More initialization ...</span><span
- style='font-family:Consolas;color:black'><o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>}<o:p></o:p></span></pre>
- <h3>Updating a scene</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>After
- handling input events or polling the sensors, it</span><span style='font-size:
- 12.0pt;font-family:"Times New Roman","serif";mso-ascii-font-family:"Malgun Gothic"'>’</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>s time to
- update the scene. It is very important to understand the scene representing
- your game level. We always want to update things that are impacted by the
- changes to optimize performance. In order to optimize the performance of your
- game, it is essential that you only update objects that need to be changed. In
- this example, we</span><span style='font-size:12.0pt;font-family:"Times New Roman","serif";
- mso-ascii-font-family:"Malgun Gothic"'>’</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>ll apply a rotation when the user has
- touched the screen or mouse button:<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <pre style='background:white'><span style='font-family:Consolas;color:blue'>void</span><span
- style='font-family:Consolas;color:black'> MyGame::update(</span><span
- style='font-family:Consolas;color:blue'>float</span><span style='font-family:
- Consolas;color:black'> elapsedTime)<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>{<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:green'>// Rotate the model</span><span
- style='font-family:Consolas;color:black'><o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:blue'>if</span><span style='font-family:Consolas;
- color:black'> (!_touched)<o:p></o:p></span></pre>
- <p class=MsoNormal style='mso-pagination:widow-orphan'><span style='font-family:
- Consolas;color:black'> _modelNode->rotateY(elapsedTime
- * MATH_DEG_TO_RAD(0.05f));</span><span style='font-size:9.5pt;font-family:Consolas'><o:p></o:p></span></p>
- <pre style='background:white'><span style='font-family:Consolas;color:black'>);<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>}<o:p></o:p></span></pre>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Some
- examples of typical things you will want to update in your scene may include:<o:p></o:p></span></p>
- <p class=MsoNormal><a name=d9e350a1310></a><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal style='margin-left:21.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman"'>applying forces onto rigid bodies<span style='mso-tab-count:
- 2'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:21.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman"'>applying transformations<span style='mso-tab-count:2'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:21.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman"'>starting or stopping animations<span style='mso-tab-count:
- 2'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:21.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman"'>showing or hiding components<o:p></o:p></span></p>
- <h3>Rendering a scene</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>To
- render a scene you</span><span style='font-size:12.0pt;font-family:"Times New Roman","serif";
- mso-ascii-font-family:"Malgun Gothic"'>’</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>ll need to gather all the models in the
- scene that are attached to nodes and then draw them. Calling the </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>Scene::visit()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> method, the
- scene's hierarchical data structure is traversed and for each node in the
- scene, the specified method is invoked as a callback.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <pre style='background:white'><span style='font-family:Consolas;color:blue'>void</span><span
- style='font-family:Consolas;color:black'> MyGame::render(</span><span
- style='font-family:Consolas;color:blue'>float</span><span style='font-family:
- Consolas;color:black'> elapsedTime)<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>{<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:green'>// Clear the buffers to black</span><span
- style='font-family:Consolas;color:black'><o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> clear(CLEAR_COLOR_DEPTH, Vector4::zero(), 1.0f, 0);<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:green'>// Visit all the nodes in the scene, drawing the models/mesh.</span><span
- style='font-family:Consolas;color:black'><o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> _scene->visit(</span><span
- style='font-family:Consolas;color:blue'>this</span><span style='font-family:
- Consolas;color:black'>, &MeshGame::drawScene);<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>}<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:blue'>bool</span><span
- style='font-family:Consolas;color:black'> MyGame::drawScene(Node* node, </span><span
- style='font-family:Consolas;color:blue'>void</span><span style='font-family:
- Consolas;color:black'>* cookie)<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>{<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:green'>// This method is called for each node in the scene.</span><span
- style='font-family:Consolas;color:black'><o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> Model* model = node->getModel(); <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:blue'>if</span><span style='font-family:Consolas;
- color:black'> (model)<o:p></o:p></span></pre><pre style='background:white'><span
- style='font-family:Consolas;color:black'> model->draw();<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:blue'>return</span><span style='font-family:
- Consolas;color:black'> </span><span style='font-family:Consolas;
- color:blue'>true</span><span style='font-family:Consolas;color:black'>;<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>}<o:p></o:p></span></pre>
- <h3>Culling non-visible models</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>In
- some scenes, you may have many models contributing to the game level. However,
- with a moving camera, only some models will be visible at any particular time.
- Running the code in the snippet above on much larger scenes would cause many
- models to be drawn unnecessarily. To avoid this, you can query a </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Node</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> class and
- retrieve a </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>gameplay::BoundingSphere</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> using </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>Node::getBoundingSphere()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>. This bound
- represents an approximation of the representative data contained within a node.
- It is only intended for visibility testing or first-pass intersection testing.
- If you have a moving camera with many objects in the scene, ensure that you add
- code to test visibility from within your visitor callback. This will ensure the
- node is within the camera</span><span style='font-size:12.0pt;font-family:"Times New Roman","serif";
- mso-ascii-font-family:"Malgun Gothic"'>’</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>s viewing range. To do this, make a
- simple intersection test between the front of each node and the active camera
- frustum (by calling </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>Camera::getFrustum()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>) that
- represents the outer planes of the camera</span><span style='font-size:12.0pt;
- font-family:"Times New Roman","serif";mso-ascii-font-family:"Malgun Gothic"'>’</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>s viewing area.
- Here is a snippet of code to perform such an intersection test:<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <pre style='background:white'><a name=d12e3a1310></a><span style='font-family:
- Consolas;color:blue'>bool</span><span style='font-family:Consolas;color:black'> MeshGame::drawScene(Node* node, </span><span
- style='font-family:Consolas;color:blue'>void</span><span style='font-family:
- Consolas;color:black'>* cookie)<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>{<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:green'>// Only draw visible nodes</span><span
- style='font-family:Consolas;color:black'><o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:blue'>if</span><span style='font-family:Consolas;
- color:black'> (node->getBoundingSphere()->intersect(_camera->getFrustum())<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> {<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> Model* model = node->getModel(); <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:blue'>if</span><span style='font-family:Consolas;
- color:black'> (model)<o:p></o:p></span></pre><pre style='background:white'><span
- style='font-family:Consolas;color:black'> model->draw();<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> }<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:blue'>return</span><span style='font-family:
- Consolas;color:black'> </span><span style='font-family:Consolas;
- color:blue'>true</span><span style='font-family:Consolas;color:black'>;<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>}<o:p></o:p></span></pre>
- <h2><a name="_Toc330902775">Model and mesh</a></h2>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>gameplay::Model</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'> class is the basic component used to
- draw geometry in your scene. The model contains a few key elements: a </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Mesh</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>, an optional </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::MeshSkin</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> and one or
- more </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>gameplay::Material</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>. These contribute to the information
- that is needed to perform the rendering of a model.<o:p></o:p></span></p>
- <h3>Mesh geometry</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>gameplay::Mesh</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'> class consists of a </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::VertexFormat</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> attribute.
- This attribute describes the layout for the vertex data as well as the actual
- vertex data, which is used as input in the rendering of the geometry. In
- addition, it holds one or more </span><span style='font-size:12.0pt;font-family:
- "Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::MeshParts</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>. These parts
- define the primitive shapes and indices into the vertex data that describe how
- the vertices are connected.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Game
- artists use 3-D modeling tools that are capable of organizing and splitting the
- vertex data into parts/subsets based on the materials that are applied to them.
- The </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>gameplay::Mesh</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'> class maintains one vertex buffer to
- hold all the vertices, and for each </span><span style='font-size:12.0pt;
- font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::MeshPart</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>, an index
- buffer is used to draw the primitive shapes.<o:p></o:p></span></p>
- <h3>MeshSkin and Joints</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>gameplay::Mesh</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'> class supports an optional </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::MeshSkin</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>. This is used
- when loading models that represent characters in the game that have a skeleton consisting
- of </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>gameplay::Joint</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'> objects (bones). Vertex skinning is
- the term used to describe the process of applying a weighting or relationship
- with the Joints and their affected vertices. Using 3-D modeling tools, artists
- can add this additional weighting information onto the vertices in order to
- control how much a particular vertex should be impacted. This is based on the
- transformation of joints that can affect them. You will learn later how to
- apply special, skinned Materials that support this weighting. The gameplay 3-D
- framework supports a maximum of four blend weights per vertex. The </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::MeshSkin</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> class holds
- and maintains a hierarchy of </span><span style='font-size:12.0pt;font-family:
- "Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay:Joint</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> objects that
- can be transformed. A typical operation is to animate the transformation
- (usually only rotations) of the joints. The data within this class can be bound
- onto skinned Materials to ensure proper impact of weights onto their influenced
- vertices.<a name=d13e3a1310></a><o:p></o:p></span></p>
- <h2><a name="_Toc330902776">Lights</a></h2>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>gameplay::Light</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'> class can be attached to any </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Node</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> in order to
- add lighting information into a </span><span style='font-size:12.0pt;
- font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Scene</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>. This lighting
- information must be bound to the </span><span style='font-size:12.0pt;
- font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Material</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> that is being
- applied onto the </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>gameplay::MeshParts</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>. There are
- three types of lights in the gameplay 3-D framework - directional, point, and
- spot lights.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>All
- </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>gameplay::Light</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'> components can be loaded into a </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Scene</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> using the </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Bundle</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> class.
- However, it is your responsibility to bind the relevant lighting information
- stored in the light into the </span><span style='font-size:12.0pt;font-family:
- "Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Material</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> class.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>You
- can also programmatically create a light using the factory methods on the </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Light</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> class. Here is
- an example of how to create and add a directional light to your scene and bind
- the lighting information onto a model's material(s):<o:p></o:p></span></p>
- <p class=MsoNormal><span style='mso-bidi-font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <pre style='background:white'><span style='font-family:Consolas;color:blue'>void</span><span
- style='font-family:Consolas;color:black'> MyGame::initialize()<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>{<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> ...<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:green'>// Create a node and light attaching the light to the node</span><span
- style='font-family:Consolas;color:black'><o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> Node* lightNode = Node::create(</span><span
- style='font-family:Consolas;color:#A31515'>"directionalLight1"</span><span
- style='font-family:Consolas;color:black'>);<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> Light* light = Light::createDirectional(Vector3(1, 0, 0));<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> lightNode->setLight(light);<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:green'>// Bind the relevant lighting information into the materials</span><span
- style='font-family:Consolas;color:black'><o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> Material* material = _modelNode->getModel()->getMaterial();<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> MaterialParameter* parameter = material->getParameter(</span><span
- style='font-family:Consolas;color:#A31515'>"u_lightDirection"</span><span
- style='font-family:Consolas;color:black'>);<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> parameter->bindValue(lightNode, &Node::getForwardVectorView);<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>}<o:p></o:p></span></pre>
- <h3>Pre-computed lighting maps</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Adding
- lighting information into </span><span style='font-size:12.0pt;font-family:
- "Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Material</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> adds
- computationally expensive graphics computations. In many games, there are usually
- multiple static lights and objects in the scene. In this relationship, the
- additive light colors contributing to the objects can be pre-computed during
- the design phase. 3-D modeling tools typically support the ability to compute
- the light's additive color contributions using a process called <i
- style='mso-bidi-font-style:normal'>baking</i>. This process allows the artist
- to direct the contributing light and color information into a separate or
- combined texture so that this is not required during the rendering.<o:p></o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan'><span style='font-size:
- 12.0pt;mso-bidi-font-family:"Times New Roman"'>You can optionally declare and
- pass in pre-generated light maps using the
- colored-unlit.frag/textured-unlit.frag shaders and specifying in your materials<o:p></o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan'><span style='font-size:
- 12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>defines
- = TEXTURE_LIGHTMAP<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Then
- you just assign them using the sampler<span style='mso-spacerun:yes'> </span></span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>m_lightmapTexture</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> in your
- material definition to the image that was pre-generated that contains the
- light+color for your object. It is recommended to use 8-bit alpha textures to
- reduce the size.<o:p></o:p></span></p>
- <h3>Directional lights</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>In
- most games, you</span><span style='font-size:12.0pt;font-family:"Times New Roman","serif";
- mso-ascii-font-family:"Malgun Gothic"'>’</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>ll want to add a </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Light</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> class whose
- type is </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>Light::DIRECTIONAL</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>. This type of
- light is used as the primary light source, such as a sun or moon. The
- directional light represents a light source whose color is affected only by the
- constant direction vector. It is typical to bind this onto the </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Materials</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> of objects
- that are dynamic or moving.<o:p></o:p></span></p>
- <h3>Point and spot lights</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Due
- to the expensive processing overhead in using point and spot lights, many games
- are designed to restrict point and spot light use to be static, baked into
- light and color maps. However, the point and spot light types add exceptional
- realism to games. Using them in separate or combined rendering passes, you can
- bind point and spot lights into material to add dynamic point and spot light
- rendering. All the built-in gameplay .materials files support directional, point
- and spot lights. Also, with minor modification to the shaders, you can add
- additional passes to combine two or more lights. It should be noted that there
- is a significant performance impact in doing this. For these cases, you</span><span
- style='font-size:12.0pt;font-family:"Times New Roman","serif";mso-ascii-font-family:
- "Malgun Gothic"'>’</span><span style='font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman"'>ll usually want to restrict the influence of lights on a
- material to no more than the one or two closest lights at a time. This can be
- achieved by using a simple test in the </span><span style='font-size:12.0pt;
- font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>Game::update()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> method to find
- the closest light to a </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>gameplay::Model</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> and then bind
- them to the </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>gameplay::Material</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> once they are
- found.<a name=d14e3a1310></a><o:p></o:p></span></p>
- <h2><a name="_Toc330902777">Materials and shaders</a></h2>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- gameplay 3-D framework uses a modern GPU shader based rendering architecture
- and uses OpenGL 2.0+ (desktop) or OpenGL ES 2.0 (mobile) along with the OpenGL
- Shading Language (GLSL). Currently, all the code in graphics-related classes uses
- the OpenGL hardware device directly.<o:p></o:p></span></p>
- <h3>Using materials</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>gameplay::Material</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'> class is the high level definition of
- all the rendering information needed to draw a </span><span style='font-size:
- 12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::MeshPart</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>. When you draw
- a </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>gameplay::Model</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>, the mesh</span><span
- style='font-size:12.0pt;font-family:"Times New Roman","serif";mso-ascii-font-family:
- "Malgun Gothic"'>’</span><span style='font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman"'>s vertex buffer is applied and for each </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::MeshPart</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> its index
- buffer(s) and </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>gameplay::Materials</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> are applied
- just before the primitives are drawn. <o:p></o:p></span></p>
- <h3>RenderState and Effects</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Each
- </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>gameplay::Material</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'> consists of a </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::RenderState</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> and a </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Effect</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>. The </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::RenderState</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> stores the GPU
- render state blocks that are to be applied, as well as any </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::MaterialParameters</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> to be applied
- to the </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>gameplay::Effect</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>. While a </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Material</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> is typically
- used once per </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>gameplay::MeshPart</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>, the </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Effect</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> is created
- internally based on the unique combination of selected vertex and fragment
- shader programs. The </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>gameplay::Effect</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> represents a
- common reusable shader program.<o:p></o:p></span></p>
- <h3>Techniques</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Since
- you can bind only one </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>gameplay::Material</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> per </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::MeshPart</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>, an additional
- feature is supported that's designed to make it quick and easy to change the
- way you render the parts at runtime. You can define multiple techniques by
- giving them different names. Each one can have a completely different rendering
- technique, and you can even change the technique being applied at runtime by
- using </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>Material::setTechnique(const char*
- name)</span><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>.
- When a material is loaded, all the techniques are loaded ahead too. This is a
- practical way of handling different light combinations or having lower-quality
- rendering techniques, such as disabling bump mapping, when the object being
- rendered is far away from the camera.<o:p></o:p></span></p>
- <h3>Creating materials</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>You
- can create a </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>gameplay::Material</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> from the
- simple </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>gameplay::Properties</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> based
- .material files. Using this simple file format, you can define your material,
- specifying all the rendering techniques and pass information.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Here
- is an example of loading a .material file:<o:p></o:p></span></p>
- <p class=MsoNormal><span style='mso-bidi-font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <pre style='background:white'><span style='font-family:Consolas;color:black'>Material* planeMaterial = planeNode->getModel()->setMaterial(</span><span
- style='font-family:Consolas;color:#A31515'>"res/floor.material"</span><span
- style='font-family:Consolas;color:black'>);<o:p></o:p></span></pre>
- <h3>Setting vs. binding material parameters</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Once
- you have created a </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>gameplay::Material</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> instance, you</span><span
- style='font-size:12.0pt;font-family:"Times New Roman","serif";mso-ascii-font-family:
- "Malgun Gothic"'>’</span><span style='font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman"'>ll want to get its parameters and then set or bind various
- values to them. To set a value, get the </span><span style='font-size:12.0pt;
- font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::MaterialParameter</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> and then call
- the appropriate </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>setValue()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> method on it.
- Setting material parameter values is most common in parameters that are based
- on values that are constants.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Here
- is an example of setting a value on a parameter:<o:p></o:p></span></p>
- <p class=MsoNormal><span style='mso-bidi-font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <pre style='background:white'><span style='font-family:Consolas;color:black'>material->getParameter(</span><span
- style='font-family:Consolas;color:#A31515'>"u_diffuseColor"</span><span
- style='font-family:Consolas;color:black'>)->setValue(Vector4(0.53544f, <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'><span
- style='mso-tab-count:6'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span>0.53544f,<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span>0.53544f, 1.0f));<o:p></o:p></span></pre>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>For
- values that are not constants and are determined from other objects, you</span><span
- style='font-size:12.0pt;font-family:"Times New Roman","serif";mso-ascii-font-family:
- "Malgun Gothic"'>’</span><span style='font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman"'>ll want to bind a value to it. When binding a value, you are
- giving the parameter a function pointer that will only be resolved just prior
- to rendering. In this example, we will bind the forward vector for a node (in
- view space).<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Here
- is an example of binding a value on a parameter:<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <pre style='background:white'><span style='font-family:Consolas;color:black'>material->getParameter(</span><span
- style='font-family:Consolas;color:#A31515'>"u_lightDirection"</span><span
- style='font-family:Consolas;color:black'>)->bindValue(lightNode, <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'><span style='mso-spacerun:yes'> </span>&Node::getForwardVectorView);<o:p></o:p></span></pre>
- <h3>.material files</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>As
- you can see in the following .material file, we have one Material, one
- Technique and one Pass. The main parts of this material definition are the
- shaders, uniforms, samplers and renderState. You will see certain upper case
- values throughout the file. These represent constant enumeration values and can
- usually be found in the </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>gameplay::RenderState</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> or </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Texture</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> class
- definitions:<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>material
- duck<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>{<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>technique<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>{<span style='mso-tab-count:1'> </span><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>pass 0<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>{<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>// shaders<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>vertexShader = res/shaders/textured.vert<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>fragmentShader = res/shaders/textured.frag<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-tab-count:1'> </span><span style='mso-spacerun:yes'>
- </span>defines = SPECULAR<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>// uniforms<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>u_worldViewProjectionMatrix =
- WORLD_VIEW_PROJECTION_MATRIX<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>u_inverseTransposeWorldViewMatrix =
- INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>u_cameraPosition =
- CAMERA_WORLD_POSITION<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>// samplers<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>sampler u_diffuseTexture<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>{<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>path = res/duck-diffuse.png<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>mipmap = true<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>wrapS = CLAMP<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span><span
- style='mso-spacerun:yes'> </span>wrapT = CLAMP<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>minFilter =
- NEAREST_MIPMAP_LINEAR<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>magFilter = LINEAR<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>}<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>// render state<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>renderState<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>{<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>cullFace = true<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>depthTest = true<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span><span
- style='mso-spacerun:yes'> </span>}<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>}<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>}<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>}<o:p></o:p></span></p>
- <h3>Built-in shaders</h3>
- <p class=MsoNormal>The <b style='mso-bidi-font-weight:normal'><gameplay-root>/gameplay/res/shaders</b>
- directory contains a set of the most common shaders used in your games. To
- reduce shader code duplication the gameplay framework also supports declaring
- including of shader files within vertex and shader program files.</p>
- <p class=MsoNormal>If there is an error compiling the shaders the expanded
- shader without the definitions is output with an .err file extension in the
- same directory where the file was loaded from. </p>
- <p class=MsoNormal><o:p> </o:p></p>
- <p class=MsoNormal><b style='mso-bidi-font-weight:normal'>Example:<o:p></o:p></b></p>
- <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><o:p> </o:p></b></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>#include
- "lib/lighting.frag"<o:p></o:p></span></p>
- <p class=MsoNormal><o:p> </o:p></p>
- <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
- style='font-size:18.0pt;mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Shader
- preprocessor definitions<o:p></o:p></span></b></p>
- <p class=MsoNormal>Using preprocessor definitions, the built-in shaders support
- various features. Adding certain shader definitions (defines=XXX) will require
- use specific uniform/samplers <span style='font-family:"Times New Roman","serif";
- mso-ascii-font-family:"Malgun Gothic";mso-bidi-font-family:TradeGothicNextLTPro-Lt'>‘</span>u_xxxxxxx<span
- style='font-family:"Times New Roman","serif";mso-ascii-font-family:"Malgun Gothic";
- mso-bidi-font-family:TradeGothicNextLTPro-Lt'>’</span>. You must set these in
- your vertex stream in your mesh and/or material parameters.</p>
- <h3>Property inheritance</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>When
- making materials with multiple techniques or passes, you can put any common
- things, such as renderState or shaders, above the material or technique
- definitions. The </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>gameplay::Property</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> file format
- for the .material files supports property inheritance. Therefore, if you put
- the renderState in the material sections, then all techniques and passes will
- inherit its definition.<a name=d15e3a1310></a><o:p></o:p></span></p>
- <h2><a name="_Toc330902778">Particle emitters</a></h2>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>gameplay::ParticleEmitter</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'> class defines all the information
- needed to simulate and render a system of particles. The emitter can be defined
- in various ways to represent smoke, steam, fire and other atmospheric effects,
- such as rain and lightning. Once created, the emitter can be set on a </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Node</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> in order to
- follow an object, or it can be placed within a scene. <o:p></o:p></span></p>
- <h3>Particles as sprites</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>A
- </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>gameplay::ParticleEmitter</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'> always has a sprite/texture and a
- maximum number of particles that can be alive at any given time. After the
- emitter is created, these cannot be changed. Particles are rendered as
- camera-facing billboards using the emitter's sprite/texture. The emitter's
- sprite/texture properties determine whether the texture is treated as a single
- image, a texture atlas, or an animated sprite.<o:p></o:p></span></p>
- <h3>Particle properties</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>A
- </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>gameplay::ParticleEmitter</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'> also has a number of properties that
- determine values assigned to the individual particles it emits. Scalar
- properties, such as particle begin- and end-size, are assigned within a minimum
- and a maximum value; vector properties are assigned within the domain or space,
- and are defined by a base vector and a variance vector.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- variance vector is multiplied by a random scalar between 1 and -1, and the base
- vector is added to this result. This allows an emitter to be created, which
- emits particles with properties that are randomized, yet fit within a
- well-defined range. To make a property deterministic, simply set the minimum
- value to the same value as the maximum for that property, or set its variance
- to a zero vector. To learn more about different scalars, vector and rendering
- properties that can be set on a </span><span style='font-size:12.0pt;
- font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::ParticleEmitter</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>, look at the
- C++ API.<o:p></o:p></span></p>
- <h3>Creating particle emitters</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Use
- the </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>ParticlEmitter::create()</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'> method to create an emitter from a
- particle file. The .particle file format and semantics are very similar to the
- .material file format. This is because it also leverages the </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Properties</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> file
- definition and supports all the properties supported in the C++ API for the </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::ParticleEmitter</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> class.<o:p></o:p></span></p>
- <h3>Animated sprites for particles</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>It
- is very easy to make the particles animate through a list of images. Just make
- your images have a tile of sprite images and then modify the sprite</span><span
- style='font-size:12.0pt;font-family:"Times New Roman","serif";mso-ascii-font-family:
- "Malgun Gothic"'>’</span><span style='font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman"'>s base properties in the emitter to control the animation
- behavior.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>You
- can then even do things such as animate images of 3-D dice using only 2-D
- images.<a name=d16e3a1310></a><o:p></o:p></span></p>
- <h2><a name="_Toc330902779">Physics</a></h2>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- gameplay framework supports 3-D physics using the game service/controller </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::PhysicsController</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>. The </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::PhysicsController</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> class
- maintains a physics world that has gravity, and will simulate the objects you
- add to it.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- gameplay physics system supports 3-D rigid body dynamics, including collision
- shapes, constraints, and a physics character class. To simulate objects within
- the physics world, you need to create a </span><span style='font-size:12.0pt;
- font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::PhysicsCollisionObject</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> object
- representing the geometry, or </span><span style='font-size:12.0pt;font-family:
- "Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Model</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>. By attaching
- a collision object to a </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>gameplay::Node</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>, the rigid
- body will be added to the physics world and the simulation will automatically
- update the node</span><span style='font-size:12.0pt;font-family:"Times New Roman","serif";
- mso-ascii-font-family:"Malgun Gothic"'>’</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>s transformation.<o:p></o:p></span></p>
- <h3>PhysicsCollisionObject</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>PhysicsCollisionObject</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> is the base
- class that provides an interface for receiving collision events. <o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>You
- can add collision listeners to a </span><span style='font-size:12.0pt;
- font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>PhysicsCollisionObject</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> or test if the
- collision object currently collides with another collision object.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>There
- are 3 types of collision objects:<a name=d16e49a1310></a><span
- style='mso-tab-count:2'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:21.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman"'>PhysicsRigidBody<span style='mso-tab-count:2'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:21.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman"'>PhysicsGhostObject<span style='mso-tab-count:2'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:21.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman"'>PhysicsCharacter<span style='mso-tab-count:6'> </span><o:p></o:p></span></p>
- <h3>PhysicsRigidBody</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>A
- rigid body is an idealized, infinitely hard, non-deformable solid object. Rigid
- bodies have mass, shape and other properties that affect forces within the
- simulation. <o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>A
- </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>PhysicsRigidBody</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'> can be set to be a kinematic rigid
- body. A kinematic rigid body is an object that is not simulated by the physics
- system, and instead has its transform driven manually.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <h4>Create a PhysicsRigidBody</h4>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>To
- create a rigid body, first you need to know what kind of shape you want to
- simulate. The physics system supports boxes, spheres, meshes, capsules, and
- terrain height fields. For basic shapes, such as boxes and spheres, you can
- programmatically create the rigid bodies by calling </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>Node::setCollisionObject()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> and passing in
- the desired shape type.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>PhysicsRigidBody::Parameters
- params;<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>params.mass
- = 10.0f;<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>node->setCollisionObject(PhysicsCollisionObject::RIGID_BODY,
- <o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>PhysicsCollisionShape::box(),
- &params);<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>All
- other types of rigid bodies must be created using the </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>.scene</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> and </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>.physics</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> property
- definition files. The </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>.scene</span><span style='font-size:
- 12.0pt;mso-bidi-font-family:"Times New Roman"'> file allows you to bind various
- attachments or properties to nodes, including a rigid body.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>For
- example, to create a mesh rigid body for the node within the scene with ID
- equal to tree_1:<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>game.scene:</span></b><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p></o:p></span></p>
- <p class=MsoNormal><span style='mso-bidi-font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>scene<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>{<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>...<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>node tree_1<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>{<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>...<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>collisionObject =
- game.physics#tree_mesh<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>}<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>...<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>}<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span></p>
- <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>game.physics:</span></b><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p></o:p></span></p>
- <p class=MsoNormal><span style='mso-bidi-font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>collisionObject
- tree_mesh<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>{<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>type = RIGID_BODY<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>shape = MESH<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>mass = 15.0<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>...<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>}</span><span
- style='mso-bidi-font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'><o:p></o:p></span></p>
- <p class=MsoNormal><span style='mso-bidi-font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'><span style='mso-spacerun:yes'>
- </span></span><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p></o:p></span></p>
- <h4>RigidBody schema</h4>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>All
- properties have default values if not defined. See </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>PhysicsRigidBody::Parameters</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> for more
- information.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>collisionObject
- <string><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>{<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>type<span style='mso-spacerun:yes'>
- </span><span style='mso-spacerun:yes'> </span>= <RIGID_BODY |
- GHOST_OBJECT | CHARACTER><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>shape<span style='mso-spacerun:yes'>
- </span><span style='mso-spacerun:yes'> </span>= <BOX | SPHERE |
- MESH | HEIGHTFIELD | CAPSULE><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>image<span
- style='mso-spacerun:yes'> </span>= <string> // only for
- HEIGHTFIELD<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>radius<span
- style='mso-spacerun:yes'> </span>= <float><span
- style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>height<span
- style='mso-spacerun:yes'> </span>= <float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>extents<span
- style='mso-spacerun:yes'> </span>= <float, float, float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>center<span
- style='mso-spacerun:yes'> </span>= <float, float, float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>centerAbsolute<span
- style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span>= <float,
- float, float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>mass<span
- style='mso-spacerun:yes'> </span>= <float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>friction<span
- style='mso-spacerun:yes'> </span>= <float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>restitution<span
- style='mso-spacerun:yes'> </span>= <float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>linearDamping<span
- style='mso-spacerun:yes'> </span>= <float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>angularDamping<span
- style='mso-spacerun:yes'> </span>= <float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>kinematic<span
- style='mso-spacerun:yes'> </span>= <bool><span
- style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>anisotropicFriction = <float, float,
- float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>gravity<span
- style='mso-spacerun:yes'> </span>= <float, float, float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>}</span><span
- style='mso-bidi-font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'><o:p></o:p></span></p>
- <p class=MsoNormal><a name=d16e136a1310></a><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
- style='border-collapse:collapse;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
- <thead>
- <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
- <td width=397 valign=top style='width:297.7pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=tableheader style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman";
- mso-bidi-font-weight:normal'><span style='mso-spacerun:yes'> </span>Shapes<o:p></o:p></span></p>
- </td>
- <td width=397 valign=top style='width:297.7pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=tableheader style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman";
- mso-bidi-font-weight:normal'><span
- style='mso-spacerun:yes'> </span>Properties <o:p></o:p></span></p>
- </td>
- </tr>
- </thead>
- <tr style='mso-yfti-irow:1'>
- <td width=397 valign=top style='width:297.7pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><span
- style='mso-spacerun:yes'> </span>BOX <o:p></o:p></span></p>
- </td>
- <td width=397 valign=top style='width:297.7pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><span
- style='mso-spacerun:yes'> </span>extents, center, center-absolute <o:p></o:p></span></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:2'>
- <td width=397 valign=top style='width:297.7pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><span
- style='mso-spacerun:yes'> </span>SPHERE <o:p></o:p></span></p>
- </td>
- <td width=397 valign=top style='width:297.7pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><span
- style='mso-spacerun:yes'> </span>radius, center, center-absolute <o:p></o:p></span></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:3'>
- <td width=397 valign=top style='width:297.7pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><span
- style='mso-spacerun:yes'> </span>MESH <o:p></o:p></span></p>
- </td>
- <td width=397 valign=top style='width:297.7pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><span
- style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:4'>
- <td width=397 valign=top style='width:297.7pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><span
- style='mso-spacerun:yes'> </span>HEIGHTFIELD <o:p></o:p></span></p>
- </td>
- <td width=397 valign=top style='width:297.7pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><span
- style='mso-spacerun:yes'> </span>image <o:p></o:p></span></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:5;mso-yfti-lastrow:yes'>
- <td width=397 valign=top style='width:297.7pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><span
- style='mso-spacerun:yes'> </span>CAPSULE <o:p></o:p></span></p>
- </td>
- <td width=397 valign=top style='width:297.7pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><span
- style='mso-spacerun:yes'> </span>radius, height, center, center-absolute <o:p></o:p></span></p>
- </td>
- </tr>
- </table>
- <h3>PhysicsGhostObject</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>A
- ghost object is like a rigid body except that it does not have an effect the
- simulation. It will not cause forces or react to the other rigid bodies. Ghost
- objects have a shape but they do not have mass, or any of the properties that
- affect forces.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Ghost
- objects are useful for querying the simulation, or detecting collisions without
- having rigid bodies react to the ghost object. A ghost object could be used to
- detect if an object entered a volume, such as a soccer ball going into a goal.
- This use of a ghost object is often called a volumetric trigger. Ghost objects
- can also detect if they collide with other ghost objects.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Collision
- objects do not require a model so you could use a ghost object to check if a
- camera collides with a wall.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <h4>Creating a PhysicsGhostObject</h4>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Programmatically:<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <pre style='background:white'><span style='font-family:Consolas;color:green'>// Create a ghost object with radius 5</span><span
- style='font-family:Consolas;color:black'><o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>node->setCollisionObject(PhysicsCollisionObject::GHOST_OBJECT,<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'><span style='mso-spacerun:yes'> </span>PhysicsCollisionShape::sphere(5.0f));<o:p></o:p></span></pre>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>In
- a .physics file:<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>collisionObject
- powerup<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>{<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>type = GHOST_OBJECT<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>shape = SPHERE<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>radius = 5.0<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>}<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <h4>PhysicsGhostObject schema</h4>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Ghost
- objects only have a shape and support the same shapes as rigid bodies. <o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>collisionObject
- <string><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>{<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>type<span style='mso-spacerun:yes'>
- </span><span style='mso-spacerun:yes'> </span>= GHOST_OBJECT<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>shape<span style='mso-spacerun:yes'>
- </span><span style='mso-spacerun:yes'> </span>= <BOX | SPHERE |
- MESH | HEIGHTFIELD | CAPSULE><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>radius<span
- style='mso-spacerun:yes'> </span>= <float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>height<span
- style='mso-spacerun:yes'> </span>= <float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>extents<span
- style='mso-spacerun:yes'> </span>= <float, float, float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>center<span
- style='mso-spacerun:yes'> </span>= <float, float, float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>centerAbsolute<span
- style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span>= <float,
- float, float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>image<span
- style='mso-spacerun:yes'> </span>= <string> <span
- style='mso-spacerun:yes'> </span>// HEIGHTFIELD shapes only.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>}</span><span
- style='mso-bidi-font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'><o:p></o:p></span></p>
- <h3>PhysicsCharacter</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>PhysicsCharacter</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'> class can be used to control the
- movements and collisions of a character in a game. It interacts with the
- physics system to apply gravity and handle collisions, however dynamics are not
- applied to the character directly by the physics system. Instead, the
- character's movement is controlled directly by the </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>PhysicsCharacter</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> class. This
- results in a more responsive and typical game character than would be possible
- if trying to move a character by applying physical simulation with forces.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <h4>Creating a PhysicsCharacter</h4>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>To
- programmatically create a </span><span style='font-size:12.0pt;font-family:
- "Courier New";mso-bidi-font-family:"Times New Roman"'>PhysicsCharacter</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> with mass 20
- and capsule shape:<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <pre style='background:white'><span style='font-family:Consolas;color:black'>PhysicsRigidBody::Parameters params(20.0f);<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>node->setCollisionObject(PhysicsCollisionObject::CHARACTER,<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'><span style='mso-spacerun:yes'> </span>PhysicsCollisionShape::capsule(1.2f, 5.0f,<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span>Vector3(0, 2.5, 0), </span><span
- style='font-family:Consolas;color:blue'>true</span><span style='font-family:
- Consolas;color:black'>), <o:p></o:p></span></pre><pre style='background:white'><span
- style='font-family:Consolas;color:black'><span style='mso-tab-count:6'> </span><span style='mso-spacerun:yes'> </span>&params);<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>PhysicsCharacter* character = </span><span
- style='font-family:Consolas;color:blue'>static_cast</span><span
- style='font-family:Consolas;color:black'><PhysicsCharacter*>(<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span>node->getCollisionObject());<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'><o:p> </o:p></span></pre>
- <h4>PhysicsCharacter schema</h4>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Physics
- characters have a mass and shape. A capsule is a typical shape for a typical
- biped character.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>collisionObject
- <string><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>{<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>type<span style='mso-spacerun:yes'>
- </span><span style='mso-spacerun:yes'> </span><span
- style='mso-spacerun:yes'> </span>= CHARACTER<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>shape<span style='mso-spacerun:yes'>
- </span><span style='mso-spacerun:yes'> </span>= <BOX | SPHERE |
- MESH | CAPSULE><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>radius<span
- style='mso-spacerun:yes'> </span>= <float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>height<span
- style='mso-spacerun:yes'> </span>= <float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>extents<span
- style='mso-spacerun:yes'> </span>= <float, float, float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>center<span
- style='mso-spacerun:yes'> </span>= <float, float, float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>centerAbsolute<span
- style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span>= <float,
- float, float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>mass<span
- style='mso-spacerun:yes'> </span>= <float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>}<o:p></o:p></span></p>
- <h3>Creating a PhysicsContraint</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- gameplay framework supports various types of constraints between two rigid
- bodies (or one rigid body and the physics world), including hinge, fixed,
- generic (six-degree-of-freedom), socket, and spring. Constraints can be created
- programmatically using one of the create functions on </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::PhysicsController</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>, or they can
- be specified within the </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>physics</span><span style='font-size:
- 12.0pt;mso-bidi-font-family:"Times New Roman"'> section of the </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>.scene</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> file. For
- example, to create a hinge constraint from within a </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>.scene</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> file between
- the rigid body attached to the node with id door and the physics world:<o:p></o:p></span></p>
- <b style='mso-bidi-font-weight:normal'><span style='font-size:12.0pt;
- font-family:"Malgun Gothic","sans-serif";mso-hansi-font-family:"Times New Roman";
- mso-bidi-font-family:"Times New Roman";mso-ansi-language:EN-US;mso-fareast-language:
- EN-US;mso-bidi-language:AR-SA'><br clear=all style='page-break-before:always'>
- </span></b>
- <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>game.scene:</span></b><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>scene<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>{<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>...<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>physics<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>{<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>...<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>constraint<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span><span style='mso-tab-count:1'> </span><span
- style='mso-spacerun:yes'> </span>{<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>type = HINGE<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>rigidBodyA = door<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>rotationOffsetA = 0.0, 1.0, 0.0,
- 90.0<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>translationOffsetA = 0.0, 0.0, 2.0<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>limits = 0.0, 90.0, 0.5<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span>}<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>}<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>}<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>PhysicsConstraint
- schema</span></b><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>constraint
- <string><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>{<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>type<span style='mso-spacerun:yes'>
- </span><span style='mso-tab-count:1'> </span><span
- style='mso-spacerun:yes'> </span>= <FIXED | GENERIC | HINGE |<span
- style='mso-spacerun:yes'> </span>SOCKET | SPRING><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>rigidBodyA<span
- style='mso-spacerun:yes'> </span>= <string><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>rigidBodyB<span
- style='mso-spacerun:yes'> </span>= <string><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>translationOffsetA = <float, float,
- float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>translationOffsetB = <float, float,
- float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>rotationOffsetA<span
- style='mso-spacerun:yes'> </span>= <float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>rotationOffsetB<span
- style='mso-spacerun:yes'> </span>= <float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>angularLowerLimit<span
- style='mso-spacerun:yes'> </span>= <float, float, float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>angularUpperLimit<span
- style='mso-spacerun:yes'> </span>= <float, float, float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>linearLowerLimit<span
- style='mso-spacerun:yes'> </span>= <float, float, float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>linearUpperLimit<span
- style='mso-spacerun:yes'> </span>= <float, float, float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>limits<span
- style='mso-spacerun:yes'> </span>= <float, float, float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>angularDampingX<span
- style='mso-spacerun:yes'> </span>= <float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>angularDampingY<span
- style='mso-spacerun:yes'> </span>= <float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>angularDampingZ<span
- style='mso-spacerun:yes'> </span>= <float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>angularStrengthX<span
- style='mso-spacerun:yes'> </span>= <float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>angularStrengthY<span
- style='mso-spacerun:yes'> </span>= <float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>angularStrengthZ<span
- style='mso-spacerun:yes'> </span>= <float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>linearDampingX<span
- style='mso-spacerun:yes'> </span>= <float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>linearDampingY<span
- style='mso-spacerun:yes'> </span>= <float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>linearDampingZ<span
- style='mso-spacerun:yes'> </span>= <float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>linearStrengthX<span
- style='mso-spacerun:yes'> </span>= <float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>linearStrengthY<span
- style='mso-spacerun:yes'> </span>= <float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>linearStrengthZ<span
- style='mso-spacerun:yes'> </span>= <float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>breakingImpulse<span
- style='mso-spacerun:yes'> </span>= <float><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>}</span><span
- style='mso-bidi-font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'><o:p></o:p></span></p>
- <p class=MsoNormal><a name=d16e328a1310></a><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
- style='border-collapse:collapse;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
- <thead>
- <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
- <td width=190 valign=top style='width:142.75pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=tableheader style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman";
- mso-bidi-font-weight:normal'><span
- style='mso-spacerun:yes'> </span>Constraint Types <o:p></o:p></span></p>
- </td>
- <td width=603 valign=top style='width:452.6pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=tableheader style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman";
- mso-bidi-font-weight:normal'><span
- style='mso-spacerun:yes'> </span>Properties <o:p></o:p></span></p>
- </td>
- </tr>
- </thead>
- <tr style='mso-yfti-irow:1'>
- <td width=190 valign=top style='width:142.75pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><span
- style='mso-spacerun:yes'> </span>FIXED <o:p></o:p></span></p>
- </td>
- <td width=603 valign=top style='width:452.6pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><span
- style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:2'>
- <td width=190 valign=top style='width:142.75pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><span
- style='mso-spacerun:yes'> </span>GENERIC <o:p></o:p></span></p>
- </td>
- <td width=603 valign=top style='width:452.6pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>translationOffsetA,
- translationOffsetB, rotationOffsetA, rotationOffsetB, angularLowerLimit,
- angularUpperLimit, linearLowerLimit, linearUpperLimit <o:p></o:p></span></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:3'>
- <td width=190 valign=top style='width:142.75pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><span
- style='mso-spacerun:yes'> </span>HINGE <o:p></o:p></span></p>
- </td>
- <td width=603 valign=top style='width:452.6pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>translationOffsetA,
- translationOffsetB, rotationOffsetA, rotationOffsetB, limits <o:p></o:p></span></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:4'>
- <td width=190 valign=top style='width:142.75pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><span
- style='mso-spacerun:yes'> </span>SOCKET <o:p></o:p></span></p>
- </td>
- <td width=603 valign=top style='width:452.6pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>translationOffsetA,
- translationOffsetB <o:p></o:p></span></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:5;mso-yfti-lastrow:yes'>
- <td width=190 valign=top style='width:142.75pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><span
- style='mso-spacerun:yes'> </span>SPRING <o:p></o:p></span></p>
- </td>
- <td width=603 valign=top style='width:452.6pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>translationOffsetA,
- translationOffsetB, rotationOffsetA, rotationOffsetB, angularLowerLimit,
- angularUpperLimit, linearLowerLimit, linearUpperLimit, angularDampingX,
- angularDampingY, angularDampingZ, angularStrengthX, angularStrengthY,
- angularStrengthZ, linearDampingX, linearDampingY, linearDampingZ,
- linearStrengthX, linearStrengthY, linearStrengthZ <o:p></o:p></span></p>
- </td>
- </tr>
- </table>
- <h3>Handling collisions</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- gameplay framework allows you to register to be notified whenever a collision
- occurs between two rigid bodies (and also when two rigid bodies stop
- colliding). In order to do this, you must define a class that derives from </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::PhysicsRigidBody::Listener</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> and implements
- the function </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>collisionEvent(…)</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>. Then, you
- must add an instance of the class as a listener on a given rigid body using the
- </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>PhysicsRigidBody::addCollisionListener</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> function. For
- example, to print all information for all collisions with the door and for
- collisions between the character and the wall:<o:p></o:p></span></p>
- <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></b></p>
- <b style='mso-bidi-font-weight:normal'><span style='font-size:12.0pt;
- font-family:"Malgun Gothic","sans-serif";mso-hansi-font-family:"Times New Roman";
- mso-bidi-font-family:"Times New Roman";mso-ansi-language:EN-US;mso-fareast-language:
- EN-US;mso-bidi-language:AR-SA'><br clear=all style='page-break-before:always'>
- </span></b>
- <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>MyGame.h:</span></b><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <pre style='background:white'><span style='font-family:Consolas;color:blue'>class</span><span
- style='font-family:Consolas;color:black'> MyGame: </span><span
- style='font-family:Consolas;color:blue'>public</span><span style='font-family:
- Consolas;color:black'> gameplay::PhysicsRigidBody::Listener<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>{<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:blue'>public</span><span
- style='font-family:Consolas;color:black'>:<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> ...<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:green'>/**</span><span style='font-family:
- Consolas;color:black'><o:p></o:p></span></pre><pre style='background:white'><span
- style='font-family:Consolas;color:green'> * Collision event handler.</span><span
- style='font-family:Consolas;color:black'><o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:green'> */</span><span
- style='font-family:Consolas;color:black'><o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:blue'>void</span><span style='font-family:
- Consolas;color:black'> collisionEvent(PhysicsRigidBody::Listener::EventType type,<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'><span style='mso-spacerun:yes'> </span></span><span
- style='font-family:Consolas;color:blue'>const</span><span style='font-family:
- Consolas;color:black'> PhysicsRigidBody::CollisionPair& pair, <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:blue'>const</span><span style='font-family:
- Consolas;color:black'> Vector3& pointA, </span><span
- style='font-family:Consolas;color:blue'>const</span><span style='font-family:
- Consolas;color:black'> Vector3& pointB);<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> ...<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>};<o:p></o:p></span></pre>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>MyGame.cpp:</span></b><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <pre style='background:white'><a name=d17e3a1310></a><span style='font-family:
- Consolas;color:black'>MyGame* mygame;<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>Node* door;<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>Node* character;<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>Node* wall;<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>...<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>door->getRigidBody()->addCollisionListener(mygame);<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>character->getRigidBody()->addCollisionListener(mygame, wall);<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>...<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:blue'>void</span><span
- style='font-family:Consolas;color:black'> MyGame::collisionEvent(PhysicsRigidBody::Listener::EventType type, <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:blue'>const</span><span style='font-family:
- Consolas;color:black'> PhysicsRigidBody::CollisionPair& pair, <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> <span style='mso-spacerun:yes'> </span></span><span
- style='font-family:Consolas;color:blue'>const</span><span style='font-family:
- Consolas;color:black'> Vector3& pointA, </span><span
- style='font-family:Consolas;color:blue'>const</span><span style='font-family:
- Consolas;color:black'> Vector3& pointB)<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>{<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> GP_WARN(</span><span
- style='font-family:Consolas;color:#A31515'>"Collision between rigid bodies %s (at point (%f, %f, %f)) "<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:#A31515'><span style='mso-spacerun:yes'> </span>"and %s (at point (%f, %f, %f))."</span><span
- style='font-family:Consolas;color:black'>,<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> pair._rbA-getNode()-getId(), pointA.x, pointA.y, pointA.z, <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> pair._rbB-getNode()-getId(), pointB.x, pointB.y, pointB.z);<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>}<o:p></o:p></span></pre>
- <h2><a name="_Toc330902780">Animation</a></h2>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Animation
- is a key component to bringing your game to life. Within gameplay, there is support
- to create both property animations and character animations. The </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Animation</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> class provides
- factory methods for creating animations on properties of classes that extend </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::AnimationTarget</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>. Character
- animations from within the scene file are imported and stored on the </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::AnimationTarget</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> they target.
- All animations on a </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>gameplay::AnimationTarget</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> can be
- obtained by ID.<o:p></o:p></span></p>
- <h3>AnimationTargets</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>gameplay::Transform</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>, </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Node</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>, and </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::MaterialParameter</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> are animation
- targets.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Animations
- can be created on the scale, rotation and translation properties of the </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Transform</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>. Animations
- can also target any </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>gameplay::Node</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>, which extends
- </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>gameplay::Transform</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>. <o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Also,
- animations can target instances of </span><span style='font-size:12.0pt;
- font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::MaterialParameter</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>. Any
- parameters on a material of type </span><span style='font-size:12.0pt;
- font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>float</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>, </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>integer</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>, or 2-, 3-,
- and 4-dimensional vectors can be animated.<o:p></o:p></span></p>
- <h3>Creating property animations</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Animations
- are created from the </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>gameplay::AnimationTarget</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>. </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>AnimationTarget</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> provides
- methods to create simple two key frame animations using </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>createAnimationFromTo()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>, and </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>createAnimationFromBy()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>. Multiple key
- frame sequences can be created from </span><span style='font-size:12.0pt;
- font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>createAnimation()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>. <o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Here
- is an example of how to create a multiple key frame animation on a node</span><span
- style='font-size:12.0pt;font-family:"Times New Roman","serif";mso-ascii-font-family:
- "Malgun Gothic"'>’</span><span style='font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman"'>s translation properties:<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <pre style='background:white'><span style='font-family:Consolas;color:blue'>unsigned</span><span
- style='font-family:Consolas;color:black'> </span><span style='font-family:
- Consolas;color:blue'>int</span><span style='font-family:Consolas;color:black'> keyCount = 3; <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:blue'>unsigned</span><span
- style='font-family:Consolas;color:black'> </span><span style='font-family:
- Consolas;color:blue'>long</span><span style='font-family:Consolas;color:black'> keyTimes[] = {0L, 500L, 1000L}; <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:blue'>float</span><span
- style='font-family:Consolas;color:black'> keyValues[] = <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>{ <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> 0.0f, -4.0f, 0.0f, <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> 0.0f, 0.0f, 0.0f, <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> 0.0f, 4.0f, 0.0f <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>}; <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>Animation* sampleAnim = enemyNode->createAnimation(</span><span
- style='font-family:Consolas;color:#A31515'>"sample"</span><span
- style='font-family:Consolas;color:black'>,<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span>Transform::ANIMATE_TRANSLATE, <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span>keyCount, keyTimes, keyValues, <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span>Curve::LINEAR);</span><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><span style='mso-spacerun:yes'> </span></span><span
- style='font-family:Consolas;color:black'><o:p></o:p></span></pre>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Here
- is the same animation specified in a </span><span style='font-size:12.0pt;
- font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>.animation</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> file that can
- also be loaded by the </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>gameplay::AnimationTarget</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>:<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>animation
- sample<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>{<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>property = ANIMATE_TRANSLATE<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>keyCount = 3<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>keyTimes = 0, 500, 1000<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>keyValues = 0.0 -4.0 0.0 0.0 0.0 0.0 0.0
- 4.0 0.0<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>curve = LINEAR<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>}</span><span
- style='mso-bidi-font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'><o:p></o:p></span></p>
- <p class=MsoNormal><span style='mso-bidi-font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>To
- create the animation from this file you would call the following code: <o:p></o:p></span></p>
- <p class=MsoNormal><span style='mso-bidi-font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <pre style='background:white'><span style='font-family:Consolas;color:black'>Animation* sampleAnim = enemyNode->createAnimation(</span><span
- style='font-family:Consolas;color:#A31515'>"sample"</span><span
- style='font-family:Consolas;color:black'>, </span><span style='font-family:
- Consolas;color:#A31515'>"sample.animation"</span><span
- style='font-family:Consolas;color:black'>);<o:p></o:p></span></pre>
- <h3>Curves</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>There
- are many different interpolation types defined within the </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Curve</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> class that can
- be used to interpolate through the animation data.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <h3>Character animations</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Character
- animations are complex because they can be composed of multiple animations
- targeting numerous joints within a character model. For this reason, character
- animations are usually included within the scene file and are imported when the
- </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>.gpb</span><span style='font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman"'> file is loaded. To simplify and optimize all animations
- under single animation. The gameplay-encoder supports grouping all the
- animation on joints leading up to a common root joint under a single animation.
- This is an option in the gameplay-encoder using the </span><span
- style='font-size:12.0pt;font-family:"Times New Roman","serif";mso-ascii-font-family:
- "Malgun Gothic"'>–</span><span style='font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman"'>groupAnimations or </span><span style='font-size:12.0pt;
- font-family:"Times New Roman","serif";mso-ascii-font-family:"Malgun Gothic"'>–</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>g option. This
- groups them under a single animation called </span><span style='font-size:12.0pt;
- font-family:"Times New Roman","serif";mso-ascii-font-family:"Malgun Gothic"'>‘</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>animations</span><span
- style='font-size:12.0pt;font-family:"Times New Roman","serif";mso-ascii-font-family:
- "Malgun Gothic"'>’</span><span style='font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman"'>.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>These
- animations can be obtained by calling </span><span style='font-size:12.0pt;
- font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>AnimationTarget::getAnimation()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> specifying the
- animation</span><span style='font-size:12.0pt;font-family:"Times New Roman","serif";
- mso-ascii-font-family:"Malgun Gothic"'>’</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>s ID.<o:p></o:p></span></p>
- <h3>AnimationClips</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>A
- </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>gameplay::AnimationClip</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'> is created from the </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::Animation</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> class and is a
- snapshot of the animation that can be played back, manipulated with speed and
- repeated.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Here
- is an </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>AnimationClip</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> that has been
- created from a character animation of an elf:<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <pre style='background:white'><span style='font-family:Consolas;color:black'>AnimationClip* elfRun = elfAnimation->createClip(</span><span
- style='font-family:Consolas;color:#A31515'>"elf_run"</span><span
- style='font-family:Consolas;color:black'>, 200L, 310L);<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>elfRun->setRepeatCount(AnimationClip::REPEAT_INDEFINITE);<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>elfRun->setSpeed(2.0f);<o:p></o:p></span></pre>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Animation
- clips can be specified within an </span><span style='font-size:12.0pt;
- font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>.animation</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> file that can
- be given to an animation to create clips. The total number of frames that make
- up the animation must be specified in the file. The begin and end parameters of
- each clip are specified in frames. An assumption that the animation runs at 60
- frames per second has been made. Here is an example of an </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>.animation</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> file for an
- elf animation:<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>animation
- elf<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>{<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>frameCount = 350<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>clip idle<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>{<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>begin =<span style='mso-spacerun:yes'>
- </span>0<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>end = 75<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>repeatCount = INDEFINITE<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>}<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>clip walk<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>{<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>begin = 75<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>end = 200<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>repeatCount = INDEFINITE<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>}<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>clip run<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>{<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>begin = 200<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>end = 310<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-tab-count:1'> </span><span style='mso-spacerun:yes'> </span><span
- style='mso-spacerun:yes'> </span>repeatCount = INDEFINITE<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>speed = 2.0<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>}<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>clip jump<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>{<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>begin = 310<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>end = 350<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>repeatCount = 1<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>}<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>}</span><span
- style='mso-bidi-font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'> <o:p></o:p></span></p>
- <p class=MsoNormal><span style='mso-bidi-font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='mso-bidi-font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Animations
- can be played back by calling </span><span style='font-size:12.0pt;font-family:
- "Courier New";mso-bidi-font-family:"Times New Roman"'>Animation::play()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>, passing a
- clip ID, or by calling </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>AnimationClip::play()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> directly on
- the clip. Animations can also be paused and stopped in the same fashion.<o:p></o:p></span></p>
- <h3>Animation blending</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>gameplay::AnimationClip</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'> class has a blend weight property that
- can be used to blend multiple animations. There is also a method called </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>AnimationClip::crossFade()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> that
- conveniently provides the ability to fade the currently playing clip out and
- fade in the specified clip over a given period of time.<o:p></o:p></span></p>
- <h3>AnimationClip listeners</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Animation
- events can be triggered on a </span><span style='font-size:12.0pt;font-family:
- "Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::AnimationClip</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> by registering
- instances of </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>gameplay::AnimationClip::Listener</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> with the clip.
- The listeners can be registered to be called back at the beginning or end of
- the clip, or at any specific time throughout the playback of the clip. This can
- be useful for starting a particle emitter when a character</span><span
- style='font-size:12.0pt;font-family:"Times New Roman","serif";mso-ascii-font-family:
- "Malgun Gothic"'>’</span><span style='font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman"'>s foot hits the ground in an animation, or to play back a
- sound of a gun firing during an animation of an enemy shooting.<a
- name=d18e3a1310></a><o:p></o:p></span></p>
- <h2><a name="_Toc330902781">Audio</a></h2>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>You
- can integrate 3-D audio into your game using the audio services supported by
- gameplay. The framework uses a very traditional way of representing audio. The </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::AudioController</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> manages all of
- the playing audio sources.<o:p></o:p></span></p>
- <h3>Creating an AudioSource</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>An
- </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>AudioSource</span><span style='font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman"'> can be created from audio files or from a .audio property
- file. Ogg audio files are compressed, so they use less memory than .wav files.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <pre style='background:white'><span style='font-family:Consolas;color:black'>AudioSource* wheelsSound = AudioSource::create(</span><span
- style='font-family:Consolas;color:#A31515'>"res/longboard.wav"</span><span
- style='font-family:Consolas;color:black'>);<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>AudioSource* backgroundMusic = AudioSource::create(</span><span
- style='font-family:Consolas;color:#A31515'>"res/music.ogg"</span><span
- style='font-family:Consolas;color:black'>);<o:p></o:p></span></pre>
- <h3>Playing the AudioSource</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- following example illustrates how to play audio:<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>wheelsSound->play();<o:p></o:p></span></p>
- <h3>Updating the AudioListener</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>By
- default, the </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>AudioListener</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> is bound to
- the active camera of the scene. You can manually bind the camera to the </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::AudioListener</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> using </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::AudioListener::setCamera()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>.<o:p></o:p></span></p>
- <h3>Audio Properties</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>gameplay::AudioSource</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'> class has methods for modifying the
- properties of the </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>AudioSource</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>, such as
- pitch, gain, and velocity.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Audio
- sources can be loaded from </span><span style='font-size:12.0pt;font-family:
- "Courier New";mso-bidi-font-family:"Times New Roman"'>.audio</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> property files
- to make it easier to set these properties.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>audio
- fireball<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>{<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>path = res/audio/fireball.wav<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>looped = false<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>gain = 0.7<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>pitch = 0.5<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>velocity = 0.5 0.0 1.0<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>}</span><span
- style='mso-bidi-font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'><o:p></o:p></span></p>
- <h3>Binding an AudioSource to a node</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>An
- </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>AudioSource</span><span style='font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman"'> can be bound to a </span><span style='font-size:12.0pt;
- font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>Node</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> in your scene
- using </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>Node::setAudioSource()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>. The position
- of the audio source is automatically updated when the node is transformed.<a
- name=d19e3a1310></a><o:p></o:p></span></p>
- <h2><a name="_Toc330902782">User Interface</a></h2>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- gameplay framework provides a set of user interface (UI) controls that can be
- used to create menus and HUDs. To add UI elements to your game, you'll create a
- form from a properties file and call update() and draw() on it. Other than
- adding listeners to buttons and modifying controls programmatically, there's
- not much code to write in your game. Most of the work of defining a form's look
- and feel happens in the .form and .theme files, as well as the texture atlas
- used by the theme.<o:p></o:p></span></p>
- <h3>Creating a form</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>To
- create a form, pass a properties file to </span><span style='font-size:12.0pt;
- font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>Form::create()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> to instantiate
- a form. The top-most namespace in the file must be named 'form'. The following
- properties are available for forms:<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>form <formID>
- <o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>{<span
- style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>// Form properties.<span
- style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>theme <span style='mso-tab-count:3'> </span>=
- <Path to .theme file><span style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>layout <span style='mso-tab-count:3'> </span>=
- <Layout::Type constant><span style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>style <span style='mso-tab-count:3'> </span>=
- <styleID><span style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>position <span style='mso-tab-count:3'> </span>=
- <x, y><span style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>alignment <span style='mso-tab-count:2'> </span>=
- <Control::Alignment constant><span style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>size<span style='mso-spacerun:yes'>
- </span><span style='mso-tab-count:3'> </span>= <width, height><span
- style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>autoWidth <span style='mso-tab-count:2'> </span>=
- <bool><span style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>autoHeight <span style='mso-tab-count:2'> </span>=
- <bool><span style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>width <span style='mso-tab-count:3'> </span>=
- <width><span style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>height <span style='mso-tab-count:3'> </span>=
- <height><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>// All the Controls within this Form.<span
- style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>container { }<span
- style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>label { }<span style='mso-spacerun:yes'>
- </span><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>textBox { }<span
- style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>button { }<span
- style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>checkBox { }<span
- style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>radioButton { }<span
- style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'><span
- style='mso-spacerun:yes'> </span>slider { }<span style='mso-spacerun:yes'>
- </span><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas'>}</span><span
- style='mso-bidi-font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'><span style='mso-spacerun:yes'> </span></span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p></o:p></span></p>
- <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></b></p>
- <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Form property
- information:</span></b><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- following is a list of form properties, and their purpose:<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>theme</span></b><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>: See
- "Creating a theme" below.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>layout</span></b><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>: Member of
- Layout::Type enum.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>style</span></b><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>: A style from
- the theme.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>position</span></b><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>: The on-screen
- position, in pixels.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>alignment</span></b><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>: Align the
- form's position within the bounds of the screen. Note the position property
- will be ignored if the </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>alignment</span><span style='font-size:
- 12.0pt;mso-bidi-font-family:"Times New Roman"'> property has been set.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>size</span></b><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>: The size of
- the form, in pixels.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>autoWidth</span></b><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>: Use of this
- property will result in a form with a width spanning the entire display. Note
- the width property will be ignored if </span><span style='font-size:12.0pt;
- font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>autoWidth</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> has been set.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>autoHeight</span></b><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>: Use of this
- property will result in a form with a height spanning the entire display. The
- height property will be ignored if </span><span style='font-size:12.0pt;
- font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>autoHeight</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> has been set.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>width</span></b><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>: Can be used
- in place of </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>size</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>height</span></b><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>: Can be used
- in place of </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>size</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>A
- style determines the look of a control and is defined in the theme file,
- detailed below. Position and size attributes are determined for controls using
- the same properties as listed above for forms. Controls can be aligned within
- their parent container by using the </span><span style='font-size:12.0pt;
- font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>alignment</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> property.
- Setting </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>autoWidth</span><span style='font-size:
- 12.0pt;mso-bidi-font-family:"Times New Roman"'> or </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>autoHeight</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> to true will
- result in a control the width or height of its parent container. You can add
- controls to the form by placing namespaces within it. The available controls
- are:<o:p></o:p></span></p>
- <p class=MsoNormal><a name=d19e113a1310></a><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'><span style='mso-tab-count:2'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:21.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>Container: A container has all the same
- available properties as a form, except for 'theme'. You can add more controls
- within a container to group them together, and/or to apply a different layout
- type to a group of controls.<span style='mso-tab-count:2'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:21.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>Label: A simple text label. Available
- properties: 'style', 'position', </span><span style='mso-bidi-font-size:12.0pt;
- font-family:"Times New Roman","serif";mso-ascii-font-family:"Malgun Gothic"'>‘</span><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>alignment</span><span
- style='mso-bidi-font-size:12.0pt;font-family:"Times New Roman","serif";
- mso-ascii-font-family:"Malgun Gothic"'>’</span><span style='mso-bidi-font-size:
- 12.0pt;mso-bidi-font-family:"Times New Roman"'>, 'size', </span><span
- style='mso-bidi-font-size:12.0pt;font-family:"Times New Roman","serif";
- mso-ascii-font-family:"Malgun Gothic"'>‘</span><span style='mso-bidi-font-size:
- 12.0pt;mso-bidi-font-family:"Times New Roman"'>autoWidth</span><span
- style='mso-bidi-font-size:12.0pt;font-family:"Times New Roman","serif";
- mso-ascii-font-family:"Malgun Gothic"'>’</span><span style='mso-bidi-font-size:
- 12.0pt;mso-bidi-font-family:"Times New Roman"'>, </span><span style='mso-bidi-font-size:
- 12.0pt;font-family:"Times New Roman","serif";mso-ascii-font-family:"Malgun Gothic"'>‘</span><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>autoHeight</span><span
- style='mso-bidi-font-size:12.0pt;font-family:"Times New Roman","serif";
- mso-ascii-font-family:"Malgun Gothic"'>’</span><span style='mso-bidi-font-size:
- 12.0pt;mso-bidi-font-family:"Times New Roman"'>, and 'text'.<span
- style='mso-tab-count:2'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:21.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>TextBox: Editable text label. A TextBox
- control has the same available properties as label.<span style='mso-tab-count:
- 2'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:21.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>Button: A button. A button control has
- the same available properties as label.<span style='mso-tab-count:2'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:21.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>CheckBox: A button that toggles between
- 'checked' and 'unchecked' states when tapped or clicked. A CheckBox has the
- same available properties as label, plus 'checked' for its starting state.<span
- style='mso-tab-count:2'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:21.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>RadioButton: RadioButton has the same
- available properties as CheckBox, with an additional property, 'group'. Only
- one radio button in a given group can be selected at a time.<span
- style='mso-tab-count:2'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:21.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>Slider: A marker that can slide along a
- track between its end-caps. A slider makes use of the following properties: <o:p></o:p></span></p>
- <p class=MsoNormal style='text-align:justify'><span style='mso-bidi-font-size:
- 12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal style='text-align:justify'><span style='font-size:10.0pt;
- font-family:Consolas'>slider <controlID><o:p></o:p></span></p>
- <p class=MsoNormal style='text-align:justify'><span style='font-size:10.0pt;
- font-family:Consolas'>{<span style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='text-align:justify'><span style='font-size:10.0pt;
- font-family:Consolas'><span style='mso-spacerun:yes'> </span><span
- style='mso-spacerun:yes'> </span>style = <styleID> <span
- style='mso-spacerun:yes'> </span>// A style from the theme.<span
- style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='text-align:justify'><span style='font-size:10.0pt;
- font-family:Consolas'><span style='mso-spacerun:yes'> </span><span
- style='mso-spacerun:yes'> </span>position = <x, y> <span
- style='mso-spacerun:yes'> </span>// Position of the control on-screen, in
- pixels.<span style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='text-align:justify'><span style='font-size:10.0pt;
- font-family:Consolas'><span style='mso-spacerun:yes'> </span><span
- style='mso-spacerun:yes'> </span>size = <width, height> // The size of
- the control, in pixels.<span style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='text-align:justify'><span style='font-size:10.0pt;
- font-family:Consolas'><span style='mso-spacerun:yes'> </span><span
- style='mso-spacerun:yes'> </span>min = <float> <span
- style='mso-spacerun:yes'> </span>// The value of the left- /
- bottom-most point on the slider.<span style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='text-align:justify'><span style='font-size:10.0pt;
- font-family:Consolas'><span style='mso-spacerun:yes'> </span><span
- style='mso-spacerun:yes'> </span>max = <float> <span
- style='mso-spacerun:yes'> </span>// The value of the right- / top-most
- point on the slider.<span style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='text-align:justify'><span style='font-size:10.0pt;
- font-family:Consolas'><span style='mso-spacerun:yes'> </span><span
- style='mso-spacerun:yes'> </span>value = <float> <span
- style='mso-spacerun:yes'> </span>// The default position of the
- marker.<span style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='text-align:justify'><span style='font-size:10.0pt;
- font-family:Consolas'><span style='mso-spacerun:yes'> </span><span
- style='mso-spacerun:yes'> </span>step = <float> <span
- style='mso-spacerun:yes'> </span>// If greater than 0, force the marker
- to snap to discrete<o:p></o:p></span></p>
- <p class=MsoNormal style='text-align:justify'><span style='font-size:10.0pt;
- font-family:Consolas'><span style='mso-spacerun:yes'> </span><span
- style='mso-spacerun:yes'> </span>// multiples of
- ‘step’.<o:p></o:p></span></p>
- <p class=MsoNormal style='text-align:justify'><span style='font-size:10.0pt;
- font-family:Consolas'><span style='mso-spacerun:yes'> </span><span
- style='mso-spacerun:yes'> </span>text = <string> <span
- style='mso-spacerun:yes'> </span>// Text to display above, below or
- alongside the slider<o:p></o:p></span></p>
- <p class=MsoNormal style='text-align:justify'><span style='font-size:10.0pt;
- font-family:Consolas'><span style='mso-spacerun:yes'> </span><span
- style='mso-spacerun:yes'> </span>// (depending on the
- style).<o:p></o:p></span></p>
- <p class=MsoNormal style='text-align:justify'><span style='font-size:10.0pt;
- font-family:Consolas'>}</span><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'><o:p></o:p></span></p>
- <h3>Creating a theme</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>A
- theme contains the information a form needs to determine the look of its
- controls. A theme has one property, 'texture', which points to a texture atlas
- containing the images used by the theme. Cursor images, skins, and lists of
- images used by controls are defined in their own namespaces. The rest of the
- theme consists of style namespaces. A style describes the border, margin, and
- padding of a control, what images, skins, and cursors are associated with a
- control, and font properties to apply to a control's text.<span
- style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <pre style='background:white'><span style='font-family:Consolas;color:black'>theme <themeID><o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>{ <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> texture = <Path to texture> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> cursor <cursorID> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> { <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> region = <x, y, width, height> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> color = <#ffffffff> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> } <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> imageList <imageID> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> { <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> image checked <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> { <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> region = <x, y, width, height> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> } <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> image unchecked <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> { <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> region = <x, y, width, height> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> color = <#fffffffff> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> } <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> color = <#fffffffff> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> } <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> skin <skinID> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> { <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> border <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> { <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> top = <int> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> bottom = <int> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> left = <int> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> right = <int> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> } <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> region = <x, y, width, height> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> color = <#ffffffff> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> } <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'><o:p> </o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'><o:p> </o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'><o:p> </o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'><o:p> </o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> style <styleID> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> { <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> margin <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> { <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> top = <int> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> bottom = <int> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> left = <int> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> right = <int> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> } <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> padding <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> { <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> top = <int> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> bottom = <int> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> left = <int> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> right = <int> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> } <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> stateNormal <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> { <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> skin = <skinID> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> imageList = <imageID> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> cursor = <cursorID> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> font = <Path to font> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> fontSize = <int> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> textColor = <#ffffffff> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> textAlignment = <Control::Alignmentconstant> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> rightToLeft = <bool> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> opacity = <float> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> } <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> stateFocus <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> { <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> skin = <skinID> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> ... <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> } <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> stateActive <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> { <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> skin = <skinID> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> ... <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> } <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> stateDisabled <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> { <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> skin = <skinID> <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> ...<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> } <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> } <o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>} <o:p></o:p></span></pre>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Theme property
- information:</span></b><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- following is a list of theme properties, and their sub-properties if
- applicable.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>texture</span></b><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>: The path to
- the texture atlas used by this theme. <o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>cursor</span></b><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>: Describes a
- single image, to be used as a cursor.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Sub-properties
- of cursor:<o:p></o:p></span></p>
- <p class=MsoNormal><a name=d19e173a1310></a><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal style='margin-left:21.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>region: Region within the texture, in
- pixels.<span style='mso-tab-count:2'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:21.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>color: Blend color to apply to this
- cursor.<span style='mso-tab-count:2'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:21.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>imageList: A collection of images used
- by controls. <a name=d19e183a1310></a><span style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:42.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>image: A single image within the list. <a
- name=d19e187a1310></a><span style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:63.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>region: Region within the texture, in
- pixels. <o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:63.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>color: Optionally override image-list
- blend color. <o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:42.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>color: Default blend color for images
- that don't specify their own.<o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:.25in;text-indent:-9.0pt'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><span
- style='mso-tab-count:6'> </span><o:p></o:p></span></p>
- <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>skin</span></b><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>: Defines the
- border and background of a control.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Sub-properties
- of skin:<o:p></o:p></span></p>
- <p class=MsoNormal><a name=d19e210a1310></a><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal style='margin-left:21.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>border : The corners and edges of the
- given region will be used as border sprites. <a name=d19e214a1310></a><span
- style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:42.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>top : Height of top border, top
- corners. <o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:42.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>bottom: Height of bottom border, bottom
- corners. <o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:42.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>left: Width of left border, left
- corners. <o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:42.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>right: Width of right border, right
- corners.<span style='mso-tab-count:2'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:21.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>region: Total container region
- including the entire border. A region within the texture, in pixels.<span
- style='mso-tab-count:1'> </span><span style='mso-tab-count:1'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:21.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>color: The blend color to apply to this
- skin.<o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:.25in;text-indent:-9.0pt'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal style='margin-left:.25in;text-indent:-9.0pt'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><span
- style='mso-tab-count:6'> </span><o:p></o:p></span></p>
- <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>style</span></b><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>: A combination
- of theme attributes that can be applied to any control.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Sub-properties
- of style:<o:p></o:p></span></p>
- <p class=MsoNormal><a name=d19e244a1310></a><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'><span style='mso-tab-count:2'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:21.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>margin: Layouts may make use of a
- style's margin to put space between adjacent controls. <a name=d19e248a1310></a><span
- style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:42.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>top: Empty space above a control. <o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:42.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>bottom: Empty space below a control. <o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:42.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>left: Empty space left of a control. <o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:42.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>right: Empty space right of a control.<span
- style='mso-tab-count:2'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:21.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>padding: The space between a control's
- border and its content. <a name=d19e265a1310></a><span
- style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:42.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>top: Empty space between the top border
- and content. <o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:42.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>bottom: Empty space between the top
- border and content. <o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:42.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>left: Empty space between the left
- border and content. <o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:42.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>right: Empty space between the right
- border and content.<span style='mso-tab-count:2'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:21.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>stateNormal: Properties used when a
- control is in the normal state. <a name=d19e282a1310></a><span
- style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:42.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>skin: Skin to use for border and
- background sprites. <o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:42.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>imageList: Images to use for this
- state. <o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:42.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>cursor: Cursor to use when the mouse is
- over this control. <o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:42.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>font: Font to use for rendering text. <o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:42.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>fontSize: Size of text. <o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:42.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>textColor: Color of text. <o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:42.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>textAlignment: Align text within the
- control</span><span style='mso-bidi-font-size:12.0pt;font-family:"Times New Roman","serif";
- mso-ascii-font-family:"Malgun Gothic"'>’</span><span style='mso-bidi-font-size:
- 12.0pt;mso-bidi-font-family:"Times New Roman"'>s content area. <o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:42.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>rightToLeft: Whether to draw text from
- right to left. <o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:42.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>opacity: Opacity to apply to all
- text/border/icon colors.<span style='mso-tab-count:2'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:21.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>stateFocus: Properties used when a
- control is in focus. <a name=d19e315a1310></a><span
- style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:42.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>Same properties as stateNormal.
- Unspecified properties will inherit from stateNormal.<span style='mso-tab-count:
- 2'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:21.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>stateActive: Properties used when a
- control is active. This is when a touch/mouse is down within the control. If
- not specified, the normal overlay will be used. <a name=d19e323a1310></a><span
- style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:42.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>Same properties as stateNormal.
- Unspecified properties will inherit from stateNormal.<span style='mso-tab-count:
- 2'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:21.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>stateDisabled: Properties used when a
- control is disabled. If not specified, the normal overlay will be used. <a
- name=d19e332a1310></a><span style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:42.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>Same properties as stateNormal.
- Unspecified properties will inherit from stateNormal.<o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:.25in;text-indent:-9.0pt'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><span
- style='mso-tab-count:6'> </span><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- top-level property of a theme is the path to its texture atlas. This is a
- single image containing all the sprites used by the theme. The skin, cursor,
- and imageList namespaces within a theme file refer to regions of this image to
- use to represent their various states.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Skin:</span></b><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> A rectangular
- area representing a border and background. A container namespace will specify
- the rectangular region and blend color as well as the border sizes. From this,
- the region will be divided into nine areas: four corners, four borders, and the
- center background area. Note that the top and bottom borders will be stretched
- horizontally; the left and right borders will stretch vertically; and the
- center of the container will stretch in both directions. The corners will never
- be stretched. It's perfectly valid to set any border size to 0. <o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Cursor</span></b><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>: A single
- rectangular area representing a mouse cursor.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>ImageList</span></b><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>: A collection
- of images used by controls. Images for multiple control types can be combined
- into one list. Controls use the following images:<a name=d19e357a1310></a><span
- style='mso-tab-count:2'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:21.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>CheckBox: 'checked', 'unchecked'<span
- style='mso-tab-count:2'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:21.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>RadioButton: 'selected, 'unselected'<span
- style='mso-tab-count:2'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:21.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>Slider: 'minCap', 'maxCap', 'track',
- 'marker'<span style='mso-tab-count:2'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:21.0pt;text-align:justify;text-indent:
- -21.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:
- 8.0pt;mso-bidi-font-size:12.0pt;font-family:Symbol;mso-fareast-font-family:
- Symbol;mso-bidi-font-family:Symbol'><span style='mso-list:Ignore'>·<span
- style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]><span style='mso-bidi-font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>TextBox: 'textCaret'</span><span
- style='mso-tab-count:6'> </span><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p></o:p></span></p>
- <p class=MsoNormal><o:p> </o:p></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Note
- that you may specify separate image lists for each state in a style.<o:p></o:p></span></p>
- <h3>Adding a form to your game </h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Once
- you have a form, theme, and texture atlas, only a small amount of code is
- required in order to actually display your UI within your game. There are two
- options for displaying forms: two-dimensionally, where the form is drawn
- directly to the display and three-dimensionally, where the form is assigned to
- a node within the game's scene and displayed on a quad. <o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- 2-D case is simple. To initialize a form, pass the path to your .form file to </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>Form::create()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> to be returned
- a pointer to your form. Now, simply call </span><span style='font-size:12.0pt;
- font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>Form::update()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> on the form
- during your game's </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>update()</span><span style='font-size:
- 12.0pt;mso-bidi-font-family:"Times New Roman"'> method, and call </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>Form::draw()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> on the form
- during </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>render()</span><span style='font-size:
- 12.0pt;mso-bidi-font-family:"Times New Roman"'> . See the section below on
- event handling to learn how to react to player input from within a form. <o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- 3-D method of drawing forms is somewhat more advanced. For starters, you'll
- need a scene with at least one node in it. Call </span><span style='font-size:
- 12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>Node::setForm()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> to attach the
- form to the node. This call will also generate a rectangular model with the
- dimensions of the form. Scale, rotate, and translate the node as necessary.
- Now, calling </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>Form::draw()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> on the form
- will render the contents of the form into a framebuffer and use that
- framebuffer to texture the form's model.<o:p></o:p></span></p>
- <h3>Event handling within forms</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Controls
- will trigger events when the user interacts with them. You can handle these
- events by setting listeners on individual controls. <o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>All
- controls can trigger the mouse / touch events </span><span style='font-size:
- 12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>PRESS</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> , </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>RELEASE</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> , and </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>CLICK</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> . Sliders,
- check boxes, and radio buttons can also trigger a </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>VALUE_CHANGED</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> event so that
- you can update your game as a slider is moving or when a radio button becomes
- unselected. Finally, text boxes trigger a </span><span style='font-size:12.0pt;
- font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>TEXT_CHANGED</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> event any time
- a character is entered or deleted (but not when the cursor is moved within the
- text box). Use </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>TEXT_CHANGED</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> along with the
- </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>getLastKeyPress()</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'> method on a </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>TextBox</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> to do things
- like accepting a player name when the return key is pressed. <o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>To
- retrieve a control from your form, call </span><span style='font-size:12.0pt;
- font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>Form::getControl()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> with the ID of
- the control you're looking for. Cast this to the correct control pointer type
- and then call </span><span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>addListener()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> on it. This
- method takes an object that implements </span><span style='font-size:12.0pt;
- font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>Control::Listener</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> as well as an
- int representing the events to listen for. You can bitwise-OR together event
- types. For example, the following code listens for </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>PRESS</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> and </span><span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>RELEASE</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> events on a
- button: <o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <pre style='background:white'><span style='font-family:Consolas;color:black'>Button* myButton = </span><span
- style='font-family:Consolas;color:blue'>static_cast</span><span
- style='font-family:Consolas;color:black'><Button*>(myForm->getControl(</span><span
- style='font-family:Consolas;color:#A31515'>"myButton"</span><span
- style='font-family:Consolas;color:black'>);<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>myButton->addListener(</span><span
- style='font-family:Consolas;color:blue'>this</span><span style='font-family:
- Consolas;color:black'>, Control::Listener::PRESS | Control::Listener::RELEASE);</span><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> </span><span
- style='font-family:Consolas;color:black'><o:p></o:p></span></pre>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>In
- this example, the game itself implements </span><span style='font-size:12.0pt;
- font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>Control::Listener</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>. This is easy
- to do as there's only one method a listener needs to implement, which should
- look something like this:<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <pre style='background:white'><span style='font-family:Consolas;color:blue'>void</span><span
- style='font-family:Consolas;color:black'> MyGame::controlEvent(Control* control, EventType evt)<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>{<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:blue'>switch</span><span style='font-family:
- Consolas;color:black'>(evt)<o:p></o:p></span></pre><pre style='background:white'><span
- style='font-family:Consolas;color:black'> {<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:blue'>case</span><span style='font-family:
- Consolas;color:black'> Control::Listener::PRESS:<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:blue'>if</span><span style='font-family:Consolas;
- color:black'> (strcmp(</span><span style='font-family:Consolas;color:#A31515'>"myButton"</span><span
- style='font-family:Consolas;color:black'>, control->getID()) == 0)<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> {<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:green'>// Do something.</span><span
- style='font-family:Consolas;color:black'><o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> }<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:blue'>break</span><span style='font-family:
- Consolas;color:black'>;<o:p></o:p></span></pre><pre style='background:white'><span
- style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:blue'>case</span><span style='font-family:
- Consolas;color:black'> Control::Listener::RELEASE:<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:blue'>if</span><span style='font-family:Consolas;
- color:black'> (strcmp(</span><span style='font-family:Consolas;color:#A31515'>"myButton"</span><span
- style='font-family:Consolas;color:black'>, control->getID()) == 0)<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> {<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:green'>// Do something else.</span><span
- style='font-family:Consolas;color:black'><o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> }<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'> </span><span
- style='font-family:Consolas;color:blue'>break</span><span style='font-family:
- Consolas;color:black'>;<o:p></o:p></span></pre><pre style='background:white'><span
- style='font-family:Consolas;color:black'> }<o:p></o:p></span></pre><pre
- style='background:white'><span style='font-family:Consolas;color:black'>}<o:p></o:p></span></pre>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Note
- that </span><span style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:
- "Times New Roman"'>getControl()</span><span style='font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman"'> is also a method on Container. If multiple controls share
- the same ID but are children of separate containers, the parent container can
- be retrieved first and then </span><span style='font-size:12.0pt;font-family:
- "Courier New";mso-bidi-font-family:"Times New Roman"'>Container::getControl()</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> called to
- retrieve the specific control needed.<a name=d20e3a1310></a><o:p></o:p></span></p>
- <h2><a name="_Toc330902783">Scripting</a></h2>
- <p class=MsoNormal>The gameplay framework has a full set of Lua script bindings
- allowing users to write the majority of their game completely from scripts.
- Also included is an open-source tool that can be used to generate bindings for
- user-defined classes (including classes that depend on features and technology
- of the gameplay framework itself).</p>
- <h3>Writing Lua scripts</h3>
- <p class=MsoNormal>To write Lua scripts, you can use any text editor or IDE. If
- Visual Studio is your editor of choice, it is recommended that you install the
- Lua Language Support extension, which adds syntax highlighting to the editor
- (available here: <a href="http://vslua.codeplex.com/">http://vslua.codeplex.com/</a>).</p>
- <p class=MsoNormal><o:p> </o:p></p>
- <p class=MsoNormal>To generate your own bindings, you will need to download and
- install Doxygen (available here: <a href="http://www.doxygen.org/"><span
- style='mso-bidi-font-family:TradeGothicNextLTPro-Lt'>http://www.doxygen.org</span></a>).</p>
- <h3>Lua Basics</h3>
- <p class=MsoNormal>For an introductory look at scripting with Lua, including
- basic language features, visit <a href="http://www.lua.org/pil/">http://www.lua.org/pil/</a>.
- Note that the documentation available at this link is aimed at Lua 5.0 and will
- contain some outdated APIs. However, the basic usage of the language remains
- the same.</p>
- <p class=MsoNormal><o:p> </o:p></p>
- <p class=MsoNormal>There are two conventions that gameplay uses within its Lua
- script bindings. First, in order to create a new object, the user calls the <b
- style='mso-bidi-font-weight:normal'>new</b> function on the class and passes
- the correct arguments for the corresponding C++ constructor. e.g.<span
- style='font-size:10.0pt;font-family:Consolas;color:blue'> </span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas;
- color:blue'><o:p> </o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:green'>-- Create a new Vector2 object.</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'><o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas;
- color:blue'>local</span><span style='font-size:10.0pt;font-family:Consolas;
- color:black'> v = Vector2</span><span style='font-size:10.0pt;
- font-family:Consolas;color:teal'>.</span><span style='font-size:10.0pt;
- font-family:Consolas;color:black'>new(1.0, 3.7)<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas;
- color:black'><o:p> </o:p></span></p>
- <p class=MsoNormal>Second, to access or set a public member variable of a
- class, the user simply calls a Lua function with the same name, passing no
- arguments to access the variable or passing one argument in order to set the
- variable. e.g.<span style='font-size:10.0pt;font-family:Consolas;color:blue'> <o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:10.0pt;font-family:Consolas;
- color:blue'><o:p> </o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:green'>-- Print out the x member variable.</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'><o:p></o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'>print(v</span><span
- style='font-size:10.0pt;font-family:Consolas;color:teal'>:</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'>x())<o:p></o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> <o:p></o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:green'>-- Set the y member variable to 4.2.</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'><o:p></o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'>v</span><span
- style='font-size:10.0pt;font-family:Consolas;color:teal'>:</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'>y(4.2)<o:p></o:p></span></p>
- <h3>Game <span style='font-family:"Times New Roman","serif";mso-ascii-font-family:
- "Malgun Gothic"'>–</span> Script Event Callbacks</h3>
- <p class=MsoNormal>In order to write a game primarily using Lua scripts, one
- must register for the main game events (initialize, update, render, and
- finalize), along with the desired input event handlers. To do this, you must
- edit the <span style='font-family:"Times New Roman","serif";mso-ascii-font-family:
- "Malgun Gothic";mso-bidi-font-family:TradeGothicNextLTPro-Lt'>‘</span>scripts<span
- style='font-family:"Times New Roman","serif";mso-ascii-font-family:"Malgun Gothic";
- mso-bidi-font-family:TradeGothicNextLTPro-Lt'>’</span> section of the game<span
- style='font-family:"Times New Roman","serif";mso-ascii-font-family:"Malgun Gothic";
- mso-bidi-font-family:TradeGothicNextLTPro-Lt'>’</span>s game.config file. If
- the user has a Lua script with functions for the four major events and
- functions that handle the key and touch input, the <span style='font-family:
- "Times New Roman","serif";mso-ascii-font-family:"Malgun Gothic";mso-bidi-font-family:
- TradeGothicNextLTPro-Lt'>‘</span>scripts<span style='font-family:"Times New Roman","serif";
- mso-ascii-font-family:"Malgun Gothic";mso-bidi-font-family:TradeGothicNextLTPro-Lt'>’</span>
- section would look something like this:</p>
- <p class=MsoNormal><o:p> </o:p></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'>scripts<o:p></o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'>{<o:p></o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> initialize = res/script.lua#initialize<o:p></o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> update = res/script.lua#update<o:p></o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> render = res/script.lua#render<o:p></o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> finalize = res/script.lua#finalize<o:p></o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> keyEvent = res/script.lua#keyEvent<o:p></o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> touchEvent = res/script.lua#touchEvent<o:p></o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'>}<o:p></o:p></span></p>
- <p class=MsoNormal><o:p> </o:p></p>
- <p class=MsoNormal>Then on the C++ side, as usual, you must derive a class from
- Game and create a static instance on the stack. However, in the case of a
- script-based game, the .h file can simply contain the class definition with all
- empty implementations while the .cpp file would contain the static instance.
- For example,</p>
- <p class=MsoNormal><o:p> </o:p></p>
- <p class=MsoNormal>MyScriptGame.h</p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:blue'><o:p> </o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:blue'>class</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> MyScriptGame: </span><span
- style='font-size:10.0pt;font-family:Consolas;color:blue'>public</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> Game<o:p></o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'>{ <o:p></o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:blue'>protected</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'>:<o:p></o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> </span><span
- style='font-size:10.0pt;font-family:Consolas;color:blue'>void</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> initialize() {};<o:p></o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> </span><span
- style='font-size:10.0pt;font-family:Consolas;color:blue'>void</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> finalize() {};<o:p></o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> </span><span
- style='font-size:10.0pt;font-family:Consolas;color:blue'>void</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> update(</span><span
- style='font-size:10.0pt;font-family:Consolas;color:blue'>float</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> elapsedTime) {};<o:p></o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> </span><span
- style='font-size:10.0pt;font-family:Consolas;color:blue'>void</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> render(</span><span
- style='font-size:10.0pt;font-family:Consolas;color:blue'>float</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> elapsedTime) {};<o:p></o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'><span
- style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'>};<o:p></o:p></span></p>
- <p class=MsoNormal><o:p> </o:p></p>
- <p class=MsoNormal><o:p> </o:p></p>
- <p class=MsoNormal>MyScriptGame.cpp</p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:blue'><o:p> </o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:blue'>#include</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> </span><span
- style='font-size:10.0pt;font-family:Consolas;color:#A31515'>"MyScriptGame.h"</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'><o:p></o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'><span
- style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:green'>// Declare our game instance</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'><o:p></o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'>MyScriptGame game;<o:p></o:p></span></p>
- <p class=MsoNormal><o:p> </o:p></p>
- <p class=MsoNormal>The sample does not require any other C++ implementation. For
- a complete sample game using the techniques described above, see sample05-lua
- as one-to-one mapping of sample00-mesh with a box instead of a duck. It also
- has some additional scripting code showcasing AIAgent and AIStates.</p>
- <h3>Extending ScriptTarget </h3>
- <p class=MsoNormal>To add scriptable events to your own class, you simply
- derive from the class <span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>gameplay::ScriptTarget </span>and add
- the required function calls. First, to define the scriptable events that are
- supported for the class, we call addScriptEvent with the name of the event and,
- optionally (depending on if the callback takes arguments or not), the parameter
- string for a valid script callback function for that event (the parameter
- string follows the format of the parameter string argument to <span
- style='font-size:12.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"'>ScriptController::executeFunction</span>).
- For example, to add a <span style='font-family:"Times New Roman","serif";
- mso-ascii-font-family:"Malgun Gothic";mso-bidi-font-family:TradeGothicNextLTPro-Lt'>‘</span>notify<span
- style='font-family:"Times New Roman","serif";mso-ascii-font-family:"Malgun Gothic";
- mso-bidi-font-family:TradeGothicNextLTPro-Lt'>’</span> event that passes an
- integer to the callback, we would do the following:</p>
- <p class=MsoNormal><o:p> </o:p></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'>addScriptEvent(</span><span
- style='font-size:10.0pt;font-family:Consolas;color:#A31515'>"notify"</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'>, </span><span
- style='font-size:10.0pt;font-family:Consolas;color:#A31515'>"i"</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'>);<o:p></o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'><o:p> </o:p></span></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'>The
- supported format identifiers for passed parameters are as follows:</p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><o:p> </o:p></p>
- <table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0
- style='border-collapse:collapse;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
- <thead>
- <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
- <td width=241 valign=top style='width:180.9pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=tableheader style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman";
- mso-bidi-font-weight:normal'><span style='mso-spacerun:yes'> </span>Format <o:p></o:p></span></p>
- </td>
- <td width=396 valign=top style='width:296.9pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=tableheader style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman";
- mso-bidi-font-weight:normal'>Parameter Type (result)<o:p></o:p></span></p>
- </td>
- </tr>
- </thead>
- <tr style='mso-yfti-irow:1'>
- <td width=241 valign=top style='width:180.9pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><span
- style='mso-spacerun:yes'> </span></span>c, h, i, l<span style='mso-bidi-font-size:
- 12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p></o:p></span></p>
- </td>
- <td width=396 valign=top style='width:296.9pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'>Signed
- Integer (int)<span style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman"'><o:p></o:p></span></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:2'>
- <td width=241 valign=top style='width:180.9pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><span
- style='mso-spacerun:yes'> </span>u<o:p></o:p></span></p>
- </td>
- <td width=396 valign=top style='width:296.9pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Unsigned
- Integer (unsigned int)<o:p></o:p></span></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:3'>
- <td width=241 valign=top style='width:180.9pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><span
- style='mso-spacerun:yes'> </span>b<o:p></o:p></span></p>
- </td>
- <td width=396 valign=top style='width:296.9pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Boolean
- (bool) <o:p></o:p></span></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:4'>
- <td width=241 valign=top style='width:180.9pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><span
- style='mso-spacerun:yes'> </span>f, d<o:p></o:p></span></p>
- </td>
- <td width=396 valign=top style='width:296.9pt;background:whitesmoke;
- padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Floating
- Point (double)<o:p></o:p></span></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:5'>
- <td width=241 valign=top style='width:180.9pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><span
- style='mso-spacerun:yes'> </span>s<o:p></o:p></span></p>
- </td>
- <td width=396 valign=top style='width:296.9pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>String
- (char*)<o:p></o:p></span></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:6'>
- <td width=241 valign=top style='width:180.9pt;background:#F2F2F2;mso-background-themecolor:
- background1;mso-background-themeshade:242;padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>p<o:p></o:p></span></p>
- </td>
- <td width=396 valign=top style='width:296.9pt;background:#F2F2F2;mso-background-themecolor:
- background1;mso-background-themeshade:242;padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Pointer
- (void*)<o:p></o:p></span></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:7'>
- <td width=241 valign=top style='width:180.9pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><span
- style='mso-spacerun:yes'> </span>[x]<o:p></o:p></span></p>
- </td>
- <td width=396 valign=top style='width:296.9pt;background:#E6E6E6;padding:
- 0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Enum
- Value [x]<o:p></o:p></span></p>
- </td>
- </tr>
- <tr style='mso-yfti-irow:8;mso-yfti-lastrow:yes'>
- <td width=241 valign=top style='width:180.9pt;background:#F2F2F2;mso-background-themecolor:
- background1;mso-background-themeshade:242;padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><x><o:p></o:p></span></p>
- </td>
- <td width=396 valign=top style='width:296.9pt;background:#F2F2F2;mso-background-themecolor:
- background1;mso-background-themeshade:242;padding:0in 5.4pt 0in 5.4pt'>
- <p class=MsoNormal style='mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='mso-bidi-font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Object
- References/Pointers <x><o:p></o:p></span></p>
- </td>
- </tr>
- </table>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><o:p> </o:p></p>
- <p class=MsoNormal><o:p> </o:p></p>
- <p class=MsoNormal>This step is usually done either in the constructor of the
- class or in a class initialization function. Next, the class will want to fire
- the event so that the script callback functions are actually called. This code
- is placed wherever it makes sense (depending on what the actual event is) and
- looks like so:</p>
- <p class=MsoNormal><o:p> </o:p></p>
- <p class=MsoNormal style='mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'>fireScriptEvent<</span><span
- style='font-size:10.0pt;font-family:Consolas;color:blue'>void</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'>>(</span><span
- style='font-size:10.0pt;font-family:Consolas;color:#A31515'>"notify"</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'>, 14);<o:p></o:p></span></p>
- <p class=MsoNormal><o:p> </o:p></p>
- <p class=MsoNormal>The template argument corresponds to the return type of the
- callback function, the first parameter is the name of the event to fire, and
- the remaining arguments are the parameters to the actual callback function: in
- this case, the integer that is passed to the notify callback. To see a full
- example of a class that derives from <span style='font-size:12.0pt;font-family:
- "Courier New";mso-bidi-font-family:"Times New Roman"'>gameplay::ScriptTarget </span>within
- gameplay, take a look at the <span style='font-size:12.0pt;font-family:"Courier New";
- mso-bidi-font-family:"Times New Roman"'>gameplay::Control </span>class.</p>
- <h3>Tips using Lua with gameplay</h3>
- <p class=MsoNormal style='margin-left:.25in;text-indent:-.25in;mso-list:l4 level3 lfo9'><![if !supportLists]><span
- style='font-family:Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:
- Wingdings'><span style='mso-list:Ignore'>§<span style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]>To get printf-like functionality using gameplay
- and Lua, use the Lua print() function (note: gameplay overrides the default Lua
- print() function).</p>
- <p class=MsoNormal style='margin-left:.25in;text-indent:-.25in;mso-list:l4 level3 lfo9'><![if !supportLists]><span
- style='font-family:Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:
- Wingdings'><span style='mso-list:Ignore'>§<span style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]>To do integer like comparisons or casts on a
- number variable x in Lua, use math.floor(x).</p>
- <p class=MsoNormal style='margin-left:.25in;text-indent:-.25in;mso-list:l4 level3 lfo9'><![if !supportLists]><span
- style='font-family:Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:
- Wingdings'><span style='mso-list:Ignore'>§<span style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]>Make sure all your member function calls use ':'
- instead of '.'</p>
- <p class=MsoNormal style='margin-left:.25in;text-indent:-.25in;mso-list:l4 level3 lfo9'><![if !supportLists]><span
- style='font-family:Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:
- Wingdings'><span style='mso-list:Ignore'>§<span style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]>Remember to access all gameplay variables,
- including static and global variables with '()' on the end of the name.</p>
- <p class=MsoNormal style='margin-left:.25in;text-indent:-.25in;mso-list:l4 level3 lfo9'><![if !supportLists]><span
- style='font-family:Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:
- Wingdings'><span style='mso-list:Ignore'>§<span style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]>Primitive data type arrays and object arrays are
- both inefficient when created in Lua and passed to C++, so try to minimize
- this.</p>
- <p class=MsoNormal style='margin-left:.25in;text-indent:-.25in;mso-list:l4 level3 lfo9'><![if !supportLists]><span
- style='font-family:Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:
- Wingdings'><span style='mso-list:Ignore'>§<span style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]>There is no reasonable way to unload a Lua
- script; thus, the recommended usage pattern is to put each script's variables
- and functions inside a table (see Lua technical note 7 at <a
- href="http://www.lua.org/notes/ltn007.html">http://www.lua.org/notes/ltn007.html</a>).
- i.e.</p>
- <p class=MsoNormal style='margin-left:.5in;mso-pagination:widow-orphan;
- tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:green'><o:p> </o:p></span></p>
- <p class=MsoNormal style='margin-left:.5in;mso-pagination:widow-orphan;
- tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:green'>-- If you want to load the module at most once, add a line like this.</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:.5in;mso-pagination:widow-orphan;
- tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:blue'>if</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> Module </span><span
- style='font-size:10.0pt;font-family:Consolas;color:blue'>then</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> </span><span
- style='font-size:10.0pt;font-family:Consolas;color:blue'>return</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> </span><span
- style='font-size:10.0pt;font-family:Consolas;color:blue'>end</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:.5in;mso-pagination:widow-orphan;
- tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> <o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:.5in;mso-pagination:widow-orphan;
- tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:green'>-- Declare the module Module.</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:.5in;mso-pagination:widow-orphan;
- tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'>Module = {}<o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:.5in;mso-pagination:widow-orphan;
- tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> <o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:.5in;mso-pagination:widow-orphan;
- tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:green'>-- Declare a variable within the module.</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:.5in;mso-pagination:widow-orphan;
- tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'>Module</span><span
- style='font-size:10.0pt;font-family:Consolas;color:teal'>.</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'>a = 47<o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:.5in;mso-pagination:widow-orphan;
- tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> <o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:.5in;mso-pagination:widow-orphan;
- tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:green'>-- Declare a function within the module.</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:.5in;mso-pagination:widow-orphan;
- tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:blue'>function</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> Module</span><span
- style='font-size:10.0pt;font-family:Consolas;color:teal'>.</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'>myFunc()<o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:.5in;mso-pagination:widow-orphan;
- tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> </span><span
- style='font-size:10.0pt;font-family:Consolas;color:blue'>return</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> Module</span><span
- style='font-size:10.0pt;font-family:Consolas;color:teal'>.</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'>a + 17<o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:.5in;mso-pagination:widow-orphan;
- tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:blue'>end</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:.5in;mso-pagination:widow-orphan;
- tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'><span
- style='mso-spacerun:yes'> </span><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:.5in;mso-pagination:widow-orphan;
- tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:green'>-- Cleanup function; call when done with this module.</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:.5in;mso-pagination:widow-orphan;
- tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:blue'>function</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> cleanupModule()<o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:.5in;mso-pagination:widow-orphan;
- tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'> Module = </span><span
- style='font-size:10.0pt;font-family:Consolas;color:blue'>nil</span><span
- style='font-size:10.0pt;font-family:Consolas;color:black'><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:.5in;mso-pagination:widow-orphan;
- tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:blue'>end<o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:.5in;mso-pagination:widow-orphan;
- tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
- background:white;mso-layout-grid-align:auto;text-autospace:ideograph-numeric ideograph-other'><span
- style='font-size:10.0pt;font-family:Consolas;color:black'><o:p> </o:p></span></p>
- <p class=MsoNormal style='margin-left:.25in;text-indent:-.25in;mso-list:l4 level3 lfo9'><![if !supportLists]><span
- style='font-family:Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:
- Wingdings'><span style='mso-list:Ignore'>§<span style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]>Note: you can't pass an enumeration value to a
- function that doesn't explicitly take an enumeration type (i.e.
- Control::setTextColor, which takes an unsigned char). In these cases, you need
- to look up the enumeration values and pass them directly.</p>
- <p class=MsoNormal style='margin-left:.25in;text-indent:-.25in;mso-list:l4 level3 lfo9'><![if !supportLists]><span
- style='font-family:Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:
- Wingdings'><span style='mso-list:Ignore'>§<span style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]>On any function that returns a pointer that is
- owned by the user calling that function (i.e. a create() function), add
- @script{create} as the last line of its Doxygen comments.</p>
- <p class=MsoNormal style='margin-left:.25in;text-indent:-.25in;mso-list:l4 level3 lfo9'><![if !supportLists]><span
- style='font-family:Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:
- Wingdings'><span style='mso-list:Ignore'>§<span style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]>On any function, variable, class, struct, enum,
- etc. that should not be accessible from Lua (except for things that are static
- to a .cpp file, which are already ignored), add @script{ignore} to its Doxygen
- comments.</p>
- <p class=MsoNormal style='margin-left:.25in;text-indent:-.25in;mso-list:l4 level3 lfo9'><![if !supportLists]><span
- style='font-family:Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:
- Wingdings'><span style='mso-list:Ignore'>§<span style='font:7.0pt "Times New Roman"'>
- </span></span></span><![endif]>On any functions, variables, classes, structs,
- enums, etc. that are local to a .cpp file, declare them as static 1) because it
- is good practice and 2) so that Lua does not generate bindings for them.</p>
- <h3>Generating user defined script bindings</h3>
- <p class=MsoNormal>The following instructions detail how to generate Lua script
- bindings for your own project. Note: this requires doxygen to be installed.</p>
- <p class=MsoNormal><o:p> </o:p></p>
- <ol style='margin-top:0in' start=1 type=1>
- <li class=MsoNormal style='mso-list:l2 level1 lfo7'>Copy the
- gameplay-luagen.doxyfile file to your project's root directory (and rename
- it). Then, either manually using a text editor or using the Doxywizard
- tool, go to the INPUT section and ensure both that the path to gameplay's
- 'src' folder is valid (relative to where the doxyfile is) and that your
- own source folder is added.</li>
- <li class=MsoNormal style='mso-list:l2 level1 lfo7'>Run doxygen using the
- above doxyfile from your project's root directory. For example, run <span
- style='font-family:Consolas'>doxygen my-project.doxyfile</span> from the
- command line or run Doxygen using the Doxywizard application.</li>
- <li class=MsoNormal style='mso-list:l2 level1 lfo7'>Create a 'lua' folder
- inside your source folder.</li>
- <li class=MsoNormal style='mso-list:l2 level1 lfo7'>Run gameplay-luagen using
- the following command (make sure you have a trailing '/' for the output
- directory (second) parameter):</li>
- </ol>
- <p class=MsoNormal style='margin-left:.5in'><o:p> </o:p></p>
- <p class=MsoNormal style='margin-left:.5in'><span style='font-family:Consolas'>path-to-gameplay/bin/your-platform/gameplay-luagen.exe
- ./xml path-to-your-source/lua/ <your-project-name-here><o:p></o:p></span></p>
- <p class=MsoNormal style='margin-left:.5in'><o:p> </o:p></p>
- <p class=MsoNormal style='margin-left:.5in'>Note: the parameter
- <your-project-name-here> is used as the namespace that the bindings are
- generated within. This can be anything you want <b style='mso-bidi-font-weight:
- normal'>except</b> for "gameplay".</p>
- <ol style='margin-top:0in' start=5 type=1>
- <li class=MsoNormal style='mso-list:l2 level1 lfo7'>Ensure that your project
- has "path-to-gameplay/gameplay/src/lua" in its include path.</li>
- <li class=MsoNormal style='mso-list:l2 level1 lfo7'>Add the generated Lua
- script bindings (.h/.cpp) files from path-to-your-source/lua to your
- project.</li>
- <li class=MsoNormal style='mso-list:l2 level1 lfo7'>Compile and run - now you
- can use your own classes from Lua scripts.</li>
- </ol>
- <h2><a name="_Toc330902784">License</a></h2>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- project is open sourced under the Apache 2.0 license.<o:p></o:p></span></p>
- <h3>Disclaimer</h3>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>THE
- SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;font-family:"Times New Roman","serif";
- mso-ascii-font-family:"Malgun Gothic"'>©</span><span style='font-size:12.0pt;
- mso-bidi-font-family:"Times New Roman"'>2012 Research In Motion Limited. All
- rights reserved. BlackBerry</span><span style='font-size:12.0pt;font-family:
- "Times New Roman","serif";mso-ascii-font-family:"Malgun Gothic"'>®</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>, RIM</span><span
- style='font-size:12.0pt;font-family:"Times New Roman","serif";mso-ascii-font-family:
- "Malgun Gothic"'>®</span><span style='font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman"'>, Research In Motion</span><span style='font-size:12.0pt;
- font-family:"Times New Roman","serif";mso-ascii-font-family:"Malgun Gothic"'>®</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>, and related
- trademarks, names, and logos are the property of Research In Motion Limited and
- are registered and/or used in the U.S. and countries around the world.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Android
- is a trademark of Google Inc. Apache is a trademark of The Apache Software
- Foundation. Apple, iPhone, iPad, Mac OS, TrueType, and Xcode are trademarks of
- Apple Inc. Bluetooth is a trademark of Bluetooth SIG. COLLADA and OpenGL are
- trademarks of Khronos Group Inc. Eclipse is a trademark of Eclipse Foundation,
- Inc. FBX and Maya are trademarks of Autodesk, Inc. GitHub is a trademark of
- Github, LLC. Linux is a trademark of Linus Torvalds. Microsoft, Windows, and
- Visual Studio are trademarks of Microsoft Corporation. QNX and Momentics are
- trademarks of QNX Software Systems Limited. All other trademarks are the
- property of their respective owners.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=link><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>This
- documentation including all documentation incorporated by reference herein such
- as documentation provided or made available at <u><span style='color:blue'><a
- href="http://www.blackberry.com/go/docs">www.blackberry.com/go/docs</a></span></u>is
- provided or made accessible "AS IS" and "AS AVAILABLE" and
- without condition, endorsement, guarantee, representation, or warranty of any
- kind by Research In Motion Limited and its affiliated companies
- ("RIM") and RIM assumes no responsibility for any typographical,
- technical, or other inaccuracies, errors, or omissions in this documentation.
- In order to protect RIM proprietary and confidential information and/or trade
- secrets, this documentation may describe some aspects of RIM technology in
- generalized terms. RIM reserves the right to periodically change information
- that is contained in this documentation; however, RIM makes no commitment to
- provide any such changes, updates, enhancements, or other additions to this
- documentation to you in a timely manner or at all.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>This
- documentation might contain references to third-party sources of information,
- hardware or software, products or services including components and content
- such as content protected by copyright and/or third-party web sites
- (collectively the "Third Party Products and Services"). RIM does not
- control, and is not responsible for, any Third Party Products and Services
- including, without limitation the content, accuracy, copyright compliance,
- compatibility, performance, trustworthiness, legality, decency, links, or any
- other aspect of Third Party Products and Services. The inclusion of a reference
- to Third Party Products and Services in this documentation does not imply
- endorsement by RIM of the Third Party Products and Services or the third party
- in any way.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>EXCEPT
- TO THE EXTENT SPECIFICALLY PROHIBITED BY APPLICABLE LAW IN YOUR JURISDICTION,
- ALL CONDITIONS, ENDORSEMENTS, GUARANTEES, REPRESENTATIONS, OR WARRANTIES OF ANY
- KIND, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY CONDITIONS,
- ENDORSEMENTS, GUARANTEES, REPRESENTATIONS OR WARRANTIES OF DURABILITY, FITNESS
- FOR A PARTICULAR PURPOSE OR USE, MERCHANTABILITY, MERCHANTABLE QUALITY,
- NON-INFRINGEMENT, SATISFACTORY QUALITY, OR TITLE, OR ARISING FROM A STATUTE OR
- CUSTOM OR A COURSE OF DEALING OR USAGE OF TRADE, OR RELATED TO THE
- DOCUMENTATION OR ITS USE, OR PERFORMANCE OR NON-PERFORMANCE OF ANY SOFTWARE,
- HARDWARE, SERVICE, OR ANY THIRD PARTY PRODUCTS AND SERVICES REFERENCED HEREIN,
- ARE HEREBY EXCLUDED. YOU MAY ALSO HAVE OTHER RIGHTS THAT VARY BY STATE OR
- PROVINCE. SOME JURISDICTIONS MAY NOT ALLOW THE EXCLUSION OR LIMITATION OF
- IMPLIED WARRANTIES AND CONDITIONS. TO THE EXTENT PERMITTED BY LAW, ANY IMPLIED
- WARRANTIES OR CONDITIONS RELATING TO THE DOCUMENTATION TO THE EXTENT THEY
- CANNOT BE EXCLUDED AS SET OUT ABOVE, BUT CAN BE LIMITED, ARE HEREBY LIMITED TO
- NINETY (90) DAYS FROM THE DATE YOU FIRST ACQUIRED THE DOCUMENTATION OR THE ITEM
- THAT IS THE SUBJECT OF THE CLAIM.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>TO
- THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW IN YOUR JURISDICTION, IN NO
- EVENT SHALL RIM BE LIABLE FOR ANY TYPE OF DAMAGES RELATED TO THIS DOCUMENTATION
- OR ITS USE, OR PERFORMANCE OR NON-PERFORMANCE OF ANY SOFTWARE, HARDWARE,
- SERVICE, OR ANY THIRD PARTY PRODUCTS AND SERVICES REFERENCED HEREIN INCLUDING
- WITHOUT LIMITATION ANY OF THE FOLLOWING DAMAGES: DIRECT, CONSEQUENTIAL,
- EXEMPLARY, INCIDENTAL, INDIRECT, SPECIAL, PUNITIVE, OR AGGRAVATED DAMAGES,
- DAMAGES FOR LOSS OF PROFITS OR REVENUES, FAILURE TO REALIZE ANY EXPECTED
- SAVINGS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, LOSS OF BUSINESS
- OPPORTUNITY, OR CORRUPTION OR LOSS OF DATA, FAILURES TO TRANSMIT OR RECEIVE ANY
- DATA, PROBLEMS ASSOCIATED WITH ANY APPLICATIONS USED IN CONJUNCTION WITH RIM
- PRODUCTS OR SERVICES, DOWNTIME COSTS, LOSS OF THE USE OF RIM PRODUCTS OR
- SERVICES OR ANY PORTION THEREOF OR OF ANY AIRTIME SERVICES, COST OF SUBSTITUTE
- GOODS, COSTS OF COVER, FACILITIES OR SERVICES, COST OF CAPITAL, OR OTHER
- SIMILAR PECUNIARY LOSSES, WHETHER OR NOT SUCH DAMAGES WERE FORESEEN OR
- UNFORESEEN, AND EVEN IF RIM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
- DAMAGES.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>TO
- THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW IN YOUR JURISDICTION, RIM SHALL
- HAVE NO OTHER OBLIGATION, DUTY, OR LIABILITY WHATSOEVER IN CONTRACT, TORT, OR
- OTHERWISE TO YOU INCLUDING ANY LIABILITY FOR NEGLIGENCE OR STRICT LIABILITY.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>THE
- LIMITATIONS, EXCLUSIONS, AND DISCLAIMERS HEREIN SHALL APPLY: (A) IRRESPECTIVE
- OF THE NATURE OF THE CAUSE OF ACTION, DEMAND, OR ACTION BY YOU INCLUDING BUT
- NOT LIMITED TO BREACH OF CONTRACT, NEGLIGENCE, TORT, STRICT LIABILITY OR ANY
- OTHER LEGAL THEORY AND SHALL SURVIVE A FUNDAMENTAL BREACH OR BREACHES OR THE
- FAILURE OF THE ESSENTIAL PURPOSE OF THIS AGREEMENT OR OF ANY REMEDY CONTAINED
- HEREIN; AND (B) TO RIM AND ITS AFFILIATED COMPANIES, THEIR SUCCESSORS, ASSIGNS,
- AGENTS, SUPPLIERS (INCLUDING AIRTIME SERVICE PROVIDERS), AUTHORIZED RIM
- DISTRIBUTORS (ALSO INCLUDING AIRTIME SERVICE PROVIDERS) AND THEIR RESPECTIVE
- DIRECTORS, EMPLOYEES, AND INDEPENDENT CONTRACTORS.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><span
- style='mso-spacerun:yes'> </span>IN ADDITION TO THE LIMITATIONS AND EXCLUSIONS
- SET OUT ABOVE, IN NO EVENT SHALL ANY DIRECTOR, EMPLOYEE, AGENT, DISTRIBUTOR,
- SUPPLIER, INDEPENDENT CONTRACTOR OF RIM OR ANY AFFILIATES OF RIM HAVE ANY
- LIABILITY ARISING FROM OR RELATED TO THE DOCUMENTATION.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Prior
- to subscribing for, installing, or using any Third Party Products and Services,
- it is your responsibility to ensure that your airtime service provider has
- agreed to support all of their features. Some airtime service providers might
- not offer Internet browsing functionality with a subscription to the BlackBerry</span><span
- style='font-size:12.0pt;font-family:"Times New Roman","serif";mso-ascii-font-family:
- "Malgun Gothic"'>®</span><span style='font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman"'> Internet Service. Check with your service provider for
- availability, roaming arrangements, service plans and features. Installation or
- use of Third Party Products and Services with RIM's products and services may
- require one or more patent, trademark, copyright, or other licenses in order to
- avoid infringement or violation of third party rights. You are solely responsible
- for determining whether to use Third Party Products and Services and if any
- third party licenses are required to do so. If required you are responsible for
- acquiring them. You should not install or use Third Party Products and Services
- until all necessary licenses have been acquired. Any Third Party Products and
- Services that are provided with RIM's products and services are provided as a
- convenience to you and are provided "AS IS" with no express or
- implied conditions, endorsements, guarantees, representations, or warranties of
- any kind by RIM and RIM assumes no liability whatsoever, in relation thereto.
- Your use of Third Party Products and Services shall be governed by and subject
- to you agreeing to the terms of separate licenses and other agreements applicable
- thereto with third parties, except to the extent expressly covered by a license
- or other agreement with RIM.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Certain
- features outlined in this documentation require a minimum version of BlackBerry</span><span
- style='font-size:12.0pt;font-family:"Times New Roman","serif";mso-ascii-font-family:
- "Malgun Gothic"'>®</span><span style='font-size:12.0pt;mso-bidi-font-family:
- "Times New Roman"'> Enterprise Server, BlackBerry</span><span style='font-size:
- 12.0pt;font-family:"Times New Roman","serif";mso-ascii-font-family:"Malgun Gothic"'>®</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> Desktop
- Software, and/or BlackBerry</span><span style='font-size:12.0pt;font-family:
- "Times New Roman","serif";mso-ascii-font-family:"Malgun Gothic"'>®</span><span
- style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'> Device
- Software.<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>The
- terms of use of any RIM product or service are set out in a separate license or
- other agreement with RIM applicable thereto. NOTHING IN THIS DOCUMENTATION IS
- INTENDED TO SUPERSEDE ANY EXPRESS WRITTEN AGREEMENTS OR WARRANTIES PROVIDED BY
- RIM FOR PORTIONS OF ANY RIM PRODUCT OR SERVICE OTHER THAN THIS DOCUMENTATION.<o:p></o:p></span></p>
- <p class=MsoNormal><a name=d20e152a1310></a><a name=d20e156a1310></a><a
- name=d20e159a1310></a><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Research
- In Motion Limited<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>295
- Phillip Street<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Waterloo,
- ON N2L 3W8<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Canada<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'>Published
- in Canada<o:p></o:p></span></p>
- <p class=MsoNormal><span style='font-size:12.0pt;mso-bidi-font-family:"Times New Roman"'><o:p> </o:p></span></p>
- </div>
- </body>
- </html>
|