Пример #1
0
    void Start()
    {
        // Pet Manager
        m_PetsManager = GetComponent <PetsManager>();

        // Player
        m_Player      = GameObject.FindGameObjectWithTag("Player").GetComponent <Player2D_Manager>().gameObject;
        m_PlayerStats = GameObject.FindGameObjectWithTag("Player").GetComponent <Player2D_StatsHolder>();
        m_PetsManager.SetPlayer(m_Player);
        m_PetsManager.SetPlayerStats(m_PlayerStats);

        // Pet Variables from Pets Manager
        m_PetsManager.GetPetDestination().Set(0, 0, 0);
        m_PetsManager.SetPetDestination(m_PetsManager.GetPetDestination());
        m_PetsManager.SetDistanceApart(0f);
        m_PetsManager.SetGuardRange(0f);
        m_PetsManager.SetFollowRange(0f);
        m_PetsManager.SetHealRange(0f);

        // StateMachine
        m_StateMachine = new StateMachine();
        m_PetsManager.SetStateMachine(m_StateMachine);
        m_PetsManager.GetStateMachine().AddState(new StateDeerGuard("StateDeerGuard", gameObject));
        m_PetsManager.GetStateMachine().AddState(new StateDeerFollow("StateDeerFollow", gameObject));
        m_PetsManager.GetStateMachine().AddState(new StateDeerTeleport("StateDeerTeleport", gameObject));
        m_PetsManager.GetStateMachine().AddState(new StateDeerHeal("StateDeerHeal", gameObject));
        m_PetsManager.GetStateMachine().SetNextState("StateDeerGuard");

        m_PetsManager.EXPReward = m_PetsManager.EXPRewardScaling * m_PetsManager.Level;
        m_PetsManager.Init();
    }
Пример #2
0
    void Update()
    {
        // StateMachine
        m_PetsManager.GetStateMachine().Update();

        // Check if Player HP is 0.2 of its Max HP, if so, Change State to HEAL.
        if (m_PetsManager.GetPlayerStats().Health <= (m_PetsManager.GetPlayerStats().MaxHealth * 0.1f))
        {
            m_PetsManager.GetStateMachine().SetNextState("StateDeerHeal");
        }
    }
Пример #3
0
    public void UpdateState()
    {
        // Safety Checks //
        // If Follow Range is still 0, set it to 5.
        if (m_PetsManager.GetFollowRange() == 0f)
        {
            m_PetsManager.SetFollowRange(5f);
        }


        // Get Distance Apart between Player and Pet //
        m_PetsManager.SetDistanceApart((m_PetsManager.GetPlayer().GetComponent <Transform>().position - m_go.GetComponent <Transform>().position).magnitude);

        if (m_PetsManager.GetPlayer() != null)
        {
            // Change to FOLLOW when Player has Teleported.
            m_go.GetComponent <Transform>().position = m_PetsManager.GetPlayer().GetComponent <Transform>().position;
            m_fHasTeleport = true;

            if (m_fHasTeleport)
            {
                m_fHasTeleport = false;
                m_PetsManager.GetStateMachine().SetNextState("StateDeerFollow");
            }
        }
        else
        {
            m_Player = GameObject.FindGameObjectWithTag("Player");
            m_PetsManager.SetPlayer(m_Player);
        }
    }
Пример #4
0
    public void UpdateState()
    {
        // Safety Checks //
        // If Guard Range is still 0, set it to 2.
        if (m_PetsManager.GetGuardRange() == 0f)
        {
            m_PetsManager.SetGuardRange(2f);
        }

        // If Follow Range is still 0, set it to 5.
        if (m_PetsManager.GetFollowRange() == 0f)
        {
            m_PetsManager.SetFollowRange(5f);
        }

        // Get Distance Apart between Player and Pet //
        m_PetsManager.SetDistanceApart((m_PetsManager.GetPlayer().GetComponent <Transform>().position - m_go.GetComponent <Transform>().position).magnitude);

        // States
        if (m_PetsManager.GetPlayer() != null)
        {
            // Pet will walk to Player
            m_go.GetComponent <Transform>().position = Vector2.MoveTowards(m_go.GetComponent <Transform>().position, m_PetsManager.GetPlayer().GetComponent <Transform>().position, Time.deltaTime * (m_PetsManager.MoveSpeed * 0.4f));

            // Change to GUARD when Player is out of range.
            if (m_PetsManager.GetDistanceApart() < m_PetsManager.GetGuardRange())
            {
                m_PetsManager.GetStateMachine().SetNextState("StateDeerGuard");
            }
            // Change to TELEPORT when Player is out of FOLLOW range.
            else if (m_PetsManager.GetDistanceApart() >= m_PetsManager.GetFollowRange())
            {
                m_PetsManager.GetStateMachine().SetNextState("StateDeerTeleport");
            }
        }
        else
        {
            m_Player = GameObject.FindGameObjectWithTag("Player");
            m_PetsManager.SetPlayer(m_Player);
        }
    }
Пример #5
0
    public void UpdateState()
    {
        // Get Distance Apart between Player and Pet //
        m_PetsManager.SetDistanceApart((m_PetsManager.GetPlayer().GetComponent <Transform>().position - m_go.GetComponent <Transform>().position).magnitude);

        if (m_PetsManager.GetPlayer() != null)
        {
            // Pet will walk to Player
            m_go.GetComponent <Transform>().position = Vector2.MoveTowards(m_go.GetComponent <Transform>().position, m_PetsManager.GetPlayer().GetComponent <Transform>().position, Time.deltaTime * (m_PetsManager.MoveSpeed * 0.4f));

            if (m_PetsManager.GetDistanceApart() <= m_PetsManager.GetHealRange())
            {
                m_bHasHeal = false;
            }

            if (!m_bHasHeal)
            {
                // Count Down
                m_fHealTimer -= Time.deltaTime;

                if (m_fHealTimer <= 0f)
                {
                    m_fHealTimer = 5f;

                    // Heal Player
                    m_bHasHeal = true;
                }
            }

            // Change State to GUARD when it has Healed Finish.
            if (m_bHasHeal)
            {
                // Heal Player
                if (m_PetsManager.GetPlayerStats().Health != m_PetsManager.GetPlayerStats().MaxHealth)
                {
                    // Increase Player HP
                    m_PetsManager.GetPlayerStats().Health += m_fAddPlayerHP;
                }

                m_bHasHeal = false;
                m_PetsManager.GetStateMachine().SetNextState("StateDeerGuard");
            }
        }
        else
        {
            m_Player = GameObject.FindGameObjectWithTag("Player");
            m_PetsManager.SetPlayer(m_Player);
        }
    }