void CanMate() { if (Time.time - TimeTilReadyForMating.value > m_InstanciationTime) { m_Behaviour = BugBehaviour.Mating; } }
void SeekMate() { if ((m_TargetPosition - gameObject.transform.position).magnitude < 1f) { Mate(); m_Behaviour = BugBehaviour.Searching; } }
void DetectPlayer() { Vector3 playerPosition = m_GameManager.Player.transform.position; Vector2 playerXZ = new Vector2(playerPosition.x, playerPosition.z); Vector2 bugXZ = new Vector2(gameObject.transform.position.x, gameObject.transform.position.z); float distance = Mathf.Sqrt((playerXZ - bugXZ).sqrMagnitude); if (distance < RangePlayerDetection.value) { m_Behaviour = BugBehaviour.Fleeing; DropPheromone(Pheromone.PheromoneType.Ennemy, playerPosition); } else { if (m_Behaviour == BugBehaviour.Fleeing) { m_Behaviour = BugBehaviour.Searching; } } }
void ProcessPheromone(Pheromone pheromone) { // Flee for your life if (m_Behaviour == BugBehaviour.Fleeing) { return; } switch (pheromone.Type) { case (Pheromone.PheromoneType.Ennemy): m_Behaviour = BugBehaviour.Fleeing; break; case (Pheromone.PheromoneType.Mating): if (pheromone.Dropper != this) { if (Time.time - TimeTilReadyForMating.value < m_InstanciationTime) { return; } m_Behaviour = BugBehaviour.SeekingMate; m_TargetPosition = pheromone.Target; m_Mate = pheromone.Dropper; } break; case (Pheromone.PheromoneType.Food): m_Behaviour = BugBehaviour.Gathering; m_TargetPosition = pheromone.Target; break; case (Pheromone.PheromoneType.Home): if (m_Behaviour == BugBehaviour.Gathering) { m_TargetPosition = pheromone.Target; } break; } }
void OnCollisionExit(Collision coll) { if (coll.gameObject.layer == m_EnvironmentLayer) { m_State = BugState.MidAir; } if (coll.gameObject.layer == m_FoodLayer) { if (m_Behaviour == BugBehaviour.Gathering) { m_Behaviour = BugBehaviour.Searching; } } }