2 using System.Collections.Generic;
13 private const double defaultSpeed = 100.0;
14 private double tileSize;
15 private string labyrinthWallTag;
17 private Vector destination;
18 private double timeSinceNewDestination;
19 private double directionChangeTimeout = 1.0;
28 return directionChangeTimeout;
32 directionChangeTimeout = value;
43 return labyrinthWallTag;
47 labyrinthWallTag = value;
59 this.tileSize = tileSize;
71 this.tileSize = tileSize;
83 this.tileSize = tileSize;
84 labyrinthWallTag = wallTag;
91 destination = newOwner.
Position + direction;
106 private void SetNextDirectionAndDestination()
110 if (owner == null || owner.
Game == null)
return;
113 List<Vector> directions =
new List<Vector>{direction,
118 double radius = tileSize / 5;
120 while (directions.Count > 0)
123 directions.Remove(directionCandidate);
125 if (labyrinthWallTag != null)
137 direction = directionCandidate.
Normalize() * tileSize;
141 destination = owner.
Position + direction;
147 direction = -direction.
Normalize() * tileSize;
151 destination = owner.
Position + direction;
169 SetNextDirectionAndDestination();
172 else if (distanceToTravel.
Magnitude > tileSize)
174 SetNextDirectionAndDestination();
180 direction = -direction.
Normalize() * tileSize;
181 SetNextDirectionAndDestination();
static void DoNextUpdate(Action action)
Suorittaa aliohjelman seuraavalla päivityksellä.
static Direction NextDirection()
Palauttaa satunnaisen suunnan.
double Magnitude
Vektorin pituus.
override void OnAddToGame()
Kutsutaan, kun aivojen omistaja lisätään peliin tai omistajaksi asetetaan olio, joka on jo lisätty pe...
Angle Angle
Kulma radiaaneina.
Game Game
Peli, johon olio on lisätty. null, jos oliota ei ole lisätty peliin.
virtual int CollisionIgnoreGroup
Törmäysryhmä. Oliot jotka ovat samassa törmäysryhmässä menevät toistensa läpi. Jos ryhmä on nolla tai...
Suuntakulma (rajoitettu -180 ja 180 asteen välille) asteina ja radiaaneina. Tietoja kulmasta: http://...
GameObject GetObjectAt(Vector position)
Palauttaa peliolion, joka on annetussa paikassa. Jos paikassa ei ole mitään pelioliota, palautetaan null. Jos olioita on useampia, palautetaan päällimmäinen.
LabyrinthWandererBrain(double tileSize, double speed)
Luo uudet aivot, jotka saavat omistajansa vaeltelemaan labyrintissä.
Satunnaisgeneraattori. Luo satunnaisia arvoja, mm. lukuja, vektoreita sekä kulmia.
TimeSpan SinceStartOfGame
Aika joka on kulunut pelin alusta.
Peliolio, joka noudattaa fysiikkamoottorin määräämiä fysiikan lakeja. Voidaan kuitenkin myös laittaa ...
double DirectionChangeTimeout
Jos jäädään jumiin, kuinka pian arvotaan uusi suunta. Oletuksena 1 sekunti.
Sisältää tiedon ajasta, joka on kulunut pelin alusta ja viime päivityksestä.
static readonly Angle RightAngle
Suora kulma (90 astetta).
Yleiset liikkumiseen tarkoitetut aivot.
Aivot, jotka saavat omistajansa liikkumaan labyrinttimäisessä kentässä satunnaisesti edeten...
Peliluokka reaaliaikaisille peleille.
override void OnAdd(IGameObject newOwner)
Kutsutaan, kun aivot lisätään oliolle.
LabyrinthWandererBrain(double tileSize)
Luo uudet aivot, jotka saavat omistajansa vaeltelemaan labyrintissä.
LabyrinthWandererBrain(double tileSize, double speed, string wallTag)
Luo uudet aivot, jotka saavat omistajansa vaeltelemaan labyrintissä.
Yhteinen rajapinta kaikille peliolioille.
override Vector Position
Olion paikka koordinaatistossa. Käsittää sekä X- että Y-koordinaatin.
IGameObject Owner
Aivojen haltija.
Pelialueella liikkuva olio. Käytä fysiikkapeleissä PhysicsObject-olioita.
void Move(Vector direction)
string LabyrinthWallTag
Tagi, jolla varustetut oliot tulkitaan seiniksi. Muilla tageilla varustettuja olioita ei väistetä...
Vector Normalize()
Palauttaa uuden vektorin, jonka suunta pysyy samana, mutta pituudeksi tulee 1.0.
override void Update(Time time)
Liikuttaa omistajaa Move-metodilla. Asetetaan uusi suunta jos ollaan saavutettu annettu määränpää...