//called in every frame, execute if there's an ability is selected and pending target selection //use only mouse input atm. void SelectAbilityTarget() { if (selectedAbilityID < 0) { return; } //only cast on terrain and platform LayerMask mask = 1 << LayerManager.LayerPlatform(); int terrainLayer = LayerManager.LayerTerrain(); if (terrainLayer >= 0) { mask |= 1 << terrainLayer; } Ability ability = abilityList[selectedAbilityID]; if (ability.singleUnitTargeting) { if (ability.targetType == Ability._TargetType.Hybrid) { mask |= 1 << LayerManager.LayerTower(); mask |= 1 << LayerManager.LayerCreep(); } else if (ability.targetType == Ability._TargetType.Friendly) { mask |= 1 << LayerManager.LayerTower(); } else if (ability.targetType == Ability._TargetType.Hostile) { mask |= 1 << LayerManager.LayerCreep(); } } #if UNITY_IPHONE || UNITY_ANDROID || UNITY_WP8 Unit targetUnit = null; if (Input.touchCount >= 1) { Camera mainCam = Camera.main; if (mainCam != null) { Ray ray = mainCam.ScreenPointToRay(Input.touches[0].position); RaycastHit hit; if (Physics.Raycast(ray, out hit, Mathf.Infinity, mask)) { currentIndicator.position = hit.point + new Vector3(0, 0.1f, 0); validTarget = true; if (ability.singleUnitTargeting) { targetUnit = hit.transform.GetComponent <Unit>(); if (targetUnit != null) { currentIndicator.position = targetUnit.thisT.position; } else { validTarget = false; } } } else { validTarget = false; } } } else { if (validTarget) { ActivateAbility(ability, currentIndicator.position, targetUnit); } else { GameControl.DisplayMessage("Invalid target for ability"); } ClearSelectedAbility(); } #else Camera mainCam = Camera.main; if (mainCam != null) { Ray ray = mainCam.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit, Mathf.Infinity, mask)) { currentIndicator.position = hit.point + new Vector3(0, 0.1f, 0); Unit targetUnit = null; validTarget = true; if (ability.singleUnitTargeting) { targetUnit = hit.transform.GetComponent <Unit>(); if (targetUnit != null) { currentIndicator.position = targetUnit.thisT.position; } else { validTarget = false; } } if (Input.GetMouseButtonDown(0)) { if (validTarget) { ActivateAbility(ability, currentIndicator.position, targetUnit); ClearSelectedAbility(); } else { GameControl.DisplayMessage("Invalid target for ability"); } } } } if (Input.GetMouseButtonDown(1)) { ClearSelectedAbility(); } #endif }
void Awake() { instance = (GameControl)target; }
public void OnMainMenuButton() { Time.timeScale = 1; GameControl.LoadMainMenu(); }
void Awake() { Time.fixedDeltaTime = timeStep; instance = this; thisT = transform; //ObjectPoolManager.Init(); BuildManager buildManager = (BuildManager)FindObjectOfType(typeof(BuildManager)); buildManager.Init(); NodeGenerator nodeGenerator = (NodeGenerator)FindObjectOfType(typeof(NodeGenerator)); if (nodeGenerator != null) { nodeGenerator.Awake(); } PathFinder pathFinder = (PathFinder)FindObjectOfType(typeof(PathFinder)); if (pathFinder != null) { pathFinder.Awake(); } PathTD[] paths = FindObjectsOfType(typeof(PathTD)) as PathTD[]; for (int i = 0; i < paths.Length; i++) { paths[i].Init(); } for (int i = 0; i < buildManager.buildPlatforms.Count; i++) { buildManager.buildPlatforms[i].Init(); } gameObject.GetComponent <ResourceManager>().Init(); PerkManager perkManager = (PerkManager)FindObjectOfType(typeof(PerkManager)); if (perkManager != null) { perkManager.Init(); } if (loadAudioManager) { Instantiate(Resources.Load("AudioManager", typeof(GameObject))); } if (rangeIndicator) { rangeIndicator = (Transform)ObjectPoolManager.Spawn(rangeIndicator); rangeIndicator.parent = thisT; rangeIndicatorObj = rangeIndicator.gameObject; } if (rangeIndicatorCone) { rangeIndicatorCone = (Transform)ObjectPoolManager.Spawn(rangeIndicatorCone); rangeIndicatorCone.parent = thisT; rangeIndicatorConeObj = rangeIndicatorCone.gameObject; } ClearSelectedTower(); Time.timeScale = 1; }
public void OnContinueButton() { Time.timeScale = 1; GameControl.LoadNextScene(); }
public string _PurchasePerk(Perk perk, bool useRsc = true) { string text = perk.Purchase(useRsc); if (text != "") { return(text); } if (onPerkPurchasedE != null) { onPerkPurchasedE(perk); } //process the prereq for other perk for (int i = 0; i < perkList.Count; i++) { Perk perkTemp = perkList[i]; if (perkTemp.purchased || perkTemp.prereq.Count == 0) { continue; } perkTemp.prereq.Remove(perk.ID); } perkPoint += 1; if (onPerkPointE != null) { onPerkPointE(perkPoint); } if (perk.type == _PerkType.NewTower) { List <UnitTower> towerList = TowerDB.Load(); for (int i = 0; i < towerList.Count; i++) { if (towerList[i].prefabID == perk.itemIDList[0]) { unlockedTower.Add(towerList[i]); BuildManager.AddNewTower(towerList[i]); } } } else if (perk.type == _PerkType.NewAbility) { List <Ability> abilityList = AbilityDB.Load(); for (int i = 0; i < abilityList.Count; i++) { if (abilityList[i].ID == perk.itemIDList[0]) { unlockedAbility.Add(abilityList[i]); AbilityManager.AddNewAbility(abilityList[i]); } } } else if (perk.type == _PerkType.NewFPSWeapon) { List <FPSWeapon> FPSWeaponList = FPSWeaponDB.Load(); for (int i = 0; i < FPSWeaponList.Count; i++) { if (FPSWeaponList[i].prefabID == perk.itemIDList[0]) { unlockedWeapon.Add(FPSWeaponList[i]); FPSControl.AddNewWeapon(FPSWeaponList[i]); } } } else if (perk.type == _PerkType.GainLife) { GameControl.GainLife((int)Random.Range(perk.value, perk.valueAlt)); } else if (perk.type == _PerkType.LifeCap) { lifeCap += (int)perk.value; GameControl.GainLife(0); } else if (perk.type == _PerkType.LifeRegen) { lifeRegen += perk.value; } else if (perk.type == _PerkType.LifeWaveClearedBonus) { lifeWaveClearedBonus += (int)perk.value; } else if (perk.type == _PerkType.GainRsc) { List <int> valueList = new List <int>(); for (int i = 0; i < perk.valueRscList.Count; i++) { valueList.Add((int)perk.valueRscList[i]); } ResourceManager.GainResource(valueList, null, false); //dont pass multiplier and dont use multiplier } else if (perk.type == _PerkType.RscRegen) { for (int i = 0; i < perk.valueRscList.Count; i++) { rscRegen[i] += perk.valueRscList[i]; } } else if (perk.type == _PerkType.RscGain) { for (int i = 0; i < perk.valueRscList.Count; i++) { rscGain[i] += perk.valueRscList[i]; } } else if (perk.type == _PerkType.RscCreepKilledGain) { for (int i = 0; i < perk.valueRscList.Count; i++) { rscCreepKilledGain[i] += perk.valueRscList[i]; } } else if (perk.type == _PerkType.RscWaveClearedGain) { for (int i = 0; i < perk.valueRscList.Count; i++) { rscWaveClearedGain[i] += perk.valueRscList[i]; } } else if (perk.type == _PerkType.RscResourceTowerGain) { for (int i = 0; i < perk.valueRscList.Count; i++) { rscRscTowerGain[i] += perk.valueRscList[i]; } } else if (perk.type == _PerkType.Tower) { ModifyTowerModifier(globalTowerModifier, perk); } else if (perk.type == _PerkType.TowerSpecific) { for (int i = 0; i < perk.itemIDList.Count; i++) { int ID = TowerModifierExist(perk.itemIDList[i]); if (ID == -1) { PerkTowerModifier towerModifier = new PerkTowerModifier(); towerModifier.prefabID = perk.itemIDList[i]; towerModifierList.Add(towerModifier); ID = towerModifierList.Count - 1; } ModifyTowerModifierInList(ID, perk); } } else if (perk.type == _PerkType.Ability) { ModifyAbilityModifier(globalAbilityModifier, perk); } else if (perk.type == _PerkType.AbilitySpecific) { for (int i = 0; i < perk.itemIDList.Count; i++) { int ID = AbilityModifierExist(perk.itemIDList[i]); if (ID == -1) { PerkAbilityModifier abilityModifier = new PerkAbilityModifier(); abilityModifier.abilityID = perk.itemIDList[i]; abilityModifierList.Add(abilityModifier); ID = abilityModifierList.Count - 1; } ModifyAbilityModifierInList(ID, perk); } } else if (perk.type == _PerkType.FPSWeapon) { ModifyFPSWeaponModifier(globalFPSWeaponModifier, perk); } else if (perk.type == _PerkType.FPSWeaponSpecific) { for (int i = 0; i < perk.itemIDList.Count; i++) { int ID = FPSWeaponModifierExist(perk.itemIDList[i]); if (ID == -1) { PerkFPSWeaponModifier weaponModifier = new PerkFPSWeaponModifier(); weaponModifier.prefabID = perk.itemIDList[i]; FPSWeaponModifierList.Add(weaponModifier); ID = FPSWeaponModifierList.Count - 1; } ModifyFPSWeaponModifierInList(ID, perk); } } else if (perk.type == _PerkType.EnergyRegen) { energyRegen += perk.value; } else if (perk.type == _PerkType.EnergyIncreaseCap) { energyCap += perk.value; } else if (perk.type == _PerkType.EnergyCreepKilledBonus) { energyCreepKilledBonus += perk.value; } else if (perk.type == _PerkType.EnergyWaveClearedBonus) { energyWaveClearedBonus += perk.value; } return(""); }
public void OnResumeButton() { Hide(); GameControl.ResumeGame(); }
void OnUnitCleared(UnitCreep creep) { int waveID = creep.waveID; activeUnitCount -= 1; Wave wave = null; if (spawnLimit == _SpawnLimit.Finite) { wave = waveList[waveID]; } else if (spawnLimit == _SpawnLimit.Infinite) { for (int i = 0; i < waveList.Count; i++) { if (waveList[i].waveID == waveID) { wave = waveList[i]; break; } } if (wave == null) { Debug.Log("error!"); return; } } wave.activeUnitCount -= 1; if (wave.spawned && wave.activeUnitCount == 0) { wave.cleared = true; waveClearedCount += 1; //Debug.Log("wave"+(waveID+1)+ " is cleared"); ResourceManager.GainResource(wave.rscGainList, PerkManager.GetRscWaveKilled()); GameControl.GainLife(wave.lifeGain + PerkManager.GetLifeWaveClearedModifier()); AbilityManager.GainEnergy(wave.energyGain + (int)PerkManager.GetEnergyWaveClearedModifier()); if (spawnLimit == _SpawnLimit.Infinite) { waveList.Remove(wave); } if (IsAllWaveCleared()) { GameControl.GameWon(); } else { if (spawnMode == _SpawnMode.Round && onEnableSpawnE != null) { onEnableSpawnE(); } } } if (!IsAllWaveCleared() && activeUnitCount == 0 && !spawning) { if (spawnMode == _SpawnMode.WaveCleared) { SpawnWaveFinite(); } } }
public IEnumerator DragNDropRoutine() { GameControl.SelectTower(this); yield return(null); #if UNITY_IPHONE || UNITY_ANDROID || UNITY_WP8 || UNITY_BLACKBERRY _TileStatus status = _TileStatus.NoPlatform; while (Input.touchCount >= 1) { Vector3 pos = Input.touches[0].position; status = BuildManager.CheckBuildPoint(pos, -1, prefabID); if (status == _TileStatus.Available) { BuildInfo buildInfo = BuildManager.GetBuildInfo(); thisT.position = buildInfo.position; thisT.rotation = buildInfo.platform.thisT.rotation; } else { Ray ray = Camera.main.ScreenPointToRay(pos); RaycastHit hit; if (Physics.Raycast(ray, out hit, Mathf.Infinity)) { thisT.position = hit.point; } //this there is no collier, randomly place it 30unit from camera else { thisT.position = ray.GetPoint(30); } } if (Input.touches[0].phase == TouchPhase.Ended) { string exception = BuildManager.BuildTower(srcTower); if (exception != "") { GameControl.DisplayMessage(exception); } else { BuildManager.ClearBuildPoint(); } break; } yield return(null); } //if(status==_TileStatus.Available){ // string exception=BuildManager.BuildTower(srcTower); // if(exception!="") GameControl.DisplayMessage(exception); //} //else{ // GameControl.DisplayMessage("cancelled"); // BuildManager.ClearBuildPoint(); //} GameControl.ClearSelectedTower(); thisObj.SetActive(false); #else while (true) { Vector3 pos = Input.mousePosition; _TileStatus status = BuildManager.CheckBuildPoint(pos, -1, prefabID); if (status == _TileStatus.Available) { BuildInfo buildInfo = BuildManager.GetBuildInfo(); thisT.position = buildInfo.position; thisT.rotation = buildInfo.platform.thisT.rotation; } else { Ray ray = Camera.main.ScreenPointToRay(pos); RaycastHit hit; if (Physics.Raycast(ray, out hit, Mathf.Infinity)) { thisT.position = hit.point; } //this there is no collier, randomly place it 30unit from camera else { thisT.position = ray.GetPoint(30); } } //left-click, build if (Input.GetMouseButtonDown(0) && !UIUtilities.IsCursorOnUI()) { //if current mouse point position is valid, build the tower if (status == _TileStatus.Available) { string exception = BuildManager.BuildTower(srcTower); if (exception != "") { GameControl.DisplayMessage(exception); } } else { BuildManager.ClearBuildPoint(); } GameControl.ClearSelectedTower(); thisObj.SetActive(false); break; } //right-click, cancel if (Input.GetMouseButtonDown(1) || GameControl.GetGameState() == _GameState.Over) { GameControl.ClearSelectedTower(); BuildManager.ClearBuildPoint(); thisObj.SetActive(false); break; } yield return(null); } #endif thisT.position = new Vector3(0, 9999, 0); }