Ejemplo n.º 1
0
    //--------------------------------------------------------------------------------------
    // SoldierMovement: Function for the current soldiers movement.
    //
    // Param:
    //		sCurrentSoldier: A SoldierActor object for which soldier wants to move.
    //--------------------------------------------------------------------------------------
    void SoldierMovement(SoldierActor sCurrentSoldier)
    {
        // Get the horizontal and vertical axis.
        float fMoveHorizontal = Input.GetAxis("Horizontal");
        float fMoveVertical   = Input.GetAxis("Vertical");

        // Apply Axis to the current soldier.
        sCurrentSoldier.Move(fMoveHorizontal, fMoveVertical);
    }
Ejemplo n.º 2
0
    //--------------------------------------------------------------------------------------
    // SwitchGrenadeMouse: Function for switching the current soldiers weapon to the grenade when
    // using the mouse to click the button.
    //--------------------------------------------------------------------------------------
    public void SwitchGrenadeMouse()
    {
        // if the statemachines is currently in the action state.
        if (StateMachine.GetState() == ETurnManagerStates.ETURN_ACTION)
        {
            // Get the soldier object and script.
            GameObject   gCurrentSoldier = GetSoldier(m_nSoldierTurn);
            SoldierActor sCurrentSoldier = gCurrentSoldier.GetComponent <SoldierActor>();

            // Switch mesh, materials, etc to the grenade
            SwitchMesh(sCurrentSoldier, EWeaponType.EWEP_GRENADE, m_mGrenadeSoldierMesh, m_amGrenadeMaterials);
        }
    }
Ejemplo n.º 3
0
    //--------------------------------------------------------------------------------------
    // MouseDown: Function for when the mouse is pressed down.
    //
    // Param:
    //		sCurrentSoldier: A SoldierActor object for which soldier is firing.
    // Return:
    //      bool: Returns a bool if the mouse is pressed or not.
    //--------------------------------------------------------------------------------------
    private bool MouseDown(SoldierActor sCurrentSoldier)
    {
        // if the left mouse button is pressed and the timer is greater than 1.
        if (Input.GetButtonDown("Fire1") && TurnManager.m_sfTimer > 1)
        {
            // Run the soldier MouseDown fucntion.
            sCurrentSoldier.MouseDown();

            // if mouse is pressed down return bool
            return(true);
        }

        // if mouse isnt pressed return false.
        return(false);
    }
Ejemplo n.º 4
0
    //--------------------------------------------------------------------------------------
    // SwitchWeapon: Function for switching the current soldiers weapon.
    //
    // Param:
    //		sCurrentSoldier: A SoldierActor object for which soldier wants to move.
    //--------------------------------------------------------------------------------------
    private void SwitchWeapon(SoldierActor sCurrentSoldier)
    {
        // if the 1 key is pressed.
        if (Input.GetButtonDown("SwapRocket"))
        {
            // Switch mesh, materials, etc to the RPG
            SwitchMesh(sCurrentSoldier, EWeaponType.EWEP_RPG, m_mRPGSoldierMesh, m_amRPGMaterials);
        }

        // if the 2 key is pressed.
        else if (Input.GetButtonDown("SwapGrenade") && sCurrentSoldier.m_nGotGrenade > 0)
        {
            // Switch mesh, materials, etc to the grenade
            SwitchMesh(sCurrentSoldier, EWeaponType.EWEP_GRENADE, m_mGrenadeSoldierMesh, m_amGrenadeMaterials);
        }
    }
