Exemplo n.º 1
0
    ///////////////////////////////////////////////////////////////////////////

    bool NeedsMoreWalkers()
    {
        bool enoughWalkersAlive   = transform.childCount >= WalkerManager.Get().MaxWalkerCount;
        bool enoughWalkersSpawned = m_SpawnedCount >= MaxSpawnCount;

        return(!enoughWalkersAlive && !enoughWalkersSpawned);
    }
Exemplo n.º 2
0
    ///////////////////////////////////////////////////////////////////////////

    bool HandleWaypointChange()
    {
        Vector3 targetPoint    = GetTargetPoint();
        Vector2 selfToTarget2D = (targetPoint - transform.position).xz();

        float distanceToTarget = selfToTarget2D.magnitude;

        if (distanceToTarget < ReachTargetThreshold)
        {
            int pathPointCount = WalkerPath.Get().PathLines.Length;
            m_CurrentTargetPointIndex++;

            if (m_CurrentTargetPointIndex >= pathPointCount)
            {
                GameManager.Get().m_RescuedWalkers++;
                GameManager.Get().AddTimeBonus(TimeBonusWhenRescued);
                AudioManager.Get().PlayRandomOneShot(WalkerManager.Get().gameObject, WalkerManager.Get().RescueSound, WalkerManager.Get().RescueSoundVolume);
                m_CurrentTargetPointIndex--;
                GameObject.Destroy(gameObject);
                return(false);
            }
        }

        return(true);
    }
Exemplo n.º 3
0
    ///////////////////////////////////////////////////////////////////////////

    void Attack()
    {
        List <Walker> walkersInRange = WalkerManager.Get().GetAllWalkers(transform.position.xz(), this);

        foreach (Walker walker in walkersInRange)
        {
            walker.Kill();
        }
    }
Exemplo n.º 4
0
    public static WalkerManager Get()
    {
        if (!s_Instance)
        {
            s_Instance = GameObject.FindObjectOfType <WalkerManager>();
            s_Instance.ReInit();
        }

        return(s_Instance);
    }
    ///////////////////////////////////////////////////////////////////////////

    void PlayNoergelSound()
    {
        Walker nearestWalker = WalkerManager.Get().GetNearestWalker(transform.position.xz(), DashNoergelRadius, transform.forward.xz(), DashNoergelDot);

        if (!nearestWalker)
        {
            return;
        }

        AudioManager.Get().PlayRandomOneShot(nearestWalker.gameObject, nearestWalker.NoergelSound, nearestWalker.NoergelSoundVolume);
    }
Exemplo n.º 6
0
    ///////////////////////////////////////////////////////////////////////////

    public void Kill()
    {
        if (IsKilled)
        {
            return;
        }

        IsKilled = true;
        AudioManager.Get().PlayRandomOneShot(WalkerManager.Get().gameObject, WalkerManager.Get().KillSound, WalkerManager.Get().KillSoundVolume);
        bloodPS.Play();
        Speed = 0;
        model.SetActive(false);
        GameObject.Destroy(gameObject, 2f);
    }
    ///////////////////////////////////////////////////////////////////////////

    public override void OnInspectorGUI()
    {
        WalkerManager walkerManager = (WalkerManager)target;

        DrawDefaultInspector();

        // We only want to modify Scene data during play mode
        GUI.enabled = Application.isPlaying;

        if (GUILayout.Button("KillAll"))
        {
            walkerManager.KillAllWalkers();
        }

        if (GUILayout.Button("Spawn Small"))
        {
            WalkerSpawner spawner = GameObject.FindObjectOfType <WalkerSpawner>();
            WalkerSpawnerEditor.SpawnSingle(spawner, false);
        }

        if (GUILayout.Button("Spawn Big"))
        {
            WalkerSpawner spawner = GameObject.FindObjectOfType <WalkerSpawner>();
            WalkerSpawnerEditor.SpawnSingle(spawner, true);
        }

        if (GUILayout.Button("Spawn Multiple"))
        {
            WalkerSpawner[] spawners = GameObject.FindObjectsOfType <WalkerSpawner>();

            for (int s = 0; s < spawners.Length; ++s)
            {
                WalkerSpawnerEditor.SpawnMulti(spawners[s]);
            }
        }

        if (GUILayout.Button(walkerManager.enabled ? "Stop Spawning" : "Resume Spawning"))
        {
            WalkerSpawner[] spawners = GameObject.FindObjectsOfType <WalkerSpawner>();

            for (int s = 0; s < spawners.Length; ++s)
            {
                spawners[s].enabled = !spawners[s].enabled;
            }
        }

        GUI.enabled = true;
    }
