| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814 |
- <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>
|