Ejemplo n.º 5
0
    //--------------------------------------------------------------------------------------
    //  GrenadeExplode: Finds all colliders in the m_fExplosionRadius and calls damage functions,
    //                  and knockback in the Soldiers case.
    //
    //--------------------------------------------------------------------------------------
    private void GrenadeExplode()
    {
        // Collect all possible colliders
        Collider[] aSoldierColliders = Physics.OverlapSphere(transform.position, m_fSoldierExplosionRadius, m_lmUnitMask);
        Collider[] aTeddyColliders   = Physics.OverlapSphere(transform.position, m_fTeddyExplosionRadius, m_lmTeddyMask);

        for (int i = 0; i < aSoldierColliders.Length; i++)
        {
            Rigidbody rbTarget = aSoldierColliders[i].GetComponent <Rigidbody>();

            //if it does not have a rigidbody
            if (!rbTarget)
            {
                continue;
            }
            if (!Physics.Linecast(transform.position, rbTarget.position, m_lmEnvironmentMask))
            {
                SoldierActor gtarget = rbTarget.GetComponent <SoldierActor>();

                // Soldier will take damage based on position (See CalculateDamge function below)
                gtarget.TakeDamage(CalculateDamage(aSoldierColliders[i].transform.position, m_fSoldierExplosionRadius));

                // add explosive force for knockback
                // NOTE: May be replaced with a non-rigidbody knockback
                if (CalculateDamage(aSoldierColliders[i].transform.position, m_fSoldierExplosionRadius) > 0)
                {
                    rbTarget.AddExplosionForce(m_ExplosionForce, transform.position, m_fSoldierExplosionRadius, 0.0f, ForceMode.Impulse);
                }
            }
        }

        for (int i = 0; i < aTeddyColliders.Length; i++)
        {
            Rigidbody rbTarget = aTeddyColliders[i].GetComponent <Rigidbody>();

            //if it does not have a rigidbody
            if (!rbTarget)
            {
                continue;
            }

            Teddy gtarget = rbTarget.GetComponent <Teddy>();

            // Teddy will take damage based on position (See CalculateDamge function below)
            gtarget.TakeDamage(CalculateDamage(aTeddyColliders[i].transform.position, m_fTeddyExplosionRadius));
        }
    }
    //--------------------------------------------------------------------------------------
    // Update: Function that calls each frame to update game objects.
    //--------------------------------------------------------------------------------------
    void Update()
    {
        // Get the current solider.
        GameObject   gCurrentSoldier = m_gPlayer.GetComponent <Player>().GetSoldier(m_gPlayer.GetComponent <Player>().m_nSoldierTurn);
        SoldierActor sCurrentSoldier = gCurrentSoldier.GetComponent <SoldierActor>();

        // If it is the players current turn.
        if (m_gPlayer.GetComponent <Player>().m_nPlayerNumber == TurnManager.m_snCurrentTurn)
        {
            // if the RPG is selected.
            if (sCurrentSoldier.m_eCurrentWeapon == EWeaponType.EWEP_RPG)
            {
                // Set RPG selected to active.
                m_gSelectedRPG.SetActive(true);
                m_gUnselectedRPG.SetActive(false);

                // Set grenade unselected to active.
                m_gSelectedGrenade.SetActive(false);
                m_gUnselectedGrenade.SetActive(true);
            }

            // if the grenade is selected and is able to be selected.
            if (sCurrentSoldier.m_eCurrentWeapon == EWeaponType.EWEP_GRENADE)
            {
                // Set grenade selected to active.
                m_gSelectedGrenade.SetActive(true);
                m_gUnselectedGrenade.SetActive(false);

                // Set RPG unselected to active.
                m_gSelectedRPG.SetActive(false);
                m_gUnselectedRPG.SetActive(true);
            }
        }

        // if it isnt the players current turn
        else
        {
            // Set grenade unselected
            m_gSelectedGrenade.SetActive(false);
            m_gUnselectedGrenade.SetActive(false);

            // Set RPG unselected
            m_gSelectedRPG.SetActive(false);
            m_gUnselectedRPG.SetActive(false);
        }
    }
Ejemplo n.º 7
0
    //--------------------------------------------------------------------------------------
    // MouseUp: Function for the when the mouse is released from being down.
    //
    // Param:
    //		sCurrentSoldier: A SoldierActor object for which soldier is firing.
    // Return:
    //      bool: Returns a bool if the mouse is released or not.
    //--------------------------------------------------------------------------------------
    private bool MouseUp(SoldierActor sCurrentSoldier)
    {
        // if the mouse is released or the timer is less than 1.
        if (Input.GetButtonUp("Fire1") || TurnManager.m_sfTimer < 1)
        {
            // Set to end turn.
            TurnManager.m_sbEndTurn = true;

            // Run the soldier MouseUp function.
            sCurrentSoldier.MouseUp();

            // if the mouse is released return true.
            return(true);
        }

        // if the mouse isnt released return false.
        return(false);
    }
