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); } }
// 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; } } }
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); } }
// 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); } }