Exemplo n.º 1
0
 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>();
    }
Exemplo n.º 5
0
    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>();
    }
Exemplo n.º 7
0
    // Use this for initialization
    void Start()
    {
        path.calcDistances();

        steeringBasics = GetComponent<SteeringBasics>();
        followPath = GetComponent<FollowPath>();
        colAvoid = GetComponent<CollisionAvoidance>();

        colAvoidSensor = transform.Find("ColAvoidSensor").GetComponent<NearSensor>();
    }
Exemplo n.º 8
0
    // 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;
    }
Exemplo n.º 9
0
    // 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;
    }
Exemplo n.º 10
0
 public void EnableAvoidance(bool isEnabled)
 {
     foreach (BaseSteering steering in steeringBehaviours)
     {
         if (steering as CollisionAvoidance)
         {
             CollisionAvoidance newSteer = steering as CollisionAvoidance;
             newSteer.SetActive(isEnabled);
         }
     }
 }
Exemplo n.º 11
0
 // 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();
 }
Exemplo n.º 12
0
 // 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;
     }
 }
Exemplo n.º 13
0
    // 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;
            }
Exemplo n.º 15
0
    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);
    }
Exemplo n.º 16
0
    // 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;
    }
Exemplo n.º 17
0
        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);
            }
Exemplo n.º 19
0
    // 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;
            }
        }
    }
Exemplo n.º 20
0
    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;
        }
    }
Exemplo n.º 22
0
 // 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;
        }
    }
Exemplo n.º 24
0
    // 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;
            }
        }
    }
Exemplo n.º 25
0
 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;
        }
    }
Exemplo n.º 27
0
 public ChaseState(NPCManager npcManager, CollisionAvoidance avoidObstacles)
 {
     NpcManager     = npcManager;
     _playerData    = Indestructibles.Player.GetComponent <PlayerDataManager>().PlayerData;
     AvoidObstacles = avoidObstacles;
 }