예제 #1
0
    // Start is called before the first frame update
    protected override void Start()
    {
        moveTypeSeek           = new Seek();
        moveTypeSeek.character = this;
        moveTypeSeek.target    = target;

        moveTypeFlee           = new Seek();
        moveTypeFlee.flee      = true;
        moveTypeFlee.character = this;
        moveTypeFlee.target    = target;

        moveTypeEvade           = new Evade();
        moveTypeEvade.character = this;
        moveTypeEvade.target    = target;

        moveTypeAvoid           = new ObstacleAvoidance();
        moveTypeAvoid.character = this;
        moveTypeAvoid.target    = target;

        rotateTypeFace           = new Face();
        rotateTypeFace.character = this;
        rotateTypeFace.target    = target;

        rotateTypeLWYG           = new LookWhereYoureGoing();
        rotateTypeLWYG.character = this;
        rotateTypeLWYG.target    = target;
    }
예제 #2
0
    // Start is called before the first frame update
    protected override void Start()
    {
        myRotateType           = new LookWhereYoureGoing();
        myRotateType.character = this;
        myRotateType.target    = target;

        myMoveType           = new Pursue();
        myMoveType.character = this;
        myMoveType.target    = target;
    }
예제 #3
0
    // Start is called before the first frame update
    protected override void Start()
    {
        myRotateType           = new LookWhereYoureGoing();
        myRotateType.character = this;
        myRotateType.target    = target;

        myMoveType           = new Separation();
        myMoveType.character = this;
        myMoveType.targets   = targets;
    }
예제 #4
0
    // Start is called before the first frame update
    void Start()
    {
        m_Rotate           = new LookWhereYoureGoing();
        m_Rotate.character = this;
        m_Rotate.target    = target;

        m_Move              = new FollowPath();
        m_Move.character    = this;
        m_Move.path         = m_Path;
        m_Move.targetRadius = targetRadius;
    }
예제 #5
0
    public void createLook(SteeringOutput steering)
    {
        LookWhereYoureGoing myAlign = new LookWhereYoureGoing
        {
            character = this,
            target    = myTarget
        };

        steering = myAlign.getSteering();
        if (steering != null)
        {
            linearVelocity  += steering.linear * Time.deltaTime;
            angularVelocity += steering.angular * Time.deltaTime;
        }
    }
예제 #6
0
    public static bool isButterfly; // if true, cost changes

    // Start is called before the first frame update
    void Start()
    {
        if (this.gameObject.tag == "butterfly")
        {
            isButterfly = true;
        }
        else
        {
            isButterfly = false;
        }

        Debug.Log(this.name + ", " + isButterfly);

        rotateType           = new LookWhereYoureGoing();
        rotateType.character = this;
        rotateType.target    = target;

        m_Graph = new Graph();
        m_Graph.Build();
        List <Connection> path = Dijkstra.pathfind(m_Graph, start, end);

        // convert connections to gameobjects
        m_path = new GameObject[path.Count + 1];
        int i = 0;

        foreach (Connection c in path)
        {
            Debug.Log("from " + c.getFromNode() + " to " + c.getToNode()
                      + " @" + c.getCost());
            m_path[i] = c.getFromNode().gameObject;
            i++;
        }
        m_path[i] = end.gameObject;

        moveType           = new FollowPath();
        moveType.character = this;
        moveType.path      = m_path;
    }