Ejemplo n.º 8
0
    //--------------------------------------------------------------------------------------
    // MouseHeld: Function for when the mouse is held down.
    //
    // Param:
    //		sCurrentSoldier: A SoldierActor object for which soldier is firing.
    // Return:
    //      bool: Returns a bool if the mouse is held or not.
    //--------------------------------------------------------------------------------------
    private bool MouseHeld(SoldierActor sCurrentSoldier)
    {
        // if the left mouse button is held down and timer is greater than 1.
        if (Input.GetButton("Fire1") && TurnManager.m_sfTimer > 1)
        {
            // Run the soldier MouseHeld function.
            sCurrentSoldier.MouseHeld();

            // if the grenade was equipped set grenade to shot.
            if (sCurrentSoldier.m_eCurrentWeapon == EWeaponType.EWEP_GRENADE)
            {
                m_bGrenadeShot = true;
            }

            // if mouse is held return true.
            return(true);
        }

        // if mouse isnt held down return false.
        return(false);
    }
Ejemplo n.º 9
0
    //--------------------------------------------------------------------------------------
    // SwitchMesh: Function to switch the mesh, materials, weapon of the current solider.
    //
    // Param:
    //		sCurrentSoldier: SoldierActor for the current soldier being used.
    //      eWeapon: EWeaponType for the weapon to swap the current soldier to.
    //      mMesh: Mesh to switch the current soldier to.
    //      mMaterials: Materials array for all the current soldier materials to switch.
    //--------------------------------------------------------------------------------------
    void SwitchMesh(SoldierActor sCurrentSoldier, EWeaponType eWeapon, Mesh mMesh, Material[] mMaterials)
    {
        // Switch the current soldiers weapon
        sCurrentSoldier.m_eCurrentWeapon = eWeapon;

        // Change soldier mesh
        sCurrentSoldier.GetComponent <SkinnedMeshRenderer>().sharedMesh = mMesh;

        // Change the color of each material to the m_cSoldierColor.
        sCurrentSoldier.GetComponent <SkinnedMeshRenderer>().materials = mMaterials;

        // loop through each material on the soliders.
        for (int o = 0; o < sCurrentSoldier.GetComponent <SkinnedMeshRenderer>().materials.Length; ++o)
        {
            // Change the color of each material to the m_cSoldierColor.
            sCurrentSoldier.GetComponent <SkinnedMeshRenderer>().materials[o].SetColor("_PlasticColor", m_cSoldierColor);

            // Apply red glow around the current soldier.
            sCurrentSoldier.GetComponent <SkinnedMeshRenderer>().materials[o].SetFloat("_Outline_Width", 0.02f);

            // Set the color of the outline.
            sCurrentSoldier.GetComponent <SkinnedMeshRenderer>().materials[o].SetColor("_Outline_Color", m_cPlayerColor);
        }
    }
