Ejemplo n.º 1
0
 protected void Start()
 {
     RangeDetector        = RangeDetector ?? GetComponentInChildren <TagDetector>();
     parentTowerComponent = parentTowerComponent ?? GetComponentInParent <TowerComponent>() ?? null;
     ParentTowerLegacy    = ParentTowerLegacy ?? GetComponentInParent <TowerControllerLegacy>() ?? null;
     ParentTowerSlot      = parentTowerSlot ?? GetComponentInParent <TowerSlotController>() ?? null;
 }
Ejemplo n.º 2
0
    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);
 }
Ejemplo n.º 4
0
 public void initBag()
 {
     for (int i = 0; i < 20; i++)
     {
         TowerComponent tc = GameStaticData.getInstance().getComponentInfo("c0" + (i % 6));
         bagComponents.Add(tc);
     }
 }
Ejemplo n.º 5
0
 public override bool NorthExecutionCondition(TowerComponent tc)
 {
     if (orbitalGunsController.OrbitalGuns.Count < tc.Data.orbitalData.maxNumberOfOrbitals)
     {
         return(true);
     }
     return(false);
 }
Ejemplo n.º 6
0
    public TowerComponent getComponentInfo(string cid)
    {
        TowerComponent data = null;

        if (!componentStaticInfo.TryGetValue(cid, out data))
        {
            data = componentStaticInfo ["c_default"];
        }
        return(data);
    }
Ejemplo n.º 7
0
    public int AutoFireToPosition(Vector3 position)
    {
        var tower = TowerComponent.AutoSelectToFire(position);

        if (tower == null)
        {
            return(-10);
        }
        tower.FireRocket(position);
        return(0);
    }
Ejemplo n.º 8
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);
        }
    }
Ejemplo n.º 9
0
    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);
    }
Ejemplo n.º 10
0
 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();
     }
 }
Ejemplo n.º 11
0
 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();
     }
 }
Ejemplo n.º 12
0
 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";
     }
 }
Ejemplo n.º 13
0
 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();
     }
 }
Ejemplo n.º 14
0
    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);
//		}
    }
Ejemplo n.º 15
0
//	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);
    }
Ejemplo n.º 16
0
 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";
     }
 }
Ejemplo n.º 17
0
    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;
            }
        }
    }
Ejemplo n.º 18
0
        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);
        }
Ejemplo n.º 19
0
    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;
    }
Ejemplo n.º 20
0
//	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);
    }
Ejemplo n.º 21
0
 public TowerItem(TowerComponent t)
     : base(ITEM_TOWER)
 {
     _tc = t;
 }
Ejemplo n.º 22
0
 public TowerItem(int i, float cost)
     : base(ITEM_TOWER)
 {
     _tc = ComponentGenerator.Get().GenerateComponent(i, cost);
 }
Ejemplo n.º 23
0
 /*
  *	Constructors
  */
 public TowerItem()
     : base(ITEM_TOWER)
 {
     _tc = ComponentGenerator.Get().GenerateComponent(Random.Range(0, BaseTower.TOWER_COMPLETE), 0);
 }
Ejemplo n.º 24
0
 public void SetAndShow(int idx, TowerComponent nowTc)
 {
     this.idx          = idx;
     this.nowComponent = nowTc;
     Show();
 }
Ejemplo n.º 25
0
    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);
 }
Ejemplo n.º 27
0
    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);
        }
    }
Ejemplo n.º 28
0
 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;
             }
         }
     }
 }
Ejemplo n.º 29
0
    public void gainComponent(string componentId)
    {
        TowerComponent tc = GameStaticData.getInstance().getComponentInfo(componentId);

        bagComponents.Add(tc);
    }
Ejemplo n.º 30
0
 public override bool SouthExecutionCondition(TowerComponent tc) {
     return true;
 }
Ejemplo n.º 31
0
 public override bool WestExecutionCondition(TowerComponent tc)
 {
     return(false);
 }
Ejemplo n.º 32
0
 public void AddTowerComponent(TowerComponent towerComponent)
 {
     TowerComponents.Add(componentCount, towerComponent);
     componentCount += 1;
 }
Ejemplo n.º 33
0
    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();
    }