Example #1
0
    public void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.CompareTag("Conveyer"))
        {
            stateMachine.SetBool("Conveyed", true);
            onConveyer++;
        }
        LuringMachineAbstract machine = collision.gameObject.GetComponentInParent <LuringMachineAbstract>();

        if (machine != null)
        {
            luringMachines.Add(machine);
        }
    }
Example #2
0
    // OnStateEnter is called when a transition starts and the state machine starts to evaluate this state
    override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        lureTimeout          = Time.time + LURE_TIMEOUT;
        occupationFinishTime = 0;
        dodoManager          = animator.GetComponent <DodoManager>();
        luringMachine        = dodoManager.luringMachine;
        Transform machineChild = luringMachine.transform.GetChild(0);

        if (machineChild != null)
        {
            int occupationCount = machineChild.childCount;
            if (occupationCount > 0)
            {
                int occupationNumber = Random.Range(0, occupationCount);
                int randomDirection = 0, initialNumber = occupationNumber;
                while (luringMachine.occupyingDodos[occupationNumber] != null)
                {
                    if (randomDirection == 0)
                    {
                        randomDirection = Random.Range(0, 1) * 2 - 1;
                    }
                    occupationNumber += randomDirection;
                    if (occupationNumber < 0)
                    {
                        occupationNumber = occupationCount - 1;
                    }
                    if (occupationNumber >= occupationCount)
                    {
                        occupationNumber = 0;
                    }
                    if (occupationNumber == initialNumber)
                    {
                        dodoManager.stateMachine.SetTrigger("delure");
                        return;
                    }
                }
                occupation = machineChild.GetChild(occupationNumber);
                dodoManager.machineOccupationId = occupationNumber;
            }
        }
    }
Example #3
0
    void OnTriggerExit2D(Collider2D collision)
    {
        GameObject machineObject = collision.gameObject.GetComponentInParent <Transform>().gameObject;

        if (machineObject.CompareTag("Machine"))
        {
            LuringMachineAbstract machine = machineObject.GetComponent <LuringMachineAbstract>();
            if (machine != null)
            {
                luringMachines.Remove(machine);
            }
        }
        if (collision.CompareTag("Conveyer"))
        {
            onConveyer--;
        }
        if (onConveyer == 0)
        {
            stateMachine.SetBool("Conveyed", false);
        }
    }
Example #4
0
    // OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks
    override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        Vector2 dodoToMachine = occupation.position - dodoManager.transform.position;

        if (dodoToMachine.magnitude < 0.05f)
        {
            if (occupationFinishTime == 0)
            {
                dodoManager.transform.rotation = occupation.rotation;
                bool ableToInteract = luringMachine.StartInteraction(dodoManager);
                if (!ableToInteract)
                {
                    dodoManager.stateMachine.SetTrigger("delure");
                    return;
                }
                occupationFinishTime = Time.time + luringMachine.occupationTime;
            }
            else if (Time.time > occupationFinishTime)
            {
                if (luringMachine != null)
                {
                    luringMachine.FinishInteraction(dodoManager);
                    luringMachine = null;
                }
                dodoManager.stateMachine.SetTrigger("delure");
            }
        }
        else if (Time.time > lureTimeout)
        {
            dodoManager.stateMachine.SetTrigger("delure");
        }
        else
        {
            dodoManager.transform.Translate(dodoToMachine * Time.deltaTime * dodoManager.speed, Space.World);
            float angle = Mathf.Atan2(-dodoToMachine.y, -dodoToMachine.x) * Mathf.Rad2Deg;
            dodoManager.transform.rotation = Quaternion.AngleAxis(angle + 90, Vector3.forward);
        }
    }