Example #1
0
    IEnumerator Think()
    {
        float nextNervousMove = Time.time + 3.0f;
        float nextMeleeSwing  = 0.0f;

        while (true)
        {
            var em = hearts_.emission;
            em.enabled      = (playerIsClose_ || State == OrcState.ChasePlayer) && Mood != OrcMood.Nervous;
            renderer_.flipX = trans_.position.x > lookAt_.x;

            if (State == OrcState.ChasePlayer)
            {
                lookAt_ = GameManager.Instance.PlayerTrans.position;
                target_ = playerPos_;
            }
            else if (State == OrcState.Yoda)
            {
                lookAt_ = target_;
                if (Time.time > nextMeleeSwing)
                {
                    nextMeleeSwing = Time.time + 0.5f;
                    StartCoroutine(SwingMeleeCo(lookAt_));
                    float       recoil;
                    const float YodaDamage = 200.0f;
                    const float YodaRadius = 2.5f;
                    int         hitCount   = WeaponSword.Swing(trans_.position, YodaDamage, YodaRadius, AudioManager.Instance.AudioData.SaberHit, AudioManager.Instance.AudioData.SaberSwing, out recoil);
                    if (hitCount > 2)
                    {
                        GameManager.Instance.PlayerScript.Talk(GetYodaPlayerTalk(), 1.0f, Color.white);
                    }

                    target_ = PositionUtility.GetPointInsideArena(0.8f, 0.8f);
                }

                if (distanceToPlayer_ < 3)
                {
                    target_ = trans_.position;
                }
            }
            else if (State == OrcState.Default)
            {
                lookAt_ = GameManager.Instance.PlayerTrans.position;
                if (Mood == OrcMood.Nervous)
                {
                    if (Time.time > nextNervousMove)
                    {
                        // Look confused for a little bit
                        Text.text = "?";
                        yield return(new WaitForSeconds(2.0f));

                        if (Mood != OrcMood.Nervous || State != OrcState.Default)
                        {
                            continue;
                        }

                        // Get alarmed for a very short time
                        Text.text = "!";
                        yield return(new WaitForSeconds(0.5f));

                        if (Mood != OrcMood.Nervous || State != OrcState.Default)
                        {
                            continue;
                        }
                        Text.text = "";

                        // Run randomly
                        target_         = PositionUtility.GetPointInsideArena(1.0f, 1.0f);
                        nextNervousMove = Time.time + 5 + Random.value * 5;
                    }

                    if (distanceToPlayer_ <= NervousMinDistance || distanceToTarget_ < 0.2f)
                    {
                        target_ = trans_.position; // Stop
                    }
                }
            }

            if (Mood != OrcMood.Nervous && Text.text != string.Empty)
            {
                Text.text = string.Empty;
            }

            yield return(null);
        }
    }
Example #2
0
    public void OnOrcPickup(Vector3 pos)
    {
        SaveGame.RoundScore++;
        GameEvents.CounterEvent(GameCounter.Score_Any_Sum, 1);
        GameEvents.CounterEvent(GameCounter.Max_Score_Any, SaveGame.RoundScore);

        if (GameMode == GameModeEnum.Nursery)
        {
            GameEvents.CounterEvent(GameCounter.Score_Nursery_Sum, 1);
            GameEvents.CounterEvent(GameCounter.Max_Score_Nursery, SaveGame.RoundScore);
        }
        else if (GameMode == GameModeEnum.Earth)
        {
            GameEvents.CounterEvent(GameCounter.Score_Earth_Sum, 1);
            GameEvents.CounterEvent(GameCounter.Max_Score_Earth, SaveGame.RoundScore);
        }
        else if (GameMode == GameModeEnum.Wind)
        {
            GameEvents.CounterEvent(GameCounter.Score_Wind_Sum, 1);
            GameEvents.CounterEvent(GameCounter.Max_Score_Wind, SaveGame.RoundScore);
        }
        else if (GameMode == GameModeEnum.Fire)
        {
            GameEvents.CounterEvent(GameCounter.Score_Fire_Sum, 1);
            GameEvents.CounterEvent(GameCounter.Max_Score_Fire, SaveGame.RoundScore);
        }
        else if (GameMode == GameModeEnum.Storm)
        {
            GameEvents.CounterEvent(GameCounter.Score_Storm_Sum, 1);
            GameEvents.CounterEvent(GameCounter.Max_Score_Storm, SaveGame.RoundScore);
        }
        else if (GameMode == GameModeEnum.Harmony)
        {
            GameEvents.CounterEvent(GameCounter.score_Harmony_Sum, 1);
            GameEvents.CounterEvent(GameCounter.Max_score_Harmony, SaveGame.RoundScore);
        }

        AudioManager.Instance.PlayClipWithRandomPitch(AudioManager.Instance.MiscAudioSource, AudioManager.Instance.AudioData.OrcPickup);

        Vector2 uiPos         = UiPositionFromWorld(PlayerTrans.position + Vector3.up * 0.5f);
        var     rectTransform = TextFloatingWeapon.GetComponent <RectTransform>();

        rectTransform.anchoredPosition = uiPos;

        TextScore.text = SaveGame.RoundScore.ToString();

        if (CurrentDeedData.Deed != DeedEnum.Sandbox)
        {
            Unlocks.SetRandomWeapon();
            TextFloatingWeapon.SetText(WeaponBase.WeaponDisplayName(PlayerScript.Weapon.Type), 2.0f);
        }

        if (CurrentDeedData.ShowOrcs)
        {
            Vector3 bestPos      = Vector3.zero;
            float   bestDistance = 0.0f;
            for (int i = 0; i < 5; ++i)
            {
                Vector3 newPos   = PositionUtility.GetPointInsideArena(1.0f, 0.9f);
                float   distance = Vector3.Distance(newPos, pos);
                if (distance > bestDistance)
                {
                    bestDistance = distance;
                    bestPos      = newPos;
                }

                // TODO PE: Does not seem to work? I've seen it behind the score.
                // Let's try not placing the orc around the UI
                bool nearUi = newPos.y > 4.5f && (newPos.x > -3.5f && newPos.x < 3.5f);
                if (nearUi)
                {
                    continue;
                }

                if (distance > 5.0f)
                {
                    break;
                }
            }

            Orc.SetPosition(bestPos);
            MakeFlash(bestPos, 2.0f);
        }
        else
        {
            // Hide the orc
            Orc.SetPosition(Vector3.left * 10000);
        }
    }
Example #3
0
    Vector3 GetNewTarget()
    {
        Vector3 result = PositionUtility.GetPointInsideArena(1.0f, 1.0f);

        return(result);
    }