Ejemplo n.º 10
0
    //--------------------------------------------------------------------------------------
    // Update: Function that calls each frame to update game objects.
    //--------------------------------------------------------------------------------------
    void Update()
    {
        // Check if it is this players turn.
        if (m_nPlayerNumber == TurnManager.m_snCurrentTurn)
        {
            // Get the soldier object and script.
            GameObject   gCurrentSoldier = GetSoldier(m_nSoldierTurn);
            SoldierActor sCurrentSoldier = gCurrentSoldier.GetComponent <SoldierActor>();

            // if in the turns action state.
            if (StateMachine.GetState() == ETurnManagerStates.ETURN_ACTION)
            {
                // If not paused then can move and shoot.
                if (!PauseManager.m_sbPaused)
                {
                    // Update the mouse face function in soldier.
                    sCurrentSoldier.FaceMouse();

                    // if not over a button or the mouse is held
                    if (!EventSystem.current.IsPointerOverGameObject() || m_bMouseHeld)
                    {
                        // Get the mouse input functions.
                        MouseDown(sCurrentSoldier);
                        m_bMouseHeld = MouseHeld(sCurrentSoldier);
                        MouseUp(sCurrentSoldier);
                    }

                    // if the mouse is not held.
                    if (!m_bMouseHeld)
                    {
                        // Switch soldier weapon on key presses.
                        SwitchWeapon(sCurrentSoldier);

                        // Move the soldier.
                        SoldierMovement(sCurrentSoldier);
                    }

                    // if mouse held.
                    else if (m_bMouseHeld)
                    {
                        // stop the current soldier from moving.
                        sCurrentSoldier.Move(0, 0);
                    }
                }
            }

            // if in the end turn state.
            else if (StateMachine.GetState() == ETurnManagerStates.ETURN_END)
            {
                // stop the current soldier from moving.
                sCurrentSoldier.Move(0, 0);
            }
        }

        // Set Active soldier count to 0
        m_nActiveSoldiers = 0;

        // Go through each soldier and count how many are alive.
        for (int i = 0; i < m_agSoldierList.Length; ++i)
        {
            // if the soldier is active.
            if (m_agSoldierList[i].activeInHierarchy)
            {
                // Get soldier script.
                SoldierActor s = m_agSoldierList[i].GetComponent <SoldierActor>();

                // soldier is alive.
                if (s.m_fCurrentHealth > 0)
                {
                    // increment the active soldier number by 1.
                    m_nActiveSoldiers += 1;
                }
            }
        }
    }
Ejemplo n.º 11
0
    //--------------------------------------------------------------------------------------
    // RocketExplode: This function is called when the Rocket should explode.
    //                Calls CalculateDamage after it finds target in the sphere.
    //--------------------------------------------------------------------------------------
    private void RocketExplode()
    {
        //m_asAudioSource.PlayOneShot(m_acExplosionSound);
        // Rocket Explodes, damaging anything within the radius


        // Collect all possible colliders
        Collider[] aSoldierColliders = Physics.OverlapSphere(transform.position, m_fSoldierExplosionRadius, m_lmUnitMask);
        Collider[] aTeddyColliders   = Physics.OverlapSphere(transform.position, m_fTeddyExplosionRadius, m_lmTeddyMask);
        for (int i = 0; i < aSoldierColliders.Length; i++)
        {
            Rigidbody rbTarget = aSoldierColliders[i].GetComponent <Rigidbody>();

            //if it does not have a rigidbody
            if (!rbTarget)
            {
                continue;
            }

            // if an object in collision zone is a Soldier
            if (aSoldierColliders[i].gameObject.tag == "Soldier")
            {
                // TODO: Explosion particle effect here
                if (!Physics.Linecast(transform.position, rbTarget.position, m_lmEnvironmentMask))
                {
                    SoldierActor gtarget = rbTarget.GetComponent <SoldierActor>();

                    // Soldier will take damage based on position (See CalculateDamge function below)
                    gtarget.TakeDamage(CalculateDamage(aSoldierColliders[i].transform.position, m_fSoldierExplosionRadius));

                    // add explosive force for knockback
                    // NOTE: May be replaced with a non-rigidbody knockback
                    if (CalculateDamage(aSoldierColliders[i].transform.position, m_fSoldierExplosionRadius) > 1)
                    {
                        rbTarget.AddExplosionForce(m_ExplosionForce, transform.position, m_fSoldierExplosionRadius, 0.0f, ForceMode.Impulse);
                    }
                }
            }
        }

        for (int i = 0; i < aTeddyColliders.Length; i++)
        {
            Rigidbody rbTarget = aTeddyColliders[i].GetComponent <Rigidbody>();

            //if it does not have a rigidbody
            if (!rbTarget)
            {
                continue;
            }

            // if an object in collision zone is a Teddy
            if (aTeddyColliders[i].gameObject.tag == "Teddy")
            {
                // TODO: Explosion particle effect here
                if (!Physics.Linecast(transform.position, rbTarget.position, m_lmEnvironmentMask))
                {
                    Teddy gtarget = rbTarget.GetComponent <Teddy>();

                    // Teddy will take damage based on position (See CalculateDamge function below)
                    gtarget.TakeDamage(CalculateDamage(aTeddyColliders[i].transform.position, m_fTeddyExplosionRadius));
                }
            }
        }
    }