예제 #7
0
    // Update is called once per frame
    void Update()
    {
        myTarget = GameObject.Find("Player");
        // update my position and rotation
        this.transform.position += linearVelocity * Time.deltaTime;
        Vector3 v = new Vector3(0, angularVelocity, 0); // TODO - don't make a new Vector3 every update you silly person

        this.transform.eulerAngles += v * Time.deltaTime;

        // update linear and angular velocities
        SteeringOutput steering = new SteeringOutput();

        //TODO add switch statement for different move type (6 behaviours)

        if (flee)
        {
            Seek mySeek = new Seek
            {
                character = this,
                target    = myTarget
            };
            mySeek.flee      = true;
            steering         = mySeek.getSteering();
            linearVelocity  += steering.linear * Time.deltaTime;
            angularVelocity += steering.angular * Time.deltaTime;
        }
        else if (seek)
        {
            Seek mySeek = new Seek
            {
                character = this,
                target    = myTarget
            };
            steering         = mySeek.getSteering();
            linearVelocity  += steering.linear * Time.deltaTime;
            angularVelocity += steering.angular * Time.deltaTime;
        }

        else if (arrive)
        {
            Arrive myArrive = new Arrive
            {
                character = this,
                target    = myTarget
            };
            steering = myArrive.getSteering();
            if (steering != null)
            {
                linearVelocity  += steering.linear * Time.deltaTime;
                angularVelocity += steering.angular * Time.deltaTime;
            }
            else
            {
                linearVelocity = Vector3.zero;
            }
        }

        else if (face)
        {
            Face myAlign = new Face
            {
                character = this,
                target    = myTarget
            };
            steering = myAlign.getSteering();
            if (steering != null)
            {
                linearVelocity  += steering.linear * Time.deltaTime;
                angularVelocity += steering.angular * Time.deltaTime;
            }
        }
        else if (look)
        {
            LookWhereYoureGoing myAlign = new LookWhereYoureGoing
            {
                character = this,
                target    = myTarget
            };
            steering = myAlign.getSteering();
            if (steering != null)
            {
                linearVelocity  += steering.linear * Time.deltaTime;
                angularVelocity += steering.angular * Time.deltaTime;
            }
        }
        else if (align)
        {
            Align myAlign = new Align
            {
                character = this,
                target    = myTarget
            };
            steering = myAlign.getSteering();
            if (steering != null)
            {
                linearVelocity  += steering.linear * Time.deltaTime;
                angularVelocity += steering.angular * Time.deltaTime;
            }
        }
    }
예제 #8
0
    // Update is called once per frame
    void Update()
    {
        //update position and rotation
        transform.position    += linearVelocity * Time.deltaTime;
        transform.eulerAngles += new Vector3(0, angularVelocity * Time.deltaTime, 0);

        //update linear and angular velocities
        switch (mode)
        {
        case 0:
            Seek mySeek = new Seek();
            mySeek.character = this;
            mySeek.target    = target;
            steering         = mySeek.getSteering();
            linearVelocity  += steering.linear * Time.deltaTime;
            angularVelocity += steering.angular * Time.deltaTime;
            Debug.Log("Seek");
            break;

        case 1:
            Flee myFlee = new Flee();
            myFlee.character = this;
            myFlee.target    = target;
            steering         = myFlee.getSteering();
            linearVelocity  += steering.linear * Time.deltaTime;
            angularVelocity += steering.angular * Time.deltaTime;
            Debug.Log("Flee");
            break;

        case 2:
            Arrive myArrive = new Arrive();
            myArrive.character = this;
            myArrive.target    = target;
            steering           = myArrive.getSteering();
            linearVelocity    += steering.linear * Time.deltaTime;
            angularVelocity   += steering.angular * Time.deltaTime;
            Debug.Log("Arrive");
            break;

        case 3:
            Align myAlign = new Align();
            myAlign.character = this;
            myAlign.target    = target;
            steering          = myAlign.getSteering();
            linearVelocity   += steering.linear * Time.deltaTime;
            angularVelocity  += steering.angular * Time.deltaTime;
            Debug.Log("Align");
            break;

        case 4:
            Face myFace = new Face();
            myFace.character = this;
            myFace.target    = target;
            steering         = myFace.getSteering();
            linearVelocity  += steering.linear * Time.deltaTime;
            angularVelocity += steering.angular * Time.deltaTime;
            Debug.Log("Face");
            break;

        case 5:
            LookWhereYoureGoing myLook = new LookWhereYoureGoing();
            myLook.character = this;
            myLook.target    = target;
            steering         = myLook.getSteering();
            linearVelocity  += steering.linear * Time.deltaTime;
            angularVelocity += steering.angular * Time.deltaTime;
            Debug.Log("Look");
            break;
        }
    }