Example #1
0
 void GetHurt(int damage)
 {
     currState = BehaviourStates.Hurt;
     if (uiHlth == null)
     {
         uiHlth = WorldUI.instance.CreateWhaleHealth(transform);
     }
     anim.SetTrigger(hurtID);
 }
Example #2
0
 void Swim()
 {
     cumBreathTime -= Time.deltaTime;
     Move();
     ChangeDestination();
     if (cumBreathTime <= 0)
     {
         targetHeight = breathingDepth;
         currState    = BehaviourStates.MovingToSurface;
     }
 }
Example #3
0
 void Healed()
 {
     ResultScreen.instance.NumTreatedWhales++;
     currState       = BehaviourStates.Breathing;
     currDestination = (waypointParent.TransformPoint(offset));
     if (transform.parent == tyingPoint)
     {
         UnTie();
     }
     anim.Rebind();
     Destroy(uiHlth);
 }
Example #4
0
 void MoveToSurface()
 {
     Move();
     ChangeDestination();
     cumSurfaceTime -= Time.deltaTime;
     if (cumSurfaceTime <= 0)
     {
         cumBreathingTime = breathingTime;
         currState        = BehaviourStates.Breathing;
         isOnSurface      = true;
     }
 }
Example #5
0
 // Use this for initialization
 void Start()
 {
     anim = GetComponent <Animator>();
     anim.SetFloat("offset", Random.Range(0f, 1f));
     health = GetComponent <Health>();
     rb     = GetComponent <Rigidbody>();
     GameManager.instance.RegisterFish(this);
     WorldUI.instance.CreateWhalePointer(transform);
     health.onDamage.AddListener(GetHurt);
     health.onDie.AddListener(Die);
     health.onHealed.AddListener(Healed);
     currState       = BehaviourStates.Swimming;
     cumBreathTime   = breathTime;
     currDestination = (waypointParent.TransformPoint(offset));
 }
Example #6
0
    // Use this for initialization
    void Start()
    {
        movementAI.target = target;
        targetStatus      = target.GetComponent <StatusManager>();
        targetStat        = target.GetComponent <StatSheet>();

        goal         = GoalStates.nothing;
        behaviour    = BehaviourStates.preBattle;
        goalComplete = false;
        goalStarted  = false;
        if (navMesh.enabled)
        {
            navMesh.isStopped = true;
        }
        navMesh.enabled = false;
    }
Example #7
0
 public void ChangeBehaviour()
 {
     decider = Random.Range(0, defensivePref + offensivePref + mixedPref);
     if (decider >= 0 && decider <= defensivePref)
     {
         behaviour = BehaviourStates.defensive;
     }
     else if (decider <= defensivePref + offensivePref)
     {
         behaviour = BehaviourStates.offensive;
     }
     else
     {
         behaviour = BehaviourStates.mixed;
     }
 }
Example #8
0
 void TakeABreath()
 {
     cumBreathingTime -= Time.deltaTime;
     chngDstnTimer    += Time.deltaTime;
     Move();
     ChangeDestination();
     if (chngDstnTimer > obstcleDtctionFrqncy && Physics.Raycast(transform.position, transform.forward, obstacleAvoidanceDistance, obstacleMask))
     {
         Debug.Log("Agay arehay ho" + gameObject.name);
         currDestination.x = transform.position.x - (transform.forward.x * obstacleAvoidanceDistance);
         currDestination.z = transform.position.z - (transform.forward.z * obstacleAvoidanceDistance);
         currDestination.y = targetHeight;
         Debug.DrawLine(transform.position, currDestination, Color.magenta, 10);
         chngDstnTimer = 0;
     }
     if (cumBreathingTime <= 0)
     {
         currState     = BehaviourStates.Swimming;
         isOnSurface   = false;
         targetHeight  = swimmingDepth;
         cumBreathTime = breathTime;
     }
 }
