Game ¡Design ¡Pa,erns ¡ CS ¡4730 ¡– ¡Computer ¡Game ¡Design ¡ ¡ ¡ ¡ Credit: ¡Some ¡slide ¡material ¡courtesy ¡Walker ¡White ¡(Cornell) ¡ CS ¡4730 ¡
Architecture ¡Big ¡Picture ¡ ¡ ¡ Credit: ¡Walker ¡White ¡ CS ¡4730 ¡ 2
OO ¡to ¡MVC ¡ • We’ve ¡discussed ¡how ¡OO ¡doesn’t ¡quite ¡work ¡ for ¡games ¡ – Not ¡that ¡we ¡have ¡to ¡throw ¡it ¡all ¡out ¡of ¡the ¡window, ¡ but ¡class ¡bloat ¡can ¡be ¡a ¡problem ¡ • We ¡have ¡also ¡discussed ¡MVC ¡in ¡which ¡ – We ¡have ¡a ¡lightweight ¡model ¡represenNng ¡world ¡ objects ¡ – We ¡have ¡a ¡heavyweight ¡controller ¡in ¡the ¡game ¡loop ¡ – We ¡have ¡a ¡drawing ¡method ¡ CS ¡4730 ¡ 3
The ¡Decorator ¡PaRern ¡ • Remember ¡when ¡we ¡discussed ¡the ¡decorator ¡ paRern? ¡ • The ¡idea ¡was ¡that ¡we ¡could ¡have ¡objects ¡that ¡ we ¡“hung” ¡various ¡funcNonality ¡bits ¡on ¡that ¡ would ¡handle ¡how ¡that ¡object ¡behaved ¡in ¡the ¡ world ¡ • What ¡if ¡we ¡could ¡take ¡that ¡to ¡the ¡extreme? ¡ CS ¡4730 ¡ 4
EnNty-‑Component-‑System ¡ • Another ¡game ¡architecture ¡paRern ¡is ¡EnNty-‑ Component-‑System ¡ • First ¡really ¡described ¡by ¡ScoR ¡Bilas ¡of ¡Gas ¡ Powered ¡Games ¡and ¡then ¡by ¡Adam ¡MarNn ¡ • ECS ¡is ¡a ¡paRern ¡in ¡which ¡each ¡object ¡in ¡the ¡ world ¡is ¡completely ¡unique ¡(as ¡in, ¡is ¡ represented ¡by ¡a ¡single ¡“primary ¡key” ¡integer) ¡ • In ¡fact, ¡ECS ¡works ¡kinda ¡like ¡a ¡database… ¡ CS ¡4730 ¡ 5
What ¡is ¡an ¡EnNty? ¡ • This ¡might ¡be ¡a ¡bit ¡hard ¡to ¡swallow ¡for ¡OO ¡ programmers ¡ • What ¡is ¡an ¡EnNty? ¡ – An ¡EnNty ¡is ¡a ¡globally ¡unique ¡number ¡ – For ¡every ¡discernible ¡thing ¡in ¡your ¡game-‑world, ¡you ¡ have ¡one ¡EnNty ¡(not ¡one ¡class, ¡one ¡actual ¡EnNty) ¡ – EnNNes ¡have ¡no ¡data ¡and ¡no ¡methods ¡ CS ¡4730 ¡ 6
What ¡is ¡a ¡Component? ¡ • A ¡Component ¡provides ¡an ¡aspect ¡of ¡state ¡to ¡an ¡ EnNty ¡ – Want ¡an ¡EnNty ¡to ¡have ¡posiNon ¡in ¡the ¡world? ¡ ¡Give ¡ it ¡a ¡SpaNal ¡Component ¡ – Should ¡the ¡EnNty ¡have ¡health? ¡ ¡Add ¡a ¡Health ¡ Component ¡ – Does ¡it ¡have ¡velocity ¡like ¡a ¡bullet? ¡ ¡FantasNc ¡– ¡add ¡ the ¡Velocity ¡Component ¡ CS ¡4730 ¡ 7
What ¡is ¡a ¡Component? ¡ • MarNn: ¡“ALL ¡the ¡data ¡goes ¡into ¡the ¡ Components. ¡ALL ¡of ¡it. ¡Think ¡you ¡can ¡take ¡ some ¡“really ¡common” ¡data, ¡e.g. ¡the ¡x/y/z ¡co-‑ ords ¡of ¡the ¡in-‑game ¡object, ¡and ¡put ¡it ¡into ¡the ¡ EnNty ¡itself? ¡Nope. ¡Don’t ¡go ¡there. ¡As ¡soon ¡as ¡ you ¡start ¡migraNng ¡data ¡into ¡the ¡EnNty, ¡you’ve ¡ lost. ¡BY ¡DEFINITION ¡the ¡only ¡valid ¡place ¡for ¡the ¡ data ¡is ¡inside ¡the ¡Component” ¡ • Why ¡is ¡this? ¡ CS ¡4730 ¡ 8
AbstracNon ¡ • Everything ¡is ¡abstracted ¡away! ¡ • An ¡EnNty ¡is ¡just ¡a ¡“place ¡to ¡hang” ¡stuff ¡ • It’s ¡the ¡combinaNon ¡of ¡Components ¡that ¡ creates ¡a ¡unique ¡in-‑game ¡object! ¡ • The ¡EnNty ¡is ¡simply ¡a ¡“primary ¡key” ¡that ¡holds ¡ all ¡the ¡Components ¡together ¡ • Then ¡how ¡do ¡things ¡get ¡updated? ¡ CS ¡4730 ¡ 9
What ¡is ¡a ¡System? ¡ • A ¡System ¡is ¡a ¡cohesive ¡set ¡of ¡funcNonality ¡that ¡ does ¡all ¡of ¡one ¡thing ¡in ¡the ¡game ¡(i.e. ¡it ¡holds ¡ all ¡the ¡behaviors) ¡ – Collision ¡DetecNon ¡ – Player ¡Input ¡ – Enemy ¡AI ¡and ¡Movement ¡ – Rendering ¡ – Enemy ¡Spawning ¡ – Physics ¡ CS ¡4730 ¡ 10
Systems ¡ CS ¡4730 ¡ 11
What ¡good ¡does ¡this ¡do? ¡ • It ¡makes ¡the ¡game ¡MUCH ¡more ¡modular ¡ • You ¡can ¡plug-‑and-‑play ¡preRy ¡much ¡anything ¡ • You ¡can ¡change ¡out ¡funcNonality ¡without ¡ affecNng ¡the ¡rest ¡of ¡the ¡game ¡ • And ¡most ¡importantly, ¡it ¡can ¡make ¡your ¡design ¡ data-‑driven ¡ CS ¡4730 ¡ 12
Data-‑Driven ¡Design ¡ • Who ¡is ¡involved ¡in ¡making ¡a ¡video ¡game? ¡ CS ¡4730 ¡ 13
Data-‑Driven ¡Design ¡ • Who ¡is ¡involved ¡in ¡making ¡a ¡game? ¡ – Programmers ¡ – Level ¡designers ¡ – Dialogue ¡writers ¡ – Visual ¡arNsts ¡ – Musicians ¡ – Sound ¡effects ¡designers ¡ – Etc… ¡ • Not ¡all ¡of ¡these ¡folks ¡are ¡programmers… ¡ CS ¡4730 ¡ 14
Data-‑Driven ¡Design ¡ • The ¡idea ¡is ¡that ¡all ¡content ¡is ¡NOT ¡hardcoded ¡ into ¡the ¡game ¡system ¡ • This ¡includes: ¡ – Art ¡ – Music ¡ – Levels ¡ – Dialogue ¡ – AI ¡scripNng ¡ – Etc… ¡ CS ¡4730 ¡ 15
Data-‑Driven ¡Design ¡ • Why? ¡ – OpNmize ¡the ¡game ¡creaNon ¡pipeline; ¡mulNple ¡folks ¡ working ¡on ¡different ¡things ¡ – Makes ¡your ¡job ¡of ¡creaNng ¡content ¡MUCH ¡easier ¡in ¡ general ¡(put ¡all ¡the ¡levels ¡in ¡one ¡folder ¡– ¡when ¡the ¡ game ¡starts, ¡it ¡loads ¡all ¡the ¡levels ¡in ¡that ¡folder!) ¡ – Could ¡support ¡the ¡community ¡to ¡create ¡their ¡own ¡ content ¡ – Easier ¡to ¡reuse ¡code ¡later ¡(not ¡Ned ¡to ¡the ¡specifics ¡ of ¡that ¡game) ¡ CS ¡4730 ¡ 16
Formats ¡ • How ¡should ¡you ¡create ¡your ¡data ¡files? ¡ • Art ¡assets ¡should ¡be ¡standard ¡formats ¡ • Scripts, ¡dialogue, ¡and ¡other ¡text ¡info? ¡ – XML ¡is ¡a ¡reasonable ¡opNon ¡and ¡C# ¡has ¡libraries ¡to ¡ parse ¡it ¡ – JSON ¡could ¡be ¡an ¡opNon ¡as ¡well, ¡but ¡might ¡require ¡ more ¡parsing ¡ CS ¡4730 ¡ 17
ECS ¡meets ¡Data-‑Driven ¡ • Users ¡can ¡have ¡more ¡control ¡over ¡the ¡game ¡if ¡ you ¡let ¡them ¡ • Steam ¡Workshop, ¡for ¡example ¡ • And ¡your ¡process ¡should ¡be ¡a ¡lot ¡easier ¡as ¡well ¡ • Consider… ¡ CS ¡4730 ¡ 18
World ¡of ¡Warcral ¡– ¡Stock ¡UI ¡ CS ¡4730 ¡ 19
World ¡of ¡Warcral ¡– ¡Modded ¡UI ¡ CS ¡4730 ¡ 20
A ¡Game ¡Within ¡A ¡Game ¡ • I ¡can’t ¡tell ¡you ¡how ¡much ¡Nme ¡I’ve ¡spent ¡ finding ¡WoW ¡mods… ¡ • Example ¡lua ¡code ¡for ¡WoW: ¡ function HelloWorld() print("Hello, World!"); end CS ¡4730 ¡ 21
A ¡Game ¡Within ¡A ¡Game ¡ • XML ¡Document ¡that ¡goes ¡with ¡it: ¡ <Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema- instance" xsi:schemaLocation="http://www.blizzard.com/wow/ ui/ ..\..\FrameXML\UI.xsd"> <Script File="HelloWorld.lua"/> <Frame name="HelloWorldFrame"> <Scripts> <OnLoad> HelloWorld(); </OnLoad> </Scripts> </Frame> </Ui> CS ¡4730 ¡ 22
StarWarrior ¡Example ¡ • See ¡the ¡StarWarrior ¡MonoGame ¡example ¡using ¡ the ¡Artemis ¡ECS ¡Framework! ¡ CS ¡4730 ¡ 23
Recommend
More recommend