public void InitializeMovement(GameObject[] obstacles, List <DynamicCharacter> characters) { foreach (var obstacle in obstacles) { //TODO: add your AvoidObstacle movement here var avoid = new DynamicAvoidShort { Character = this.character.KinematicData, avoidDistance = 5.0f, lookAhead = 15.0f, collisionDetector = obstacle.GetComponent <Collider>(), MaxAcceleration = MAX_ACCELERATION, whiskerLength = 7.5f }; this.blendedMovement.Movements.Add(new MovementWithWeight(avoid, 10.0f)); this.priorityMovement.Movements.Add(avoid); } foreach (var otherCharacter in characters) { if (otherCharacter != this.character) { //TODO: add your AvoidCharacter movement here var avoidCharacter = new DynamicAvoidCharacter(otherCharacter.KinematicData) { Character = this.character.KinematicData, maxAcceleration = MAX_ACCELERATION, collisionRadius = 3f, maxTimeLookAhead = 8f }; this.blendedMovement.Movements.Add(new MovementWithWeight(avoidCharacter, 10.0f)); this.priorityMovement.Movements.Add(avoidCharacter); } } /* TODO: add your wander behaviour here! */ var wander = new DynamicWander { Character = this.character.KinematicData, WanderOffset = 5, WanderRate = MathConstants.MATH_1_PI, MaxAcceleration = MAX_ACCELERATION }; this.priorityMovement.Movements.Add(wander); this.blendedMovement.Movements.Add(new MovementWithWeight(wander, 1)); this.character.Movement = this.blendedMovement; }
public void InitializeMovement(GameObject[] obstacles, List <DynamicCharacter> characters) { List <DynamicCharacter> otherCharacters = characters.Where(b => b != character).ToList(); foreach (var obstacle in obstacles) { var avoid = new DynamicAvoidShort { Character = this.character.KinematicData, avoidDistance = 10.0f, lookAhead = 13.0f, collisionDetector = obstacle.GetComponent <Collider>(), MaxAcceleration = MAX_ACCELERATION, whiskerLength = 6.5f }; this.blendedMovement.Movements.Add(new MovementWithWeight(avoid, 22.0f)); } var cohesion = new DynamicCohesion(otherCharacters) { Character = this.character.KinematicData, MaxAcceleration = MAX_ACCELERATION, StopRadius = 5f, SlowRadius = 10f, MaxSpeed = this.character.MaxSpeed, Radius = 15f, FanAngle = MathConstants.MATH_PI_4 }; this.blendedMovement.Movements.Add(new MovementWithWeight(cohesion, 6.0f)); var velocity = new FlockVelocityMatching(otherCharacters) { Character = this.character.KinematicData, MaxAcceleration = MAX_ACCELERATION, Radius = 20f, FanAngle = MathConstants.MATH_PI_4 }; this.blendedMovement.Movements.Add(new MovementWithWeight(velocity, 10.0f)); var separation = new DynamicSeparation(otherCharacters) { Character = this.character.KinematicData, MaxAcceleration = MAX_ACCELERATION, Radius = SEP_RADIUS, SeparationFactor = MAX_ACCELERATION * 1.5f }; this.blendedMovement.Movements.Add(new MovementWithWeight(separation, 12.0f)); var wander = new DynamicStraightAhead { Character = this.character.KinematicData, MaxAcceleration = MAX_ACCELERATION }; this.blendedMovement.Movements.Add(new MovementWithWeight(wander, 1.0f)); var seekMouse = new DynamicSeekMouse { Character = this.character.KinematicData, MaxAcceleration = MAX_ACCELERATION, MaxSpeed = this.character.MaxSpeed, StopRadius = 1f, SlowRadius = 10f }; this.blendedMovement.Movements.Add(new MovementWithWeight(seekMouse, 4.0f)); this.character.Movement = this.blendedMovement; }