Exemplo n.º 8
0
    ///////////////////////////////////////////////////////////////////////////

    public override void OnInspectorGUI()
    {
        WalkerSpawner walkerSpawner = (WalkerSpawner)target;

        DrawDefaultInspector();

        // We only want to modify Scene data during play mode
        GUI.enabled = Application.isPlaying;

        if (GUILayout.Button("KillAll"))
        {
            WalkerManager.Get().KillAllWalkers();
        }

        if (GUILayout.Button("Spawn Smal"))
        {
            SpawnSingle(walkerSpawner, false);
        }

        if (GUILayout.Button("Spawn Big"))
        {
            SpawnSingle(walkerSpawner, true);
        }

        if (GUILayout.Button("Spawn Multiple"))
        {
            for (int i = 0; i < 20; ++i)
            {
                SpawnMulti(walkerSpawner);
            }
        }

        if (GUILayout.Button(walkerSpawner.enabled ? "Stop Spawning" : "Resume Spawning"))
        {
            walkerSpawner.enabled = !walkerSpawner.enabled;
        }

        GUI.enabled = true;
    }
Exemplo n.º 9
0
    ///////////////////////////////////////////////////////////////////////////

    public void SpawnWalker(float relativeSpawnOfBurst, bool isBigWalker)
    {
        Walker walker = GameObject.Instantiate(isBigWalker ? BigWalkerSpawnPrefab : SmallWalkerSpawnPrefab, WalkerManager.Get().transform);

        walker.ID = m_SpawnedCount;
        walker.gameObject.name = "Walker " + m_SpawnedCount;

        Vector2 offset = Vector2.zero;

        offset.x = Mathf.Cos(relativeSpawnOfBurst * Mathf.PI * 2.0f);
        offset.y = Mathf.Sin(relativeSpawnOfBurst * Mathf.PI * 2.0f);

        walker.transform.position = transform.position + offset.To3D(0.0f);

        m_SpawnedCount++;
    }
    ///////////////////////////////////////////////////////////////////////////

    void TryInteraction()
    {
        bool doInteract = Input.GetButtonDown(GetInputPrefix() + "Interact");

        if (doInteract)
        {
            CharAnim.SetTrigger("Work");
            Vector2 selfPos     = transform.position.xz();
            Vector2 selfLookDir = transform.forward.xz();
            selfLookDir.Normalize();

            // 1) Traps
            if (EquippedTool && EquippedTool._ToolType != ToolType.Megaphone)
            {
                Trap nearestTrap = TrapManager.Get().GetNearestTrap(true, EquippedTool, selfPos, true, true, selfLookDir);

                if (nearestTrap)
                {
                    if (EquippedTool)
                    {
                        AudioManager.Get().PlayRandomOneShot(gameObject, EquippedTool.RepairSound, EquippedTool.RepairSoundVolume);
                    }

                    nearestTrap.Interact();
                    return;
                }

                if (TrapManager.Get().GetNearestTrap(false, EquippedTool, selfPos, true, true, selfLookDir))
                {
                    PlayFailSound();
                    WorldSpaceCanvas.Get().AddText("Wrong Tool", transform.position);
                    return;
                }
            }

            // 2) Trolley
            Tool nearestTool = ToolTrolley.Get().GetNearestTool(selfPos, true, selfLookDir);

            if (nearestTool)
            {
                ToolTrolley.Get().SwitchTool(ref EquippedTool, nearestTool);
                if (EquippedTool._ToolType == ToolType.Drill)
                {
                    ToolVisuals[0].gameObject.SetActive(true);
                    ToolVisuals[1].gameObject.SetActive(false);

                    ToolVisuals[2].gameObject.SetActive(false);
                    ToolVisuals[3].gameObject.SetActive(false);
                }
                else if (EquippedTool._ToolType == ToolType.Hammer)
                {
                    ToolVisuals[0].gameObject.SetActive(false);
                    ToolVisuals[1].gameObject.SetActive(true);

                    ToolVisuals[2].gameObject.SetActive(false);
                    ToolVisuals[3].gameObject.SetActive(false);
                }
                else if (EquippedTool._ToolType == ToolType.Megaphone)
                {
                    ToolVisuals[0].gameObject.SetActive(false);
                    ToolVisuals[1].gameObject.SetActive(false);

                    ToolVisuals[2].gameObject.SetActive(true);
                    ToolVisuals[3].gameObject.SetActive(false);
                }
                else if (EquippedTool._ToolType == ToolType.Mop)
                {
                    ToolVisuals[0].gameObject.SetActive(false);
                    ToolVisuals[1].gameObject.SetActive(false);

                    ToolVisuals[2].gameObject.SetActive(false);
                    ToolVisuals[3].gameObject.SetActive(true);
                }
                return;
            }

            // 3) Megaphone
            if (EquippedTool && EquippedTool._ToolType == ToolType.Megaphone)
            {
                if (Time.time - m_LastMegaphoneUsage > MegaphoneCooldown)
                {
                    AudioManager.Get().PlayRandomOneShot(EquippedTool.gameObject, EquippedTool.RepairSound, EquippedTool.RepairSoundVolume);
                    m_LastMegaphoneUsage = Time.time;

                    Vector2 ownPos                = transform.position.xz();
                    Vector2 ownForward            = transform.forward.xz();
                    Vector2 MegaphoneImpactCenter = ownPos + ownForward * MegaphoneImpactDistance;

                    List <Walker> walkers = WalkerManager.Get().GetAllWalkers(Vector2.zero, null);

                    foreach (Walker walker in walkers)
                    {
                        Vector2 walkerPos = walker.transform.position.xz();
                        float   dist      = Vector2.Distance(walkerPos, MegaphoneImpactCenter);

                        float impactAmount = 1.0f - Mathf.InverseLerp(MegaphoneInnerRadius, MegaphoneOuterRadius, dist);
                        impactAmount = Mathf.Clamp01(impactAmount);

                        if (impactAmount <= 0.0f)
                        {
                            continue;
                        }

                        float debugHeight = transform.position.y + 0.1f;
                        Debug.DrawLine(MegaphoneImpactCenter.To3D(debugHeight), walkerPos.To3D(debugHeight));

                        Vector2 pushDir = (walkerPos - MegaphoneImpactCenter).normalized;

                        /*
                         * Vector2 orthogonalVector = new Vector2(ownForward.y, -ownForward.x);
                         *
                         * if (Vector2.Dot(orthogonalVector, pushDir) < 0.0f)
                         * {
                         *      orthogonalVector *= -1.0f;
                         * }
                         *
                         * pushDir = Vector2.Lerp(pushDir, orthogonalVector, MegaphoneOrthogonalPush).normalized;
                         */

                        Debug.DrawLine(walkerPos.To3D(debugHeight), (walkerPos + pushDir * 3.0f).To3D(debugHeight), Color.red);

                        walker.MegaphoneForceAmountNorm = impactAmount;
                        walker.MegaphoneForceDirection  = pushDir.normalized;
                        walker.Reorient();
                    }
                }

                return;
            }

            // 4) Error
            PlayFailSound();
        }
    }