//-------------------------------------------------------------------------------------- // 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); }
//-------------------------------------------------------------------------------------- // 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); } }
//-------------------------------------------------------------------------------------- // 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); }
//-------------------------------------------------------------------------------------- // 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); } }
//-------------------------------------------------------------------------------------- // 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); } }
//-------------------------------------------------------------------------------------- // 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); }
//-------------------------------------------------------------------------------------- // 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); }
//-------------------------------------------------------------------------------------- // 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); } }
//-------------------------------------------------------------------------------------- // 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; } } } }
//-------------------------------------------------------------------------------------- // 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)); } } } }