Example #9
0
 void OffensiveBehaviour()
 {
     if (offensiveTimeCount >= offensiveTime)
     {
         currState       = BehaviourStates.idling;
         idlingTimeCount = 0;
     }
     else
     {
         offensiveTimeCount += Time.deltaTime;
         if (target)
         {
             desiredShipSpeed = Mathf.Clamp01((GlobalFunctions.DistanceOnHorizontalPlane(transform.position, target.position)
                                               - attackingDistance) * distanceSpeedMultiplier);
             Vector3 localTarget = transform.InverseTransformPoint(target.position);
             float   targetAngle = Mathf.Atan2(localTarget.x, localTarget.z) * Mathf.Rad2Deg;
             desiredTurnSpeed = Mathf.Clamp(targetAngle, -1, 1);
         }
         else
         {
             SelectTarget();
         }
     }
 }
Example #10
0
 // Use this for initialization
 void Start()
 {
     SelectTarget(target);
     behaviour = (BehaviourStates)Random.Range(0, 2);
 }
Example #11
0
 public void ChangeBehaviour(BehaviourStates inBehaviour)
 {
     behaviour = inBehaviour;
 }
Example #12
0
        void GoNeutral()
        {
            BehaviourState = BehaviourStates.Neutral;

              if (ActionState != ActionStates.Standing)
            ActionState = ActionStates.Standing;
        }
Example #13
0
 void GoAggressive()
 {
     BehaviourState = BehaviourStates.Aggressive;
 }
Example #14
0
    void RunState(BehaviourStates state)
    {
        switch (state)
        {
        case BehaviourStates.e_Idle:
        {
            if (m_Player != null && MinDist2Player <= Vector3.Distance(m_Player.transform.position +
                                                                       ((transform.position - m_Player.transform.position).normalized * MinDist2Player),
                                                                       transform.position))
            {
                Vector3 newPos = transform.position;

                newPos  += (m_Player.transform.position - transform.position).normalized * Time.deltaTime * MovementSpeed;
                newPos.y = transform.position.y;
                newPos.z = m_Player.transform.position.z + m_Distance2Player;

                m_Distance2Player -= Time.deltaTime * MovementSpeed;

                transform.position = newPos;
            }
            else
            {
                ChangeState();

                m_GameEventManager.ReceiveEvent(GameEvent.e_EngagedBoss, null, 0);
                m_Spawner.SetActive(false);
            }

            break;
        }

        case BehaviourStates.e_Attack:
        {
            if (m_DelayBetweenShotsTimer <= 0)
            {
                ShootTurrets();
                m_DelayBetweenShotsTimer = m_DelayBetweenShots;
            }
            else
            {
                m_DelayBetweenShotsTimer -= Time.deltaTime;
            }

            if (m_CurrentShotsFired >= m_ShotsPerBurst)
            {
                ChangeState();
            }

            break;
        }

        case BehaviourStates.e_SpecialOne:
        {
            RaycastHit[] hit;

            hit = Physics.SphereCastAll(transform.position, 5 /* Temp number */, -transform.up, 10);

            foreach (RaycastHit obstacle in hit)
            {
                if (obstacle.collider.tag == "Movable")
                {
                    //Tell the object to stop moving

                    m_Debris.Add(obstacle.collider.gameObject);
                }
            }

            foreach (GameObject debris in m_Debris)
            {
                float distance2Boss = (transform.position - debris.transform.position).magnitude;

                if (m_Player != null && distance2Boss <= m_MinDistance2Boss)
                {
                    //Throw objects at player when they reach the max height
                    Rigidbody debrisPhysics = debris.GetComponent <Rigidbody>();
                    debrisPhysics.useGravity = true;
                    Vector3 force = (m_Player.transform.position - debris.transform.position).normalized * m_ThrowingForce;
                    debrisPhysics.AddForce(force, ForceMode.Impulse);
                }
                else
                {
                    //Lift objects in m_Debris
                    debris.transform.position += m_LiftSpeed;
                }
                m_Debris.Remove(debris);
                if (m_Debris.Count <= 0)
                {
                    break;
                }
            }

            break;
        }

        default:
            break;
        }
    }