protected void Start() { RangeDetector = RangeDetector ?? GetComponentInChildren <TagDetector>(); parentTowerComponent = parentTowerComponent ?? GetComponentInParent <TowerComponent>() ?? null; ParentTowerLegacy = ParentTowerLegacy ?? GetComponentInParent <TowerControllerLegacy>() ?? null; ParentTowerSlot = parentTowerSlot ?? GetComponentInParent <TowerSlotController>() ?? null; }
public static TowerComponent AutoSelectToFire(Vector3 position) { if (Towers.Count < 1) { return(null); } var sqrDistance = float.MaxValue; TowerComponent tower = null; foreach (var instance in Towers) { if (!instance.CanFire) { continue; } var sqr = Vector3.SqrMagnitude(position - instance.transform.position); if (sqr > sqrDistance) { continue; } sqrDistance = sqr; tower = instance; } return(tower); }
public void ActivateTower(TowerComponent towerComponent) { currentTowerComponent = towerComponent; game.towerCamera.position = towerComponent.cameraPoint.position; game.towerCamera.rotation = towerComponent.cameraPoint.rotation; SwitchPlayerAction(true); }
public void initBag() { for (int i = 0; i < 20; i++) { TowerComponent tc = GameStaticData.getInstance().getComponentInfo("c0" + (i % 6)); bagComponents.Add(tc); } }
public override bool NorthExecutionCondition(TowerComponent tc) { if (orbitalGunsController.OrbitalGuns.Count < tc.Data.orbitalData.maxNumberOfOrbitals) { return(true); } return(false); }
public TowerComponent getComponentInfo(string cid) { TowerComponent data = null; if (!componentStaticInfo.TryGetValue(cid, out data)) { data = componentStaticInfo ["c_default"]; } return(data); }
public int AutoFireToPosition(Vector3 position) { var tower = TowerComponent.AutoSelectToFire(position); if (tower == null) { return(-10); } tower.FireRocket(position); return(0); }
IEnumerator StartShooting(TowerComponent tower, GameObject projectile) { var force = Vector3.zero; var targets = new Collider[1]; var monsterInAttackArea = false; var projectileRigidbody = projectile.GetComponent <Rigidbody>(); var hitDamage = tower.towerParams.hitDamage; var contactRadius = tower.towerParams.projectileContactRadius; projectile.transform.localScale = Vector3.one * contactRadius; var iterationTime = new WaitForFixedUpdate(); var shotDuration = new WaitForSeconds(tower.towerParams.fireRate); var layerMask = 1 << GetComponent <GameSystem>().layerMonster; while (keepShooting) { monsterInAttackArea = Physics.OverlapSphereNonAlloc(tower.transform.position, tower.towerParams.attackRadius, targets, layerMask) > 0 ? true : false; if (!monsterInAttackArea) { if (projectile.gameObject.activeSelf) { projectile.gameObject.SetActive(false); } StopCoroutine(CheckProjectile(projectileRigidbody, contactRadius, hitDamage)); yield return(iterationTime); continue; } projectileRigidbody.velocity = Vector3.zero; projectile.transform.position = tower.transform.position; projectile.gameObject.SetActive(true); force = targets[0].transform.position - projectile.transform.position; force.Normalize(); StartCoroutine(CheckProjectile(projectileRigidbody, contactRadius, hitDamage)); projectileRigidbody.AddForce(force * 20.0f / tower.towerParams.fireRate, ForceMode.VelocityChange); yield return(shotDuration); } }
void InstantiateTowerPrefab(TowerComponent towerPrefab, Vector3 position) { var tower = Instantiate <TowerComponent>(towerPrefab, position, Quaternion.identity); towers.Add(tower); if (keepShooting) { StartCoroutine(StartShooting(tower, Instantiate <GameObject>(projectilePrefab))); } SendMessage("SpendMoney", tower.towerParams.price, SendMessageOptions.RequireReceiver); }
public void setInfo(TowerComponent tc) { this.tc = tc; if (tc == null) { cIcon.url = GameConstant.TOWER_COMPONENT_ICON_PATH + "empty"; _detail.text = ""; } else { cIcon.url = GameConstant.TOWER_COMPONENT_ICON_PATH + tc.cid; _detail.text = tc.cname + "\n" + tc.getEffects(); } }
public void OnDrop(TowerComponent towerComponent) { points[towerComponent.PlayerID]--; Players[towerComponent.PlayerID].destroyTower(); if (points[towerComponent.PlayerID] == 0) { //TODO on win/lose action } else { //onDropAction(playerID); onTurnSwitch(); } }
public void setUneuip(TowerComponent tc) { this.tc = tc; _icon.url = "image/atk"; _name.text = "卸下"; if (tc != null) { _detail.text = tc.getEffects(); } else { _detail.text = "No Equip"; } }
public void updateView(TowerComponent tc) { this.tc = tc; if (tc == null) { _icon.url = GameConstant.TOWER_COMPONENT_ICON_PATH + "empty"; _name.text = ""; _detail.text = ""; } else { _icon.url = GameConstant.TOWER_COMPONENT_ICON_PATH + tc.cid; _name.text = tc.cname; _detail.text = tc.getEffects(); } }
public void loadComponentInfo() { Object[] content = Resources.LoadAll("ScriptableObj/Components"); foreach (Object o in content) { TowerComponent tc = (TowerComponent)o; componentStaticInfo.Add(tc.cid, tc); //globalEffects.Add (tb.tid,tb); } //componentStaticInfo.Add ("0", new TowerComponent ()); // TextAsset ta = Resources.Load ("json/tower_component/components") as TextAsset; // List<TowerComponent> ll = JsonConvert.DeserializeObject<List<TowerComponent>> (ta.text); // //Dictionary<string,TowerComponent> dic = new Dictionary<string,TowerComponent> (); // foreach (TowerComponent tc in ll) { // componentStaticInfo.Add (tc.cid, tc); // } }
// IEnumerator moveIcon(Vector2 moveTo){ // while (true) { // movingIcon.xy = Vector2.Lerp (movingIcon.xy, moveTo, 0.3f); // yield return null; // if ((movingIcon.xy - moveTo).magnitude < 1f) { // yield break; // } // } // } // public void unequip (int componentIdx){ // if (componentIdx < 0||componentIdx>=4) // return; // TowerTemplate tt = PlayerData.getInstance ().ownedTowers [towerIdx]; // TowerComponent equipped = tt.components [componentIdx]; // if (equipped == null) // return; // PlayerData.getInstance ().bagComponents.Add (equipped); // tComponents.numItems = PlayerData.getInstance ().bagComponents.Count; // components [componentIdx].setInfo (null); // tt.components [componentIdx] = null; // // // movingIcon.url = "Equips/" + equipped.cid; // movingIcon.xy = components [componentIdx].xy; // movingIcon.visible = true; // tComponents.GetChildAt (tComponents.numItems-1).visible = false; // tComponents.EnsureBoundsCorrect (); // movingIcon.TweenMove(this.GlobalToLocal(tComponents.LocalToGlobal(tComponents.GetChildAt(tComponents.numItems-1).xy)),0.3f).OnStart(delegate(GTweener tweener) { // // }).OnUpdate(delegate(GTweener tweener) { // movingIcon.InvalidateBatchingState(); // }).OnComplete(delegate(GTweener tweener) { // movingIcon.visible = false; // //PlayerData.getInstance ().bagComponents [bagSlot] = equipped; // tComponents.GetChildAt (tComponents.numItems-1).visible = true; // }); // // updateCalcedProperty (tt); // // } public void unequip(int componentIdx) { if (componentIdx < 0 || componentIdx >= 4) { return; } TowerTemplate tt = PlayerData.getInstance().ownedTowers [towerIdx]; TowerComponent equipped = tt.components [componentIdx]; if (equipped == null) { return; } PlayerData.getInstance().bagComponents.Add(equipped); components [componentIdx].setInfo(null); tt.components [componentIdx] = null; updateCalcedProperty(tt); }
public void init(string itemId) { if (itemId.StartsWith("t")) { TowerBase tb = GameStaticData.getInstance().getTowerBase(itemId); _icon.url = ""; _txt.text = tb.tname + '\n' + tb.tdesp; } else if (itemId.StartsWith("c")) { TowerComponent tc = GameStaticData.getInstance().getComponentInfo(itemId); _icon.url = ""; _txt.text = tc.cname + '\n' + tc.cdesp; } else { Debug.Log(itemId); _txt.text = "要水货伤痕p"; } }
void CheckTowerStoreUI() { var text = ""; var towersPrefabs = GetComponent <TowersSystem>().GetAllTowerPrefabs(); TowerComponent prefab = null; // If player has enough money for buying a tower - make it available in towers chart. foreach (var button in btnTowerInStore) { text = button.transform.FindChild("Text").GetComponent <Text>().text; prefab = towersPrefabs.Find(a => a.towerParams.towerName == text ? true : false); if (prefab != null) { button.interactable = prefab.towerParams.price > money ? false : true; } } }
public override void InitializeSceneComponents() { bool _isLoaded = GenerateLevel(); if (!_isLoaded) { return; } List <TowerComponent> _towers = new List <TowerComponent>(); foreach (Transform _tower in towers.transform) { TowerComponent _tComponent = _tower.GetComponent <TowerComponent>(); _tComponent.SetUpHandler(_towerTracker); _towers.Add(_tComponent); } boatComponent.SetGameStateHandler(_gameStateHandler, _towerTracker, _boatTracker); towerTrackerComponent.SetUp(_gameStateHandler, _towerTracker, _towers); inputComponent.SetUp(_gameStateHandler, _boatTracker); }
public ComponentGenerator() { string[] dirs = {"Base", "Turret"}; _towerParts = new TowerComponent[BaseTower.TOWER_COMPLETE][]; for (int i = 0; i < dirs.Length; i++) { Object[] loaded = Resources.LoadAll("Prefabs/Towers/" + dirs[i], typeof(GameObject)); _towerParts[i] = new TowerComponent[loaded.Length]; for (int o = 0; o < loaded.Length; o++) { _towerParts[i][o] = ((GameObject)loaded[o]).GetComponent<TowerComponent>(); _towerParts[i][o].componentType = i; _towerParts[i][o].componentName = ((GameObject)loaded[o]).name; } } /* * Turret Parts */ string s = "Prefabs/Towers/Turret Parts/"; turretBase = Resources.Load(s + "Turret Base", typeof(GameObject)) as GameObject; spinningBase = Resources.Load(s + "Spinning Base", typeof(GameObject)) as GameObject; missileSources = Resources.LoadAll(s + "Missile Source", typeof(GameObject)); barrels = Resources.LoadAll(s + "Barrel", typeof(GameObject)); spinningParts = Resources.LoadAll(s + "Spinning", typeof(GameObject)); missiles = Resources.LoadAll(s + "Missiles", typeof(GameObject)); Object[] loadedStems = Resources.LoadAll(s + "Stems", typeof(GameObject)); stems = new TowerStem[loadedStems.Length]; for (int i = 0; i < loadedStems.Length; i++) { stems[i] = ((GameObject)loadedStems[i]).GetComponent<TowerStem>(); } Debug.Log("ComponentGenerator: " + _towerParts[0].Length + "/" + _towerParts[1].Length + " / S:" + stems.Length); partsRoot = GameObject.Find("[Root]Parts").transform; }
// public void changeComponent (int componentIdx, int bagSlot){ // isDropOnSlot = true; // if (towerIdx < 0) // return; // TowerTemplate tt = PlayerData.getInstance ().ownedTowers [towerIdx]; // TowerComponent toEquip = PlayerData.getInstance ().bagComponents [bagSlot]; // TowerComponent equipped = tt.components [componentIdx]; // // tt.components [componentIdx] = toEquip; // components [componentIdx].setInfo (tt.components[componentIdx]); // // if (equipped != null) { // // movingIcon.url = "Equips/" + equipped.cid; // movingIcon.xy = components [componentIdx].xy; // movingIcon.visible = true; // // // PlayerData.getInstance ().bagComponents [bagSlot] = equipped; // tComponents.numItems = PlayerData.getInstance ().bagComponents.Count; // tComponents.GetChildAt (bagSlot).visible = false; // tComponents.EnsureBoundsCorrect (); // for (int i = tComponents.numItems-1; i > bagSlot; i--) { // Vector2 startPos = tComponents.GetChildAt (i - 1).position; // Vector2 endPos = tComponents.GetChildAt (i).position; // tComponents.GetChildAt (i).xy = startPos; // tComponents.GetChildAt (i).TweenMove (endPos,0.3f); // } // // movingIcon.TweenMove(this.GlobalToLocal(beforeDragPos),0.3f).OnStart(delegate(GTweener tweener) { // // }).OnUpdate(delegate(GTweener tweener) { // movingIcon.InvalidateBatchingState(); // }).OnComplete(delegate(GTweener tweener) { // movingIcon.visible = false; // //PlayerData.getInstance ().bagComponents [bagSlot] = equipped; // tComponents.GetChildAt (bagSlot).visible = true; // }); // } else { // PlayerData.getInstance ().bagComponents.RemoveAt (bagSlot); // tComponents.numItems = PlayerData.getInstance ().bagComponents.Count; // } // updateCalcedProperty (tt); // } public void changeComponent(int componentIdx, int bagSlot) { isDropOnSlot = true; if (towerIdx < 0) { return; } TowerTemplate tt = PlayerData.getInstance().ownedTowers [towerIdx]; TowerComponent toEquip = PlayerData.getInstance().bagComponents [bagSlot]; TowerComponent equipped = tt.components [componentIdx]; tt.components [componentIdx] = toEquip; components [componentIdx].setInfo(tt.components[componentIdx]); if (equipped != null) { PlayerData.getInstance().bagComponents[bagSlot] = equipped; } else { PlayerData.getInstance().bagComponents.RemoveAt(bagSlot); } updateCalcedProperty(tt); }
public TowerItem(TowerComponent t) : base(ITEM_TOWER) { _tc = t; }
public TowerItem(int i, float cost) : base(ITEM_TOWER) { _tc = ComponentGenerator.Get().GenerateComponent(i, cost); }
/* * Constructors */ public TowerItem() : base(ITEM_TOWER) { _tc = ComponentGenerator.Get().GenerateComponent(Random.Range(0, BaseTower.TOWER_COMPLETE), 0); }
public void SetAndShow(int idx, TowerComponent nowTc) { this.idx = idx; this.nowComponent = nowTc; Show(); }
void changeDetailView() { _changes.RemoveChildrenToPool(); string p = ""; p += ""; Dictionary <string, int[]> diff = new Dictionary <string, int[]> (); _c_before.text = "无"; _c_after.text = "无"; //diff ["name"] = new string[2]{"无 "," 无"}; if (nowComponent != null) { _c_before.text = nowComponent.cname.PadLeft(6, ' '); //diff ["name"][0] = nowComponent.cname.PadLeft(6,' '); foreach (TowerComponentEffect effect in nowComponent.effects) { if (effect.type == eTowerComponentEffectType.ATK_CHANGE) { diff ["atk"] = new int[2] { effect.x, 0 }; } else if (effect.type == eTowerComponentEffectType.ATK_RANGE_CHANGE) { diff ["atk_range"] = new int[2] { effect.x, 0 }; } else if (effect.type == eTowerComponentEffectType.ATK_SPD_CHANGE) { diff ["atk_spd"] = new int[2] { effect.x, 0 }; } else if (effect.type == eTowerComponentEffectType.EXTRA_ATK) { diff ["atk_p_" + effect.x] = new int[2] { effect.y, 0 }; } else if (effect.type == eTowerComponentEffectType.EXTRA_ABILITY) { diff ["extra_" + effect.extra] = new int[2] { effect.x, 0 }; } } } if (choose != -1) { TowerComponent tc = PlayerData.getInstance().bagComponents [choose]; _c_after.text = tc.cname.PadLeft(6, ' '); //diff ["name"][1] = tc.cname.PadLeft(6,' '); foreach (TowerComponentEffect effect in tc.effects) { if (effect.type == eTowerComponentEffectType.ATK_CHANGE) { if (diff.ContainsKey("atk")) { diff ["atk"] [1] = effect.x; } else { diff ["atk"] = new int[2] { 0, effect.x }; } } else if (effect.type == eTowerComponentEffectType.ATK_RANGE_CHANGE) { if (diff.ContainsKey("atk_range")) { diff ["atk_range"] [1] = effect.x; } else { diff ["atk_range"] = new int[2] { 0, effect.x }; } } else if (effect.type == eTowerComponentEffectType.ATK_SPD_CHANGE) { if (diff.ContainsKey("atk_spd")) { diff ["atk_spd"] [1] = effect.x; } else { diff ["atk_spd"] = new int[2] { 0, effect.x }; } } else if (effect.type == eTowerComponentEffectType.EXTRA_ATK) { if (diff.ContainsKey("atk_" + effect.x)) { diff ["atk_p_" + effect.x] [1] = effect.y; } else { diff ["atk_p_" + effect.x] = new int[2] { 0, effect.y }; } } else if (effect.type == eTowerComponentEffectType.EXTRA_ABILITY) { if (diff.ContainsKey("extra" + effect.extra)) { diff ["extra_" + effect.extra] [1] = effect.x; } else { diff ["extra_" + effect.extra] = new int[2] { 0, effect.x }; } } } } p += '\n'; foreach (var kv in diff) { if (kv.Key == "name") { continue; } if (kv.Key.StartsWith("extra")) { PropertyCompareLine pline = (PropertyCompareLine)_changes.AddItemFromPool(); string sid = kv.Key.Substring(6); TowerSkill ts = GameStaticData.getInstance().getTowerSkillInfo(sid); pline.setAsProperty(ts.skillName, "lv" + kv.Value [1], (kv.Value [1] - kv.Value [0]) + ""); } else if (kv.Key.StartsWith("atk_p")) { PropertyCompareLine pline = (PropertyCompareLine)_changes.AddItemFromPool(); string prop = kv.Key.Substring(6); eProperty pp = (eProperty)int.Parse(prop); string sv = string.Format("{0:f1}", kv.Value [1] * 0.001f); string schange = string.Format("{0:f1}", (kv.Value [1] - kv.Value [0]) * 0.001f); pline.setAsAtkProperty(pp, sv, schange); } else { PropertyCompareLine pline = (PropertyCompareLine)_changes.AddItemFromPool(); string trueKey = kv.Key.Replace("_", "\n"); pline.setAsProperty(trueKey, kv.Value [1] + "", (kv.Value [1] - kv.Value [0]) + ""); } p += kv.Key + " "; p += kv.Value [0]; p += " << "; p += kv.Value [1]; p += '\n'; } _txt_now.text = p; }
public override bool NorthExecutionCondition(TowerComponent tc) { return(true); }
IEnumerator FindPlaceForTower(TowerComponent towerPrefab) { var results = new RaycastHit[1]; var neighbours = new Collider[1]; var layerMask = 1 << GetComponent <GameSystem>().layerGround; var iterationStep = new WaitForFixedUpdate(); var extents = towerPrefab.GetComponent <MeshRenderer>().bounds.extents; var max = Mathf.Max(extents.x, extents.z); var radius = towerPrefab.towerParams.attackRadius; spawnZoneIsValid.transform.localScale = new Vector3(radius, spawnZoneIsValid.transform.localScale.y / 2, radius) * 2; spawnZoneIsInvalid.transform.localScale = new Vector3(radius, spawnZoneIsValid.transform.localScale.y / 2, radius) * 2; var tower = Instantiate <TowerComponent>(towerPrefab); Destroy(tower.GetComponent <Collider>()); tower.gameObject.SetActive(false); var isFit = false; while (true) { var ray = Camera.main.ScreenPointToRay(Input.mousePosition); var amount = Physics.RaycastNonAlloc(ray, results, 100, layerMask); if (amount == 1) { isFit = Physics.OverlapSphereNonAlloc(results[0].point, max, neighbours, ~layerMask) == 0 ? true : false; if (isFit) { spawnZoneIsValid.SetActive(true); spawnZoneIsValid.transform.position = results[0].point; spawnZoneIsInvalid.SetActive(false); } else { spawnZoneIsInvalid.SetActive(true); spawnZoneIsInvalid.transform.position = results[0].point; spawnZoneIsValid.SetActive(false); } tower.transform.position = results[0].point + new Vector3(0, extents.y, 0); } else { isFit = false; spawnZoneIsValid.SetActive(false); spawnZoneIsInvalid.SetActive(false); } tower.gameObject.SetActive(amount == 1); if (Input.GetMouseButtonDown(0)) //Input.GetButtonDown("Fire") { spawnZoneIsValid.SetActive(false); spawnZoneIsInvalid.SetActive(false); DestroyObject(tower.gameObject); if (isFit) { InstantiateTowerPrefab(towerPrefab, results[0].point + new Vector3(0, extents.y, 0)); } yield break; } yield return(iterationStep); } }
public void Remove(TowerComponent t) { for (int i = 0; i < towerInventory.Length; i++) { if (towerInventory[i] != null) { if (((TowerItem)towerInventory[i]).GetTowerComponent() == t) { towerInventory[i] = null; SortInventory(); return; } } } }
public void gainComponent(string componentId) { TowerComponent tc = GameStaticData.getInstance().getComponentInfo(componentId); bagComponents.Add(tc); }
public override bool SouthExecutionCondition(TowerComponent tc) { return true; }
public override bool WestExecutionCondition(TowerComponent tc) { return(false); }
public void AddTowerComponent(TowerComponent towerComponent) { TowerComponents.Add(componentCount, towerComponent); componentCount += 1; }
public void Open() { if (!this.Visible) { return; } List <Vector2> positionOffsets = new List <Vector2>(8) { new Vector2(-16, -16), new Vector2(0, -16), new Vector2(16, -16), new Vector2(16, 0), new Vector2(-16, 0), new Vector2(-16, 16), new Vector2(0, 16), new Vector2(16, 16), }; GameScript gs = (GameScript)this.GetParent(); gs.Sounds[SoundName.ChestOpen].Play(); bool genAny = false; for (int i = 0; i < this.Rand.Next(1, 4); ++i) { System.Collections.Generic.List <Tuple <TowerComponentDataBase, int> > componentList = TowerComponent.WeightedComponents[(ComponentType)this.Rand.Next(5)]; System.Collections.Generic.List <Tuple <TowerComponentDataBase, int> > localCopy = new System.Collections.Generic.List <Tuple <TowerComponentDataBase, int> >(componentList.Where(c => c.Item2 <= this.Value)); if (localCopy.Count <= 0) { break; } Tuple <TowerComponentDataBase, int> tcdb = null; while (localCopy.Count > 0) { tcdb = GetWeightedItem(localCopy, this.Rand); localCopy.Remove(tcdb); if (tcdb.Item1.Rarity == ComponentRarity.Red) { bool passes = this.Rand.NextDouble() < gs.RedChance; if (passes) { gs.RedChance = Math.Max(0, gs.RedChance - gs.RedActiveDecay); gs.RedoLuckText(); break; } else { gs.RedChance = Math.Max(0, gs.RedChance * gs.RedPassiveDecay); tcdb = null; gs.RedoLuckText(); continue; } } else { if (tcdb.Item1.Rarity == ComponentRarity.Purple) { bool passes = this.Rand.NextDouble() < gs.PurpleChance; if (passes) { gs.PurpleChance = Math.Max(0, gs.PurpleChance - gs.PurpleActiveDecay); gs.RedoLuckText(); break; } else { gs.PurpleChance = Math.Max(0, gs.PurpleChance * gs.PurplePassiveDecay); tcdb = null; gs.RedoLuckText(); continue; } } else { break; } } } if (tcdb != null) { this.Value -= (int)Mathf.Ceil(tcdb.Item2 / 3F); TowerComponent tc = TowerComponent.SpawnComponent(tcdb.Item1); if (tc.rarityColor == TowerComponent.Red) { ((GameScript)this.GetParent()).Sounds[SoundName.RedDrop].Play(); } else { if (tc.rarityColor == TowerComponent.Purple) { ((GameScript)this.GetParent()).Sounds[SoundName.PurpleDrop].Play(); } } Vector2 pos = positionOffsets[this.Rand.Next(positionOffsets.Count)]; positionOffsets.Remove(pos); tc.Position = this.Position + pos; genAny = true; this.GetParent().AddChild(tc); } } if (!genAny) { ((GameScript)this.GetParent()).coinValue += this.Value; int rm = (int)Math.Ceiling(this.Value / 250f); for (int i = 0; i < 5 + rm; ++i) { Vector2 basePos = this.Position + Vector2.Up.Rotated((float)(this.Rand.NextDouble() * Math.PI)) * (float)(this.Rand.NextDouble() * 9); CoinScript kb2d = (CoinScript)((GameScript)this.GetParent()).coin.Duplicate(); kb2d.Position = this.Position; kb2d.Visible = true; kb2d.Value = 1; this.GetParent().AddChild(kb2d); } } this.QueueFree(); }