public WanderState(NPCManager npcManager, CollisionAvoidance avoidObstacles, FlockBehaviour avoidNpcs) { NpcManager = npcManager; _numberOfMoves = (int)Random.Range(1.0f, 10.0f); AvoidObstacles = avoidObstacles; AvoidNpcs = avoidNpcs; }
CollisionAvoidance collision; //Collosion reaction bot protected void Awake() { wander = GetComponent <Wander2>(); steering = GetComponent <SteeringBasics>(); nearSensor = GetComponentInChildren <NearSensor>(); collision = GetComponent <CollisionAvoidance>(); }
// Use this for initialization void Start() { steeringBasics = GetComponent<SteeringBasics>(); wander = GetComponent<Wander2>(); colAvoid = GetComponent<CollisionAvoidance>(); colAvoidSensor = transform.Find("ColAvoidSensor").GetComponent<NearSensor>(); }
// Use this for initialization void Start() { steeringBasics = GetComponent <SteeringBasics>(); wander = GetComponent <Wander2>(); colAvoid = GetComponent <CollisionAvoidance>(); colAvoidSensor = transform.Find("ColAvoidSensor").GetComponent <NearSensor>(); }
public void newCollisionAvoidanceForce(Collider col, float weight = 1) { CollisionAvoidance temp = gameObject.AddComponent <CollisionAvoidance>(); temp.detectionArea = col; temp.weight = weight; temp.enabled = true; }
// Use this for initialization void Start() { path.calcDistances(); steeringBasics = GetComponent <SteeringBasics>(); followPath = GetComponent <FollowPath>(); colAvoid = GetComponent <CollisionAvoidance>(); colAvoidSensor = transform.Find("ColAvoidSensor").GetComponent <NearSensor>(); }
// Use this for initialization void Start() { path.calcDistances(); steeringBasics = GetComponent<SteeringBasics>(); followPath = GetComponent<FollowPath>(); colAvoid = GetComponent<CollisionAvoidance>(); colAvoidSensor = transform.Find("ColAvoidSensor").GetComponent<NearSensor>(); }
// Start is called before the first frame update void Start() { myMoveType = new CollisionAvoidance(); myMoveType.character = this; myMoveType.targets = myTargets; myRotateType = new LookWhereGoing(); myRotateType.character = this; myRotateType.target = myTarget; }
// Start is called before the first frame update void Start() { myMoveType = new CollisionAvoidance(myTargets, 2); myMoveType.character = this; myMoveType.normalBehaviorVelocity = this.linearVelocity; myRotateType = new CollisionAvoidance(myTargets, 2); myRotateType.character = this; }
public void EnableAvoidance(bool isEnabled) { foreach (BaseSteering steering in steeringBehaviours) { if (steering as CollisionAvoidance) { CollisionAvoidance newSteer = steering as CollisionAvoidance; newSteer.SetActive(isEnabled); } } }
// Use this for initialization void Start() { aligned = new Align(); looky = new Look_Where_Going(); facing = new Face(); pathFollow = new Path_Follow(); seeking = new Seek_And_Flee(); separate = new Separation(); pursuing = new Pursue(); avoid = new CollisionAvoidance(); obstacles = new Obstacle_Avoidance(); }
// Start is called before the first frame update protected override void Start() { if (obstacle) { avoidTypeObs = new ObstacleAvoidance(); avoidTypeObs.character = this; avoidTypeObs.target = obstacleTarget; } else { avoidTypeCol = new CollisionAvoidance(); avoidTypeCol.character = this; avoidTypeCol.targets = avoidingTargets; } }
// Use this for initialization void Start() { arrive = new Arrival(); aligned = new Align(); looky = new Look_Where_Going(); facing = new Face(); pathFollow = new Path_Follow(); seeking = new Seek_And_Flee(); separate = new Separation(); pursuing = new Pursue(); avoid = new CollisionAvoidance(); obstacles = new Obstacle_Avoidance(); flocking = new Blended_Steering(); behaviors = new BehaviorAndWeight[4]; }
public Autopilot_Module(GridTerminalSystemUtils GTS, IMyShipController controller, IngameTime ingameTime, PID_Controller.PIDSettings gyroPidSettings, PID_Controller.PIDSettings thrustPidSettings, EntityTracking_Module trackingModule) { GTS.GridTerminalSystem.GetBlocksOfType(allThrusters); GTS.GridTerminalSystem.GetBlocksOfType(gyros); this.controller = controller; this.ingameTime = ingameTime; thrustPidController = new PID_Controller(thrustPidSettings); gyroControl = new AdvGyroControl(gyroPidSettings, ingameTime); thrustControl = new AdvThrustControl(controller, allThrusters, ingameTime); collisionAvoidance = new CollisionAvoidance(controller, trackingModule, 10, 10); trackingModule.onEntityDetected += collisionAvoidance.OnEntityDetected; }
void Start() { static_data target; //Inicializamos las estructuras necesarias de otros componentes for (int i = 0; i < targets_names.Length; i++) { target = GameObject.Find(targets_names[i]).GetComponent <static_data>(); targetsKins.Add(target.kineticsAgent); } kineticsAgent = agent.kineticsAgent; steeringAgent = agent.steeringAgent; Kinetics[] targets = targetsKins.ToArray(); //Inicializamos movimientos collision = new CollisionAvoidance(kineticsAgent, maxAccel, targets, radius); }
// Use this for initialization void Start() { arrive = new Arrival(); aligned = new Align(); looky = new Look_Where_Going(); facing = new Face(); pathFollow = new Path_Follow(); seeking = new Seek_And_Flee(); separate = new Separation(); pursuing = new Pursue(); avoid = new CollisionAvoidance(); obstacles = new Obstacle_Avoidance(); flocking = new Blended_Steering(); //finding = new Pathfinder(); behaviors = new BehaviorAndWeight[4]; // Use if doing Path Finding: //Graph myGraph = new Graph(); //myGraph.Build(); //List<Connection> path = Dijkstra.pathfind(myGraph, start, goal); //// path is a list of connections - convert this to gameobjects for the FollowPath steering behavior //aiTargets = new GameObject[path.Count + 1]; //int i = 0; //foreach (Connection c in path) //{ // Debug.Log("from " + c.getFromNode() + " to " + c.getToNode() + " @" + c.getCost()); // aiTargets[i] = c.getFromNode().gameObject; // i++; //} //aiTargets[i] = goal.gameObject; }
public collisionAvoidResult avoidCollisions(ref NavSettings CNS, long updateCount, byte tryCount = 10) { //log("entered avoidCollisions update: "+updateCount); if (updateCount < nextUpdate) { return(collisionAvoidResult.NOT_PERFORMED); } if (myCA == null || nextUpdate != updateCount) { //log("update should be " + (lastUpdate + 1) + " is " + updateCount); this.CNS = CNS; myCA = new CollisionAvoidance(ref CNS, myGridDim); //(ref CNS, myRC, collisionLength, distance_from_RC_to_front, lengthOfGrid); } collisionAvoidResult result; if (!myCA.next(out result)) { // will end up here after NO_COLLISION if (tryCount <= 0) { myLogger.log(Logger.severity.ERROR, "avoidCollisions", "Error: too many tries", "avoidCollisions(CNS, " + updateCount + ", " + tryCount + ")"); nextUpdate = updateCount + 10; return(collisionAvoidResult.NO_WAY_FORWARD); } myCA = null; return(avoidCollisions(ref CNS, updateCount, (byte)(tryCount - 1))); } if (result == collisionAvoidResult.NO_WAY_FORWARD) { nextUpdate = updateCount + 10; myCA = null; } else { nextUpdate = updateCount + 1; } //log("time to avoidCollisions: " + (DateTime.UtcNow - startOfMethod).TotalMilliseconds+" spheres checked: "+spheresChecked); return(result); }
public Autopilot_Module(GridTerminalSystemUtils GTS, IMyShipController controller, IngameTime ingameTime, EntityTracking_Module trackingModule) { GTS.GridTerminalSystem.GetBlocksOfType(allThrusters); GTS.GridTerminalSystem.GetBlocksOfType(gyros); this.controller = controller; this.ingameTime = ingameTime; thrustControl = new AdvThrustControl(controller, allThrusters, ingameTime); collisionAvoidance = new CollisionAvoidance(controller, trackingModule, 10, 10); trackingModule.onEntityDetected += collisionAvoidance.OnEntityDetected; PID_Controller.PIDSettings onePid = new PID_Controller.PIDSettings { PGain = 1, DerivativeGain = 0, IntegralGain = 0, }; thrustPidController = new PID_Controller(onePid); gyroControl = new AdvGyroControl(onePid, ingameTime); }
// Update is called once per frame void Update() { if (behaviorNum != 0) { // update my position and rotation this.transform.position += linearVelocity * Time.deltaTime; Vector3 v = new Vector3(0, angularVelocity, 0); this.transform.eulerAngles += v * Time.deltaTime; } // update linear and angular velocities SteeringOutput steering = new SteeringOutput(); // Seek: target is "alsoMyTargetForPursueTho" if (behaviorNum == 1) { text.text = "Seek"; Seek mySeek = new Seek(); mySeek.target = alsoMyTargetForPursueTho; mySeek.character = this; steering = mySeek.getSteering(); linearVelocity += steering.linear * Time.deltaTime; angularVelocity += steering.angular * Time.deltaTime; } // Flee else if (behaviorNum == 2) { Flee myFlee = new Flee(); text.text = "Flee"; myFlee.character = this; myFlee.target = myTarget; steering = myFlee.getSteering(); linearVelocity += steering.linear * Time.deltaTime; angularVelocity += steering.angular * Time.deltaTime; } // Arrive else if (behaviorNum == 3) { Arrive myArrive = new Arrive(); text.text = "Arrive"; myArrive.character = this; myArrive.target = myTarget; steering = myArrive.getSteering(); if (steering != null) { linearVelocity += steering.linear * Time.deltaTime; angularVelocity += steering.angular * Time.deltaTime; } else { linearVelocity = Vector3.zero; } } // Align else if (behaviorNum == 4) { Align myAlign = new Align(); text.text = "Align"; myAlign.character = this; myAlign.target = myTarget; steering = myAlign.getSteering(); if (steering != null) { linearVelocity += steering.linear * Time.deltaTime; angularVelocity += steering.angular * Time.deltaTime; } } // Face else if (behaviorNum == 5) { Face myFace = new Face(); text.text = "Face"; myFace.character = this; myFace.target = myTarget; steering = myFace.getSteering(); if (steering != null) { linearVelocity += steering.linear * Time.deltaTime; angularVelocity += steering.angular * Time.deltaTime; } } // Look where you're going else if (behaviorNum == 6) { LWYG myLook = new LWYG(); text.text = "LWYG"; myLook.character = this; steering = myLook.getSteering(); if (steering != null) { linearVelocity += steering.linear * Time.deltaTime; angularVelocity += steering.angular * Time.deltaTime; } } // Path following else if (behaviorNum == 7) { text.text = "Path Follow"; myPathFollow.character = this; myPathFollow.path = pathToFollow; steering = myPathFollow.getSteering(); if (steering != null) { if (linearVelocity.magnitude > 2) { linearVelocity = linearVelocity.normalized * 2; } linearVelocity += steering.linear * Time.deltaTime; angularVelocity += steering.angular * Time.deltaTime; } } // Pursue else if (behaviorNum == 8) { Pursue myPursue = new Pursue(); text.text = "Pursue"; myPursue.character = this; myPursue.target = alsoMyTargetForPursueTho; steering = myPursue.getSteering(); if (steering != null) { linearVelocity += steering.linear * Time.deltaTime; angularVelocity += steering.angular * Time.deltaTime; } } // Seperate else if (behaviorNum == 9) { text.text = "Seperate"; mySeperate.character = this; mySeperate.targets = targetsForSeperate; steering = mySeperate.getSteering(); if (steering != null) { linearVelocity += steering.linear * Time.deltaTime; angularVelocity += steering.angular * Time.deltaTime; } } // Collision Avoidance else if (behaviorNum == 10) { text.text = "Collision Avoidance"; CollisionAvoidance myCollision = new CollisionAvoidance(); myCollision.character = this; myCollision.targets = targetsForSeperate; steering = myCollision.getSteering(); if (steering != null) { linearVelocity += steering.linear * Time.deltaTime; angularVelocity += steering.angular * Time.deltaTime; } } // Obstacle Avoidance else if (behaviorNum == 11) { text.text = "Obstacle Avoidance"; ObstacleAvoid myObstacleAvoid = new ObstacleAvoid(); myObstacleAvoid.character = this; myObstacleAvoid.target = myTarget; steering = myObstacleAvoid.getSteering(); if (steering != null) { linearVelocity += steering.linear * Time.deltaTime; angularVelocity += steering.angular * Time.deltaTime; } } // Flocking else if (behaviorNum == 12) { text.text = "Flocking"; if (!setUp) { // BehaviorAndWeight1 : Seperate BehaviorAndWeight behavior1 = new BehaviorAndWeight(); Seperate mySeperate = new Seperate(); mySeperate.character = this; GameObject[] birds = GameObject.FindGameObjectsWithTag("Bird"); Kinematic[] kBirds = new Kinematic[birds.Length - 1]; int j = 0; for (int i = 0; i < birds.Length - 1; i++) { if (birds[i] == this) { continue; } kBirds[j++] = birds[i].GetComponent <Kinematic>(); } mySeperate.targets = kBirds; behavior1.behavior = mySeperate; behavior1.weight = 10f; // BehaviorAndWeight2 : Arrive BehaviorAndWeight behavior2 = new BehaviorAndWeight(); Arrive myArrive = new Arrive(); myArrive.character = this; myArrive.target = myTarget; behavior2.behavior = myArrive; behavior2.weight = 10f; // BehaviorAndWeight3 : Align BehaviorAndWeight behavior3 = new BehaviorAndWeight(); Align myAlign = new Align(); myAlign.character = this; myAlign.target = myTarget; behavior3.behavior = myAlign; behavior3.weight = 3f; // BehaviorAndWeight4 : ObstacleAvoidance BehaviorAndWeight behavior4 = new BehaviorAndWeight(); ObstacleAvoid myObstacle = new ObstacleAvoid(); myObstacle.character = this; myObstacle.target = myTargetObstacle; // Does this make sense? behavior4.behavior = myObstacle; behavior4.weight = 1f; // Lower priority steering behaviors: Arrive, Align, & Seperate BlendedSteeringDemo myBlended = new BlendedSteeringDemo(); myBlended.behaviors = new BehaviorAndWeight[3]; myBlended.behaviors[0] = new BehaviorAndWeight(); myBlended.behaviors[0] = behavior1; myBlended.behaviors[1] = new BehaviorAndWeight(); myBlended.behaviors[1] = behavior2; myBlended.behaviors[2] = new BehaviorAndWeight(); myBlended.behaviors[2] = behavior3; // Higher priority steering behavior: Obstacle avoidance BlendedSteeringDemo myBlendedAvoid = new BlendedSteeringDemo(); myBlendedAvoid.behaviors = new BehaviorAndWeight[1]; myBlendedAvoid.behaviors[0] = new BehaviorAndWeight(); myBlendedAvoid.behaviors[0] = behavior4; // Initialize myPriority's array of groups with two groups myPriority.groups = new BlendedSteeringDemo[2]; myPriority.groups[0] = new BlendedSteeringDemo(); myPriority.groups[0] = myBlendedAvoid; myPriority.groups[1] = new BlendedSteeringDemo(); myPriority.groups[1] = myBlended; setUp = true; } steering = myPriority.getSteering(); if (steering != null) { linearVelocity += steering.linear * Time.deltaTime; angularVelocity += steering.angular * Time.deltaTime; } } }
void MainSteeringBehaviors() { ResetOrientation(); switch (choiceOfBehavior) { case SteeringBehaviors.Seek: Seek seek = new Seek(); seek.character = this; seek.target = newTarget; SteeringOutput seeking = seek.getSteering(); if (seeking != null) { linear += seeking.linear * Time.deltaTime; angular += seeking.angular * Time.deltaTime; } break; case SteeringBehaviors.Flee: Flee flee = new Flee(); flee.character = this; flee.target = newTarget; SteeringOutput fleeing = flee.getSteering(); if (fleeing != null) { linear += fleeing.linear * Time.deltaTime; angular += fleeing.angular * Time.deltaTime; } break; case SteeringBehaviors.Align: Align align = new Align(); align.character = this; align.target = newTarget; SteeringOutput aligning = align.getSteering(); if (aligning != null) { linear += aligning.linear * Time.deltaTime; angular += aligning.angular * Time.deltaTime; } break; case SteeringBehaviors.Face: Face face = new Face(); face.character = this; face.target = newTarget; SteeringOutput facing = face.getSteering(); if (facing != null) { linear += facing.linear * Time.deltaTime; angular += facing.angular * Time.deltaTime; } break; case SteeringBehaviors.LookWhereGoing: LookWhereGoing look = new LookWhereGoing(); look.character = this; look.target = newTarget; SteeringOutput looking = look.getSteering(); if (looking != null) { linear += looking.linear * Time.deltaTime; angular += looking.angular * Time.deltaTime; } break; case SteeringBehaviors.Arrive: Arrive arrive = new Arrive(); arrive.character = this; arrive.target = newTarget; SteeringOutput arriving = arrive.getSteering(); if (arriving != null) { linear += arriving.linear * Time.deltaTime; angular += arriving.angular * Time.deltaTime; } break; case SteeringBehaviors.PathFollow: follow.character = this; lookwg.character = this; follow.path = myPath; lookwg.target = newTarget; SteeringOutput following = follow.getSteering(); SteeringOutput lookingwg = lookwg.getSteering(); if (following != null) { linear += following.linear * Time.deltaTime; // angular += lookingwg.angular* Time.deltaTime; } break; case SteeringBehaviors.Pursue: Pursue pursue = new Pursue(); LookWhereGoing PursuelookWhereGoing = new LookWhereGoing(); pursue.character = this; PursuelookWhereGoing.character = this; pursue.target = newTarget; PursuelookWhereGoing.target = newTarget; SteeringOutput pursuing = pursue.getSteering(); SteeringOutput pursuelookingWhereGoing = PursuelookWhereGoing.getSteering(); if (pursuing != null) { if (pursuing.linear.magnitude <= maxSpeed) { linear += pursuing.linear * Time.deltaTime; } angular += pursuing.angular * Time.deltaTime; } break; case SteeringBehaviors.Separate: Separation separate = new Separation(); LookWhereGoing lookWhereGoing = new LookWhereGoing(); separate.character = this; lookWhereGoing.character = this; separate.targets = targets; lookWhereGoing.target = newTarget; SteeringOutput lookingWhereGoing = lookWhereGoing.getSteering(); SteeringOutput separating = separate.getSteering(); if (separating != null) { linear += separating.linear * Time.deltaTime; angular += separating.angular * Time.deltaTime; } break; case SteeringBehaviors.CollisionAvoidance: CollisionAvoidance avoid = new CollisionAvoidance(); LookWhereGoing AvoidlookWhereGoing = new LookWhereGoing(); avoid.character = this; AvoidlookWhereGoing.character = this; avoid.targets = targets; AvoidlookWhereGoing.target = newTarget; SteeringOutput AvoidlookingWhereGoing = AvoidlookWhereGoing.getSteering(); SteeringOutput avoiding = avoid.getSteering(); if (avoiding != null) { linear += avoiding.linear * Time.deltaTime; angular += avoiding.angular * Time.deltaTime; } break; case SteeringBehaviors.ObstacleAvoidance: ObstacleAvoidance obAvoid = new ObstacleAvoidance(); LookWhereGoing obAvoidlookWhereGoing = new LookWhereGoing(); obAvoid.character = this; obAvoidlookWhereGoing.character = this; obAvoid.target = newTarget; obAvoidlookWhereGoing.target = newTarget; SteeringOutput obAvoiding = obAvoid.getSteering(); SteeringOutput obAvoidlookingWhereGoing = obAvoidlookWhereGoing.getSteering(); if (obAvoiding != null) { if (obAvoiding.linear.magnitude <= maxSpeed) { linear += obAvoiding.linear * Time.deltaTime; } angular += obAvoiding.angular * Time.deltaTime; } break; case SteeringBehaviors.Flocking: Separation sepFlock = new Separation(); Arrive arriveFlock = new Arrive(); LookWhereGoing lwgFlock = new LookWhereGoing(); BlendedSteering mySteering = new BlendedSteering(); Kinematic[] kBirds; sepFlock.character = this; GameObject[] goBirds = GameObject.FindGameObjectsWithTag("Pengu"); kBirds = new Kinematic[goBirds.Length - 1]; int j = 0; for (int i = 0; i < goBirds.Length - 1; i++) { if (goBirds[i] == this) { continue; } goBirds[i].GetComponent <Animator>().SetInteger("Walk", 1); kBirds[j++] = goBirds[i].GetComponent <Kinematic>(); } sepFlock.targets = kBirds; arriveFlock.character = this; //Debug.Log(arriveFlock.character); arriveFlock.target = newTarget; //Debug.Log(arriveFlock.target); lwgFlock.character = this; lwgFlock.target = newTarget; mySteering.behaviors = new BehaviorAndWeight[3]; mySteering.behaviors[0] = new BehaviorAndWeight(); mySteering.behaviors[0].behavior = sepFlock; mySteering.behaviors[0].weight = 1f; mySteering.behaviors[1] = new BehaviorAndWeight(); mySteering.behaviors[1].behavior = arriveFlock; mySteering.behaviors[1].weight = 1f; mySteering.behaviors[2] = new BehaviorAndWeight(); mySteering.behaviors[2].behavior = lwgFlock; mySteering.behaviors[2].weight = 1f; ObstacleAvoidance myAvoid = new ObstacleAvoidance(); myAvoid.character = this; myAvoid.target = newTarget; myAvoid.flee = true; BlendedSteering myHighPrioritySteering = new BlendedSteering(); myHighPrioritySteering.behaviors = new BehaviorAndWeight[1]; myHighPrioritySteering.behaviors[0] = new BehaviorAndWeight(); myHighPrioritySteering.behaviors[0].behavior = myAvoid; myHighPrioritySteering.behaviors[0].weight = 0.1f; myAdvancedSteering.groups = new BlendedSteering[2]; myAdvancedSteering.groups[0] = new BlendedSteering(); myAdvancedSteering.groups[0] = myHighPrioritySteering; myAdvancedSteering.groups[1] = new BlendedSteering(); myAdvancedSteering.groups[1] = mySteering; //steeringUpdate = mySteering.getSteering(); avoidObstacles = true; if (!avoidObstacles) { steeringUpdate = mySteering.getSteering(); if (steeringUpdate != null) { linear += steeringUpdate.linear * Time.deltaTime; angular += steeringUpdate.angular * Time.deltaTime; } } else { steeringUpdate = myAdvancedSteering.getSteering(); if (steeringUpdate != null) { linear += steeringUpdate.linear * Time.deltaTime; angular += steeringUpdate.angular * Time.deltaTime; } } break; case SteeringBehaviors.PathFinder: SteeringOutput lwyger = myRotateType.getSteering(); linear += myMoveType.getSteering().linear *Time.deltaTime; angular += myMoveType.getSteering().angular *Time.deltaTime; break; } }
// Update is called once per frame void Update() { //Debug.Log(target); // Check distance to see if steering behavior should be applied to AI // float targetDist = (transform.position - target.transform.position).magnitude; // if (!DistanceActivation || targetDist >= activationRange) { } transform.position += linearVelocity * Time.deltaTime; // adding angular velocity to current transform rotation y component if (float.IsNaN(angularVelocity)) { angularVelocity = 0; } transform.eulerAngles += new Vector3(0, angularVelocity * Time.deltaTime, 0); // control to switch to proper steering behavior if (avoidObstacles) { ObstacleAvoidance avoid = new ObstacleAvoidance(); avoid.ai = this; SteeringOutput avoidForce = avoid.GetSteering(); if (avoidForce != null) { linearVelocity += avoidForce.linear; } } if (seperationObstacles.Length > 0) { Seperation seperation = new Seperation(); seperation.targets = seperationObstacles; seperation.ai = this; SteeringOutput seperateForce = seperation.GetSteering(); // check to see if steering is greater than zero and lock out control from other steering if (seperateForce.linear.magnitude > 0) { seperating = true; } else { seperating = false; } linearVelocity += seperateForce.linear * Time.deltaTime; } if (collisionAvoidance.Length > 0) { CollisionAvoidance avoidKinematic = new CollisionAvoidance(); avoidKinematic.ai = this; avoidKinematic.targets = collisionAvoidance; SteeringOutput avoidKinematicForce = avoidKinematic.GetSteering(); if (avoidKinematicForce != null) { linearVelocity += avoidKinematicForce.linear; } } switch (movementType) { case "seek": Seek mySeek = new Seek(); mySeek.ai = this; // if seek is false set seek property on class to false to activate flee mySeek.seek = true; mySeek.target = target; SteeringOutput steeringSeek = mySeek.GetSteering(); if (!seperating) { linearVelocity += steeringSeek.linear * Time.deltaTime; } if (linearVelocity.magnitude > maxSpeed) { linearVelocity.Normalize(); linearVelocity *= maxSpeed; } break; case "flee": Seek myFlee = new Seek(); myFlee.ai = this; // if seek is false set seek property on class to false to activate flee myFlee.seek = false; myFlee.target = target; SteeringOutput steeringFlee = myFlee.GetSteering(); if (!seperating) { linearVelocity += steeringFlee.linear * Time.deltaTime; } if (linearVelocity.magnitude > maxSpeed) { linearVelocity.Normalize(); linearVelocity *= maxSpeed; } break; case "arrive": Arrive myArrive = new Arrive(); myArrive.ai = this; myArrive.target = target; SteeringOutput steeringArrive = myArrive.GetSteering(); if (!seperating) { linearVelocity += steeringArrive.linear * Time.deltaTime; } break; case "pursue": Pursue myPursue = new Pursue(); myPursue.ai = this; myPursue.target = target; SteeringOutput steeringPursue = myPursue.GetSteering(); if (!seperating) { linearVelocity += steeringPursue.linear * Time.deltaTime; } if (linearVelocity.magnitude > maxSpeed) { linearVelocity.Normalize(); linearVelocity *= maxSpeed; } break; case "evade": Pursue myEvade = new Pursue(); myEvade.ai = this; myEvade.target = target; // This changes the seek flag in the parent Seek class of Pursue, sending it the flee vector instead myEvade.seek = false; SteeringOutput steeringEvade = myEvade.GetSteering(); if (!seperating) { linearVelocity += steeringEvade.linear * Time.deltaTime; } if (linearVelocity.magnitude > maxSpeed) { linearVelocity.Normalize(); linearVelocity *= maxSpeed; } break; default: // provide no input break; // If obstacles have been provided, return steering to seperate from them } switch (rotationType) { case "face": Face myFace = new Face(); myFace.ai = this; myFace.target = target; SteeringOutput steeringFace = myFace.GetSteering(); if (steeringFace != null) { // linearVelocity += steering.linear * Time.deltaTime; angularVelocity += steeringFace.angular * Time.deltaTime; } break; case "align": Align myAlign = new Align(); myAlign.ai = this; myAlign.target = target; SteeringOutput steeringAlign = myAlign.GetSteering(); if (steeringAlign != null) { //linearVelocity += steering.linear * Time.deltaTime; angularVelocity += steeringAlign.angular * Time.deltaTime; } break; case "look": LookWhereGoing myLook = new LookWhereGoing(); myLook.ai = this; myLook.target = target; SteeringOutput steeringLook = myLook.GetSteering(); if (steeringLook != null) { //linearVelocity += steering.linear * Time.deltaTime; angularVelocity += steeringLook.angular * Time.deltaTime; } break; default: //provide no input break; } }
// Start is called before the first frame update void Start() { myMoveType = new CollisionAvoidance(); myMoveType.character = this; myMoveType.targets = myTargets; }
private void Start() { kinematic = GetComponent <Kinematic>(); switch (moveType) { case SteeringType.Pursue: pursueAI = new Pursue(); pursueAI.character = kinematic; pursueAI.target = target; break; case SteeringType.Evade: evadeAI = new Evade(); evadeAI.character = kinematic; evadeAI.target = target; break; case SteeringType.FollowPath: followAI = new PathFollow(); followAI.character = kinematic; followAI.path = pathOfObjects; break; case SteeringType.Seek: seekAI = new Seek(); seekAI.character = kinematic; seekAI.target = target; break; case SteeringType.Flee: fleeAI = new Flee(); fleeAI.character = kinematic; fleeAI.target = target; break; case SteeringType.Seperation: seperationAI = new Seperation(); seperationAI.character = kinematic; seperationAI.targets = seperateObstacles; break; case SteeringType.Arrive: arriveAI = new Arrive(); arriveAI.character = kinematic; arriveAI.target = target; break; case SteeringType.CollisionAvoidance: avoidAI = new CollisionAvoidance(); avoidAI.character = kinematic; avoidAI.targets = collisionTargets; break; case SteeringType.ObstacleAvoidance: obstacleAI = new ObstacleAvoidance(); obstacleAI.character = kinematic; break; case SteeringType.Flocking: flockAI = new Flocker(); break; case SteeringType.None: break; } switch (lookType) { case LookType.Align: alignAI = new Align(); alignAI.character = kinematic; alignAI.target = target; break; case LookType.Face: faceAI = new Face(); faceAI.character = kinematic; faceAI.target = target; break; case LookType.LookWhereGoing: lookAI = new LookWhereGoing(); lookAI.character = kinematic; break; } }
// Update is called once per frame void Update() { if (behaviorNum != 0) { // update my position and rotation this.transform.position += linearVelocity * Time.deltaTime; Vector3 v = new Vector3(0, angularVelocity, 0); this.transform.eulerAngles += v * Time.deltaTime; } // update linear and angular velocities SteeringOutput steering = new SteeringOutput(); // Seek: target is "alsoMyTargetForPursueTho" if (behaviorNum == 1) { Seek mySeek = new Seek(); text.text = "Seek"; mySeek.target = alsoMyTargetForPursueTho; mySeek.character = this; steering = mySeek.getSteering(); linearVelocity += steering.linear * Time.deltaTime; angularVelocity += steering.angular * Time.deltaTime; } // Flee else if (behaviorNum == 2) { Flee myFlee = new Flee(); text.text = "Flee"; myFlee.character = this; myFlee.target = myTarget; steering = myFlee.getSteering(); linearVelocity += steering.linear * Time.deltaTime; angularVelocity += steering.angular * Time.deltaTime; } // Arrive else if (behaviorNum == 3) { Arrive myArrive = new Arrive(); text.text = "Arrive"; myArrive.character = this; myArrive.target = myTarget; steering = myArrive.getSteering(); if (steering != null) { linearVelocity += steering.linear * Time.deltaTime; angularVelocity += steering.angular * Time.deltaTime; } else { linearVelocity = Vector3.zero; } } // Align else if (behaviorNum == 4) { Align myAlign = new Align(); text.text = "Align"; myAlign.character = this; myAlign.target = myTarget; steering = myAlign.getSteering(); if (steering != null) { linearVelocity += steering.linear * Time.deltaTime; angularVelocity += steering.angular * Time.deltaTime; } } // Face else if (behaviorNum == 5) { Face myFace = new Face(); text.text = "Face"; myFace.character = this; myFace.target = myTarget; steering = myFace.getSteering(); if (steering != null) { linearVelocity += steering.linear * Time.deltaTime; angularVelocity += steering.angular * Time.deltaTime; } } // Look where you're going else if (behaviorNum == 6) { LWYG myLook = new LWYG(); text.text = "LWYG"; myLook.character = this; steering = myLook.getSteering(); if (steering != null) { linearVelocity += steering.linear * Time.deltaTime; angularVelocity += steering.angular * Time.deltaTime; } } // Path following else if (behaviorNum == 7) { text.text = "Path Follow"; myPathFollow.character = this; myPathFollow.path = pathToFollow; steering = myPathFollow.getSteering(); if (steering != null) { linearVelocity += steering.linear * Time.deltaTime; angularVelocity += steering.angular * Time.deltaTime; } } // Pursue else if (behaviorNum == 8) { Pursue myPursue = new Pursue(); text.text = "Pursue"; myPursue.character = this; myPursue.target = alsoMyTargetForPursueTho; steering = myPursue.getSteering(); if (steering != null) { linearVelocity += steering.linear * Time.deltaTime; angularVelocity += steering.angular * Time.deltaTime; } } // Seperate else if (behaviorNum == 9) { text.text = "Seperate"; mySeperate.character = this; mySeperate.targets = targetsForSeperate; steering = mySeperate.getSteering(); if (steering != null) { linearVelocity += steering.linear * Time.deltaTime; angularVelocity += steering.angular * Time.deltaTime; } } // Collision Avoidance else if (behaviorNum == 10) { text.text = "Collision Avoidance"; CollisionAvoidance myCollision = new CollisionAvoidance(); myCollision.character = this; myCollision.targets = targetsForSeperate; steering = myCollision.getSteering(); if (steering != null) { linearVelocity += steering.linear * Time.deltaTime; angularVelocity += steering.angular * Time.deltaTime; } } // Obstacle Avoidance else if (behaviorNum == 11) { text.text = "Obstacle Avoidance"; ObstacleAvoid myObstacleAvoid = new ObstacleAvoid(); myObstacleAvoid.character = this; myObstacleAvoid.target = myTarget; steering = myObstacleAvoid.GetSteering(); if (steering != null) { linearVelocity += steering.linear * Time.deltaTime; angularVelocity += steering.angular * Time.deltaTime; } } }
public void SetCollisionAvoidance(CollisionAvoidance technique) { avoidance = technique; }
void MainSteeringBehaviors() { ResetOrientation(); switch (choiceOfBehavior) { case steeringBehaviors.Seek: Seek seek = new Seek(); seek.character = this; seek.target = newTarget; SteeringOutput seeking = seek.getSteering(); if (seeking != null) { linear += seeking.linear * Time.deltaTime; angular += seeking.angular * Time.deltaTime; } break; case steeringBehaviors.Flee: Flee flee = new Flee(); flee.character = this; flee.target = newTarget; SteeringOutput fleeing = flee.getSteering(); if (fleeing != null) { linear += fleeing.linear * Time.deltaTime; angular += fleeing.angular * Time.deltaTime; } break; case steeringBehaviors.Align: Align align = new Align(); align.character = this; align.target = newTarget; SteeringOutput aligning = align.getSteering(); if (aligning != null) { linear += aligning.linear * Time.deltaTime; angular += aligning.angular * Time.deltaTime; } break; case steeringBehaviors.Face: Face face = new Face(); face.character = this; face.target = newTarget; SteeringOutput facing = face.getSteering(); if (facing != null) { linear += facing.linear * Time.deltaTime; angular += facing.angular * Time.deltaTime; } break; case steeringBehaviors.LookWhereGoing: LookWhereGoing look = new LookWhereGoing(); look.character = this; look.target = newTarget; SteeringOutput looking = look.getSteering(); if (looking != null) { linear += looking.linear * Time.deltaTime; angular += looking.angular * Time.deltaTime; } break; case steeringBehaviors.Arrive: Arrive arrive = new Arrive(); arrive.character = this; arrive.target = newTarget; SteeringOutput arriving = arrive.getSteering(); if (arriving != null) { linear += arriving.linear * Time.deltaTime; angular += arriving.angular * Time.deltaTime; } break; case steeringBehaviors.PathFollow: follow.character = this; lookwg.character = this; follow.path = path; lookwg.target = newTarget; SteeringOutput following = follow.getSteering(); SteeringOutput lookingwg = lookwg.getSteering(); if (following != null) { linear += following.linear * Time.deltaTime; // angular += lookingwg.angular* Time.deltaTime; } break; case steeringBehaviors.Pursue: Pursue pursue = new Pursue(); LookWhereGoing PursuelookWhereGoing = new LookWhereGoing(); pursue.character = this; PursuelookWhereGoing.character = this; pursue.target = newTarget; PursuelookWhereGoing.target = newTarget; SteeringOutput pursuing = pursue.getSteering(); SteeringOutput pursuelookingWhereGoing = PursuelookWhereGoing.getSteering(); if (pursuing != null) { linear += pursuing.linear * Time.deltaTime; angular += pursuing.angular * Time.deltaTime; } break; case steeringBehaviors.Separate: Separate separate = new Separate(); LookWhereGoing lookWhereGoing = new LookWhereGoing(); separate.character = this; lookWhereGoing.character = this; separate.targets = targets; lookWhereGoing.target = newTarget; SteeringOutput lookingWhereGoing = lookWhereGoing.getSteering(); SteeringOutput separating = separate.getSteering(); if (separating != null) { linear += separating.linear * Time.deltaTime; angular += separating.angular * Time.deltaTime; } break; case steeringBehaviors.CollisionAvoidance: CollisionAvoidance avoid = new CollisionAvoidance(); LookWhereGoing AvoidlookWhereGoing = new LookWhereGoing(); avoid.character = this; AvoidlookWhereGoing.character = this; avoid.targets = targets; AvoidlookWhereGoing.target = newTarget; SteeringOutput AvoidlookingWhereGoing = AvoidlookWhereGoing.getSteering(); SteeringOutput avoiding = avoid.getSteering(); if (avoiding != null) { linear += avoiding.linear * Time.deltaTime; angular += avoiding.angular * Time.deltaTime; } break; case steeringBehaviors.ObstacleAvoidance: ObstacleAvoidance obAvoid = new ObstacleAvoidance(); LookWhereGoing obAvoidlookWhereGoing = new LookWhereGoing(); obAvoid.character = this; obAvoidlookWhereGoing.character = this; obAvoid.target = newTarget; obAvoidlookWhereGoing.target = newTarget; SteeringOutput obAvoiding = obAvoid.getSteering(); SteeringOutput obAvoidlookingWhereGoing = obAvoidlookWhereGoing.getSteering(); if (obAvoiding != null) { linear += obAvoiding.linear * Time.deltaTime; angular += obAvoiding.angular * Time.deltaTime; } break; } }
public ChaseState(NPCManager npcManager, CollisionAvoidance avoidObstacles) { NpcManager = npcManager; _playerData = Indestructibles.Player.GetComponent <PlayerDataManager>().PlayerData; AvoidObstacles = avoidObstacles; }