// Use this for initialization protected virtual void Start() { op = FindObjectOfType <ObjectPool>(); if (team == Team.TEAM1) { m_generals = op.team1Generals; } if (team == Team.TEAM2) { m_generals = op.team2Generals; } m_currentSelectionCircle = Instantiate(m_selectionCircle, m_generals[0].transform.position, Quaternion.Euler(-90, 0, 0)); m_currentSelectionCircle.GetComponent <SelectionCircle> ().ta = m_generals [0]; currentSelectedUnit = m_generals[index].gameObject; m_navigationArrowActor.moveMarkerToMyBoy(); cameraController.MoveCameraTo(m_generals[index].transform.position); currentGeneral = m_generals[index]; DisablesMoveTargets(); }
public Transform AllocateTarget(TroopActor ta) { foreach (FormationPosition fp in formationPositions) { if (fp.assignedUnit.rankState == RankState.dead) { fp.taken = false; } if (!fp.taken) { fp.assignedUnit = ta; fp.taken = true; return(fp.fromPos); } } FormationPosition newFP = new FormationPosition(); { GameObject newFormPos = new GameObject("dad"); GameObject trackedFormPos = Instantiate(moveTargetPrefab, NextFormPos() + positionOffset, transform.rotation); Destroy(newFormPos); trackedFormPos.name = "Formation Position " + formationPositions.Count + 1; if (!moveTarget) { CreateMoveTarget(); } trackedFormPos.transform.parent = moveTarget.transform; newFP.fromPos = trackedFormPos.transform; newFP.taken = true; newFP.assignedUnit = ta; formationPositions.Add(newFP); return(newFP.fromPos); } }
public void Die(TroopActor ta) { ta.onDie.Invoke(); if (ta.rankState == RankState.IsGeneral) { if (ClosestAlly()) { ta.PromoteToGeneral(ClosestAlly()); } ta.rankState = RankState.dead; if (moveTarget) { Destroy(moveTarget.gameObject); } } ta.rankState = RankState.dead; if (ta.team == Team.TEAM1) { op.team1Generals.Remove(ta); } if (ta.team == Team.TEAM2) { op.team2Generals.Remove(ta); } gameObject.SetActive(false); }
void AssignToGeneral(TroopActor ta) { rankState = RankState.FollowingGeneral; myGeneral = ta; if (moveTarget) { Destroy(moveTarget.gameObject); } moveTarget = ta.AllocateTarget(this); }
private void OnTriggerEnter(Collider collision) { TroopActor ta = collision.gameObject.GetComponent <TroopActor>(); if (ta) { lastCollided = ta; OnColEnter.Invoke(); } }
bool withinRange(GunSettings gun, TroopActor troop) { if (Vector3.Distance(troop.transform.position, transform.position) > gun.attackRangeMin && Vector3.Distance(troop.transform.position, transform.position) < gun.attackRangeMax) { return(true); } else { return(false); } }
bool IsAttackableUnit(TroopActor t) { foreach (UnitClasses unitclass in strengths) { if (t.unitClass == unitclass) { return(true); } } return(false); }
void RankAction() { if (rankState == RankState.FollowingGeneral) { if (myGeneral.rankState != RankState.IsGeneral) { rankState = RankState.LookingForGeneral; killMeAfter = 0.5f; } } if (rankState == RankState.LookingForGeneral) { SetAttackType(AttackType.AUTO); TroopActor AssignToMe = RandomGeneral(); if (AssignToMe) { AssignToGeneral(AssignToMe); } else { PromoteToGeneral(this); } if (killMeAfter <= 0) { Die(this); } else { killMeAfter -= Time.deltaTime; } } if (rankState == RankState.dead) { if (moveTarget) { moveTarget.gameObject.SetActive(false); } gameObject.SetActive(false); } else { gameObject.SetActive(true); } if (rankState == RankState.IsGeneral) { if (transform.localScale != originSize * 1.75f) { transform.localScale = originSize * 1.2f; } } }
void SpawnObject() { TroopActor ta = ObjectToSpawnAvaliable(); lastSpawnedObject = ta.gameObject; if (ta.gameObject.activeInHierarchy == false) { ta.gameObject.SetActive(true); } ta.SetHealth(ta.maxHealth); ta.rankState = TroopActor.RankState.LookingForGeneral; ta.transform.position = spawnPoint.position; }
bool CanHitTarget(TroopActor checkThis) { bool canHit = false; foreach (UnitClasses uc in strengths) { if (checkThis.unitClass == uc) { canHit = true; } } return(canHit); }
void AttackTarget() { if (targetToAttack.rankState != RankState.dead) { AttackSelectedEnemy(targetToAttack); } else { attackType = AttackType.AUTO; Move(); targetToAttack = null; } }
public void PromoteToGeneral(TroopActor ta) { ta.OnBecomeGeneral.Invoke(); ta.rankState = RankState.IsGeneral; ta.moveTarget = null; if (ta.team == Team.TEAM1) { op.team1Generals.Add(ta); } if (ta.team == Team.TEAM2) { op.team2Generals.Add(ta); } }
private void OnTriggerEnter(Collider other) { TroopActor currentActor = other.GetComponent <TroopActor>(); if (currentActor) { if (other.GetComponent <TroopActor>().team == Team.TEAM1) { team1unitsInZone.Add(other.GetComponent <TroopActor>()); } else if (other.GetComponent <TroopActor>().team == Team.TEAM2) { team2unitsInZone.Add(other.GetComponent <TroopActor>()); } } }
public void SetTeam(Team t) { TroopActor ta = bigBase.GetComponentInChildren <TroopActor>(); HangerSpawner[] hangers = bigBase.GetComponentsInChildren <HangerSpawner>(); TriggerWin tw = bigBase.GetComponentInChildren <TriggerWin>(); PortraitData pd = bigBase.GetComponentInChildren <PortraitData>(); if (pd) { pd.team = t; pd.TeamColor = primaryColour; } else { Debug.LogWarning("Please assign a PortraitData Component to " + bigBase.name); } if (ta) { ta.team = t; } else { Debug.LogWarning("please assign a Troop Actor Component to " + bigBase.name); } if (hangers.Length > 0) { foreach (HangerSpawner hanger in hangers) { hanger.team = t; } } else { Debug.LogWarning("please assign at least one HangerSpawner Component to " + bigBase.name); } if (tw) { tw.team = t; } else { Debug.LogWarning("please assign a TriggerWin Component to " + bigBase.name); } }
private void OnTriggerExit(Collider other) { TroopActor currentActor = other.GetComponent <TroopActor>(); if (currentActor) { if (other.GetComponent <TroopActor>().team == Team.TEAM1) { team1unitsInZone.Remove(other.GetComponent <TroopActor>()); } if (other.GetComponent <TroopActor>().team == Team.TEAM2) { team2unitsInZone.Remove(other.GetComponent <TroopActor>()); } } }
TroopActor ClosestGeneral() { float dis = 0f; TroopActor closestAlly = null; foreach (TroopActor ta in op.allTroopActors) { if (ta.rankState != RankState.dead) { if ((dis == 0f || Vector3.Distance(ta.transform.position, transform.position) < dis) && ta != this && ta.team == team && ta.rankState == RankState.IsGeneral) { dis = Vector3.Distance(ta.transform.position, transform.position); closestAlly = ta; } } } return(closestAlly); }
TroopActor ClosestEnemy(GunSettings gun) { float dis = 0f; TroopActor closestEnemy = null; foreach (TroopActor ta in op.allTroopActors) { if (ta.rankState != RankState.dead && IsAttackableUnit(ta)) { if ((dis == 0f || Vector3.Distance(ta.transform.position, transform.position) < dis) && EnemyInRange(ta.transform, gun) && ta != this && ta.team != team) { dis = Vector3.Distance(ta.transform.position, transform.position); closestEnemy = ta; } } } return(closestEnemy); }
/*Toggle between Generals, decrement or increment the generals list, but setting true or false for the function parameters*/ void CheckGeneralState(bool increase, bool decrease) { if (increase) { index++; if (index >= m_generals.Count) { index = 0; } currentGeneral = m_generals[index]; currentSelectedUnit = m_generals[index].gameObject; m_navigationArrowActor.m_navMarker.transform.position = currentSelectedUnit.transform.position; m_currentSelectionCircle = Instantiate(m_selectionCircle, m_generals[index].transform.position, Quaternion.Euler(-90, 0, 0)); m_currentSelectionCircle.GetComponent <SelectionCircle> ().ta = m_generals [index]; EnableMoveTargetsForSelectedGeneral(); DisablesMoveTargets(); } if (decrease) { if (index <= 0) { index = m_generals.Count; } index--; currentSelectedUnit = m_generals[index].gameObject; currentGeneral = m_generals[index]; m_currentSelectionCircle = Instantiate(m_selectionCircle, m_generals[index].transform.position, Quaternion.Euler(-90, 0, 0)); m_currentSelectionCircle.GetComponent <SelectionCircle> ().ta = m_generals [index]; EnableMoveTargetsForSelectedGeneral(); DisablesMoveTargets(); } }
void ClosestEnemyUnit() { float dis = 0; foreach (TroopActor T in op.allTroopActors) { if (m_tank == null && T.team != m_team && T.rankState != RankState.dead) { if (Vector3.Distance(m_currentMarker.transform.position, T.transform.position) < 20f) { if (dis == 0 || Vector3.Distance(m_currentMarker.transform.position, T.transform.position) < dis) { dis = Vector3.Distance(m_currentMarker.transform.position, T.transform.position); m_tank = T; } } } } if (m_tank != null) { if (Vector3.Distance(m_currentMarker.transform.position, m_tank.transform.position) > 20f) { m_tank = null; SimpleAnimate sa = m_currentMarker.GetComponentInChildren <SimpleAnimate>(); if (sa) { sa.speedModifier = 1; } } else { SimpleAnimate sa = m_currentMarker.GetComponentInChildren <SimpleAnimate>(); if (sa) { sa.speedModifier = 5f; } } } }
public void Die(TroopActor ta) { ta.onDie.Invoke(); if (ta.rankState == RankState.IsGeneral) { ta.rankState = RankState.dead; if (moveTarget) { Destroy(moveTarget.gameObject); } } ta.rankState = RankState.dead; if (ta.team == Team.TEAM1) { op.team1Generals.Remove(ta); } if (ta.team == Team.TEAM2) { op.team2Generals.Remove(ta); } }
void AttackSelectedEnemy(TroopActor troopToAttack) { foreach (GunSettings gun in guns) { if (troopToAttack && withinRange(gun, troopToAttack)) { gun.attackTarget = ClosestEnemy(gun); gun.turret.rotation = Quaternion.Slerp(gun.turret.rotation, Quaternion.LookRotation(gun.attackTarget.transform.position - gun.turret.position), gun.turretAimSpeed * Time.deltaTime); gun.turret.localEulerAngles = new Vector3(0, gun.turret.localEulerAngles.y, 0); gun.barrel.rotation = Quaternion.Slerp(gun.barrel.rotation, Quaternion.LookRotation(gun.attackTarget.transform.position - gun.barrel.position), gun.barrelAimSpeed * Time.deltaTime); gun.barrel.localEulerAngles = new Vector3(gun.barrel.localEulerAngles.x, 0, 0); gun.m_gunTimer -= Time.deltaTime; if (gun.m_gunTimer < Time.deltaTime) { DrawLineRender(gun.turret, troopToAttack.transform); ResetGunTimer(gun); Fire(gun); } } } }
// Update is called once per frame void Update() { if (pd) { if (uiStuff.portrait.sprite != pd.baseFace) { uiStuff.portrait.sprite = pd.baseFace; } if (uiStuff.imagesToColor.Length > 0) { foreach (Image panel in uiStuff.imagesToColor) { if (panel.color.r != pd.TeamColor.r || panel.color.b != pd.TeamColor.b || panel.color.g != pd.TeamColor.g) { panel.color = pd.TeamColor; } } } if (!BaseTa) { BaseTa = pd.gameObject.GetComponentInChildren <TroopActor>(); } } else { foreach (PortraitData pdi in FindObjectsOfType <PortraitData>()) { if (pdi.team == team) { pd = pdi; } } } if (uiStuff.sldr && BaseTa) { if (uiStuff.sldr.maxValue != BaseTa.maxHealth) { uiStuff.sldr.maxValue = BaseTa.maxHealth; } uiStuff.sldr.value = BaseTa.currentHealth; } foreach (SelectionImage si in selectionImages) { if (tc.currentSelectedUnit) { if (tc.currentSelectedUnit.GetComponent <TroopActor> ().unitClass == si.unitClass) { if (!si.selected) { si.selected = true; si.img.color = Color.white; } } else { if (si.selected) { si.selected = false; si.img.color = Color.black; } } } } }
// Update is called once per frame protected virtual void Update() { if (m_controller == null) { foreach (Controller c in FindObjectsOfType <Controller>()) { if (team == Team.TEAM1 && c.m_playerIndex == 0) { m_controller = c; } if (team == Team.TEAM2 && c.m_playerIndex == 1) { m_controller = c; } } } cameraController.currentUnit = currentSelectedUnit; if (m_generals.Count == 0) { Destroy(m_currentSelectionCircle); } else if (!currentSelectedUnit.activeInHierarchy || currentSelectedUnit.GetComponent <TroopActor>().rankState == RankState.dead) { currentGeneral = m_generals[0]; currentSelectedUnit = m_generals[0].gameObject; m_navigationArrowActor.m_navMarker.transform.position = currentSelectedUnit.transform.position; m_currentSelectionCircle = Instantiate(m_selectionCircle, m_generals[0].transform.position, Quaternion.Euler(-90, 0, 0)); m_currentSelectionCircle.GetComponent <SelectionCircle> ().ta = m_generals [0]; EnableMoveTargetsForSelectedGeneral(); DisablesMoveTargets(); } else { QuickSelect(); if (m_controller.DpadLeftWasPress() && m_generals.Count > 0) { //destroy the currect circle if (m_currentSelectionCircle != null) { Destroy(m_currentSelectionCircle); } CheckGeneralState(false, true); } if (m_controller.DpadRightWasPress() && m_generals.Count > 0) { //destory the currect circle if (m_currentSelectionCircle != null) { Destroy(m_currentSelectionCircle); } CheckGeneralState(true, false); } if (m_navigationArrowActor.m_tank != null && m_controller.Action3WasPress() && !m_navigationArrowActor.m_airStrikeState && !m_navigationArrowActor.ChangeSate) { if (UnitToAttack != m_navigationArrowActor.m_tank) { UnitToAttack = m_navigationArrowActor.m_tank; } } else if (m_controller.Action1WasPress() && !m_navigationArrowActor.m_airStrikeState) { if (UnitToAttack != null) { UnitToAttack = null; } m_generals[index].targetToAttack = null; m_generals[index].SetAttackType(AttackType.AUTO); foreach (TroopActor T in op.allTroopActors) { if (T.myGeneral == m_generals[index]) { T.targetToAttack = null; T.SetAttackType(AttackType.AUTO); } } m_generals[index].moveTarget.transform.position = m_navigationArrowActor.m_currentMarker.transform.position; m_generals[index].moveTarget.transform.rotation = m_navigationArrowActor.m_currentMarker.transform.rotation; } SquadGangAttackSelectedUnit(); if (m_currentSelectionCircle != null && index >= 0 && m_generals.Count > 0) { m_currentSelectionCircle.transform.position = m_generals[index].transform.position; } } }