示例#1
0
    //leftdirection = 1, right direction = 2;
    bool Convert(TowerEntity pickTowerEntity, int direction)
    {
        //Get allowance
        bool allowance = pickTowerEntity.ConvertJudge();

        if (allowance)
        {
            if (pickTowerEntity.gameObject.GetComponent <AttackTowerEntity>() != null)
            {
                AttackTowerEntity t = pickTowerEntity.gameObject.GetComponent <AttackTowerEntity>();
                t.convertDirection = direction;
            }
            else if (pickTowerEntity.gameObject.GetComponent <DefenceTowerEntity>() != null)
            {
                DefenceTowerEntity t = pickTowerEntity.gameObject.GetComponent <DefenceTowerEntity>();
                t.convertDirection = direction;
            }
            else if (pickTowerEntity.gameObject.GetComponent <ProductionTowerEntity>() != null)
            {
                ProductionTowerEntity t = pickTowerEntity.gameObject.GetComponent <ProductionTowerEntity>();
                t.convertDirection = direction;
            }
        }
        return(allowance);
    }
示例#2
0
 public void DT()
 {
     if (selectTypeHandler == 1 && pickTower != null)
     {
         TowerEntity t = pickTower.gameObject.GetComponent <TowerEntity>();
         if (t.SelfDestruction() == true)
         {
             if (this.money > data.deconstructionCost)
             {
                 if (pickTower != null)
                 {
                     TestPack.DestoryOwnTower(pickTower);
                 }
                 DestroyTowerShape(pickTower);
                 selectTypeHandler = 0;
                 this.money       -= data.deconstructionCost;
             }
             else
             {
                 Debug.Log("Not enough money to deconstruct!");
             }
         }
         else
         {
             Debug.Log("Not allowed to deconstruct!");
         }
     }
     else
     {
         Debug.Log("No tower selected.");
     }
 }
示例#3
0
        public void GetWhoCanSeeMe_UpdateTracking(TowerEntity ent, HashSet <Session> listeners)
        {
            var currentZone = this.worldData.towerZones[ent.WorldPos];

            GetWhosListeningHere(currentZone, listeners);

            if (!ent.LastTrackedWorldPos.HasValue || ent.LastTrackedWorldPos.Value != ent.WorldPos)
            {
                Dj.Tempf("Changed position");
                if (ent.LastTrackedWorldPos.HasValue)
                {
                    var previousZone = this.worldData.towerZones[ent.LastTrackedWorldPos.Value];
                    GetWhosListeningHere(previousZone, listeners);
                }
                foreach (var session in listeners)
                {
                    if (session.EntityId == ent.EntityId)
                    {
                        link.Post(session.PeerId,
                                  ServeStory.op, new ServeStory(currentZone));
                    }
                }

                ent.LastTrackedWorldPos = ent.WorldPos; // now, update LastTrackedWorldPos.

                this.worldData.entitiesById[ent.EntityId] = ent;
            }
        }
    /// <summary>
    /// Handles placing, building, and cost of towers
    /// </summary>
    /// <param name="tower">The tower to build</param>
    public void BuildTower(TowerEntity tower)
    {
        Debug.Log("Building tower " + tower.Cost);
        if (GameMaster.instance.HasMoney(tower.Cost))
        {
            Debug.Log("Building tower 2");
            if (toBuild != null)
            {
                if (!toBuild.CancelMove())
                {
                    Destroy(toBuild.gameObject);
                }
                else
                {
                    // Cannot cancel building the current building!
                    return;
                }
            }

            Debug.Log("Building tower 3");
            leftHeld         = false;
            toBuild          = Instantiate(tower);
            toBuild.curState = PlaceableEntity.State.MOVING;
        }
    }
示例#5
0
    /// <summary>
    /// Called before a tower is upgraded
    /// </summary>
    /// <param name="tower"></param>
    public void BuyUpgrade(TowerEntity tower)
    {
        this.tower = tower; // Save the tower here for use in OnAttack() or OnHit() if required

        int cost = GetCost();

        if (GameMaster.instance.SpendMoney(cost))
        {
            tower.AddCost(cost);

            tower.ApplyUpgrade(this);

            GameMaster.instance.stats.upgradesApplied += 1;
            GameMaster.instance.stats.upgradesCost    += cost;

            if (level < maxLevel - 1)
            {
                level += 1;
            }
            else
            {
                tower.RemoveUpgrade(this); // Remove upgrade to prevent the upgrade from being bought twice
            }
        }
    }
示例#6
0
    public void Initialise(TowerEntity tower, float range)
    {
        attachedTower = tower;
        scale         = attachedTower.transform.localScale;

        SetRange(range);
    }
示例#7
0
    public void Setup(TowerEntity tower, Upgrade upgrade)
    {
        this.tower   = tower;
        this.upgrade = upgrade;

        // set upgrade name and cost
        cost      = upgrade.GetCost();
        text.text = upgrade.ToString() + "\n$" + cost;
    }
示例#8
0
        TowerEntity NewEnt(string codename = "e")
        {
            int EntityId = nextEntId++;
            var ent      = new TowerEntity(codename + "/" + EntityId);

            ent.EntityId = EntityId;
            ent.WorldPos = twin.zero;
            ent.Position = twin.zero;
            return(ent);
        }
示例#9
0
 public static void Setup(TowerEntity tower)
 {
     if (active)
     {
         active = false;
         TowerPanel.tower.CloseUI();
     }
     TowerPanel.tower        = tower;
     instance.towerName.text = tower.name;
     Show();
     UpdateUpgrades();
 }
示例#10
0
 public void CC()
 {
     if (selectTypeHandler == 1 && pickTower != null)
     {
         TowerEntity pickTowerEntity = pickTower.gameObject.GetComponent <TowerEntity>();
         Convert(pickTowerEntity, 2);
         //bool allwance = Convert(pickTowerEntity, 2);
         //if (allwance)
         //    selectTypeHandler = 0;
     }
     else
     {
         Debug.Log("No tower selected.");
     }
 }
示例#11
0
    public void DestroyTowerShape(TowerShape pickTower)
    {
        if (towerShapes.Count > 0)
        {
            //int index = Random.Range(0, towerShapes.Count);
            int index = towerShapes.FindIndex(a => a.SerialId == pickTower.SerialId);
            //
            foreach (Enemy enemy in enemies)
            {
                if (pickTower.GetComponent <DefenceTowerEntity>() != null)
                {
                    enemy.isLock = false;
                }
            }
            //

            // release cell
            TowerEntity t = pickTower.gameObject.GetComponent <TowerEntity>();
            t.cell.available = true;
            if (t.linkTowers.Count > 0)
            {
                t.solidificationLinkCells[0].available = true;
                t.solidificationLinkCells[1].available = true;
            }

            towerShapeFactory.Reclaim(towerShapes[index]);
            //Switch the index of selected and last one
            int lastIndex = towerShapes.Count - 1;
            towerShapes[index] = towerShapes[lastIndex];
            towerShapes.RemoveAt(lastIndex);
            TestPack.TowerNum(towerShapes);

            //Disable selected outline
            //highLightObj.gameObject.SetActive(false);
            //selectedObject.GetComponent<MeshRenderer>().material = previousMaterial;
            //selectedObject = null;
            highLightObj.gameObject.SetActive(false);
            for (int i = 0; i < enemies.Count; i++)
            {
                SearchAndGo(enemies[i]);
            }
        }
        else
        {
            Debug.Log("No tower in pools to destroy!");
        }
    }
示例#12
0
    void CreateTowerShape(int towerId, HexCell buildRegion, int initState, float healthFactor = 1)
    {
        TowerShape  instance = towerShapeFactory.Get(towerId, towerId);
        Transform   t        = instance.transform;
        TowerEntity e        = instance.gameObject.GetComponent <TowerEntity>();

        e.health = (int)(e.maxHealth * healthFactor);

        if (buildRegion == null)
        {
            Debug.LogError("No cell found?");
        }
        else
        {
            e.cell                = buildRegion;
            buildPosition         = HexCoordinates.FromCoordinate(buildRegion.coordinates);
            instance.coordinates  = buildRegion.coordinates;
            buildRegion.available = false;
        }

        //Care if move the root of prefabs to ground
        t.localPosition = buildPosition;
        if (t.localScale.y >= 6)
        {
            t.localScale /= data.factorScale;
        }

        //Create link if production tower
        //if(towerId == 2)
        //      mapManager.hexGrid.CreatePowerLinkToCell(
        //       instance.gameObject.GetComponent<ProductionTowerEntity>());

        towerShapes.Add(instance);
        TestPack.TowerNum(towerShapes);

        instance.GetComponent <TowerEntity>().state = initState;

        for (int i = 0; i < enemies.Count; i++)
        {
            SearchAndGo(enemies[i]);
        }
    }
    public void ReadDataFromJSON()
    {
        var info     = new DirectoryInfo(Application.streamingAssetsPath);
        var fileInfo = info.GetFiles();

        foreach (FileInfo file in fileInfo)
        {
            string[] parsedFilePath = file.ToString().Split(char.Parse("."));
            if (parsedFilePath[parsedFilePath.Length - 1] == "meta")
            {
                continue;
            }

            jsonString = File.ReadAllText(file.ToString());

            TowerEntity newEntity = JsonUtility.FromJson <TowerEntity>(jsonString);

            towerEntities.Add(newEntity);
        }
    }
示例#14
0
    public bool CheckSurroundings()
    {
        bool allowance = false;

        Collider[]         surroundingTowers = Physics.OverlapSphere(this.transform.localPosition, data.cellLength, LayerMask.GetMask("Tower"));
        List <TowerEntity> tmpList           = new List <TowerEntity>();

        foreach (Collider tower in surroundingTowers)
        {
            TowerEntity t = tower.gameObject.GetComponentInParent <TowerEntity>();
            if (t.state == 1 && t != this)
            {
                tmpList.Add(t);
            }
        }
        for (int i = 0; i < tmpList.Count; i++)
        {
            for (int j = i + 1; j < tmpList.Count; j++)
            {
                if (Vector3.Distance(tmpList[i].transform.localPosition, tmpList[j].transform.localPosition) <= data.cellLength + 0.3f &&
                    tmpList[i].towerType == this.towerType && tmpList[j].towerType == this.towerType
                    )
                {
                    this.linkTowers.Add(tmpList[i]); this.solidificationLinkCells.Add(tmpList[i].cell);
                    this.linkTowers.Add(tmpList[j]); this.solidificationLinkCells.Add(tmpList[j].cell);
                }
            }
        }

        if (this.linkTowers.Count >= 2)
        {
            allowance = true;
        }

        return(allowance);
    }
示例#15
0
        void BuyTowerMenuEntrySelected(object sender, PlayerIndexEventArgs e)
        {
            if (Tile_Engine.SelectedTile.IsBlocked == false &&
                Tile_Engine.SelectedTile.DrawEntityList.Count() == 1 &&
                this.player_CurrentGold >= TowerEntity.GoldCost &&
                this.player_CurrentEnergy >= TowerEntity.EnergyCost)
            {
                Tile_Engine.PlayerEntity.Gold -= TowerEntity.GoldCost;
                Tile_Engine.PlayerEntity.Energy -= TowerEntity.EnergyCost;

                TowerEntity entity = new TowerEntity(Tile_Engine.SelectedTile,
                    towerTexture,
                    Color.White,
                    true);

                entity.Texture_Bullet = content.Load<Texture2D>("mob_Bullet_Green_0");

                Tile_Engine.SelectedTile.AddEntity(entity);
            }
        }
示例#16
0
        private void Start()
        {
            link     = GetComponent <ClientsideLink>();
            sessions = new ClientsideSessions(link);
            link.AttemptConnection(success =>
            {
                if (success)
                {
                    sessions.DoLogin("droqen");
                }
                else
                {
                    Dj.Warnf("Login failed. TODO: Implement retry");
                }
            });
            sessions.AddStoryfan(Session.OPCODE, new LambdaStoryfan <Session>(session =>
            {
                if (currentSession == null || currentSession.Username != session.Username)
                {
                    currentSession = session;
                    link.Post <OK>(RequestStories.OPCODE, new RequestStories {
                        message = "Hello from " + currentSession.Username,
                    },
                                   reply =>
                    {
                    },
                                   failStatus =>
                    {
                        Dj.Tempf("RequestStories rejected with status {0}. Recommended to either request again, or disconnect.", failStatus);
                    });
                }

                Dj.Tempf("My session says my name is '{0}'", currentSession.Username);
            }));

            sessions.AddStoryfan(TowerZone.OPCODE, new LambdaStoryfan <TowerZone>(zone =>
            {
                currentZone = zone;

                visibleEntities.Clear();
            }));

            sessions.AddStoryfan(TowerEntity.OPCODE, new LambdaStoryfan <TowerEntity>(ent =>
            {
                bool its_me = false;
                try
                {
                    if (currentSession.EntityId == ent.EntityId)
                    {
                        myEntity = ent;
                        its_me   = true;
                    }
                }
                catch { }

                if (!its_me)
                {
                    if (ent.WorldPos == currentZone.WorldPos)
                    {
                        visibleEntities.Add(ent);
                    }
                    else
                    {
                        visibleEntities.Remove(ent);
                    }
                }
            }));

            sessions.PushStorydecoder(new TowerStoryDecoder());
        }
示例#17
0
 private void Start()
 {
     towerEntity              = GetComponent <TowerEntity>();
     entityTracker            = GetComponent <EntityTracker>();
     entityTracker.targetTeam = GameManager.instance.currentGame.GetTarget(towerEntity.owner);
 }
 public override void Fire(Transform target)
 {
     base.Fire(target);
     tower = (TowerEntity)source;
 }
示例#19
0
        private void powerShow(Message msg)
        {
            if (msg.OpCode == OPCODE.NotifyInfo)
            {
                var seq = msg.NotifyInfo.Sequence;
                if (seq > 0)
                {
                    object      retParam = MessagePackDecoder <object>(msg.NotifyInfo.RpcParams);
                    TowerChange tc       = JsonConvert.DeserializeObject <TowerChange>(retParam.ToString());

                    switch (tc.OptType)
                    {
                    case OptionType.UPDATE_TOWER:
                        if (tc.towernum >= 0)
                        {
                            GameManager.gm.setEnemyTowerCount(tc.towernum);
                        }    //TODO:与UI势力条绑定
                        break;

                    case OptionType.TOWER_CHANGE:


                        if (tc.ti != null)
                        {
                            Vector3 createEnemyPosition = new Vector3();
                            createEnemyPosition.x = tc.ti.x;
                            createEnemyPosition.y = tc.ti.y;
                            createEnemyPosition.z = tc.ti.z;
                            var a = new GameObject();
                            a.AddComponent <MonsterMake>().SetData(tc.ti.shapeid, createEnemyPosition, OptionType.TOWER_CHANGE);
                        }
                        break;

                    case OptionType.DESTORY_TOWER:
                        if (tc.ti != null)
                        {
                            Vector3 CreateEnemyPosition = new Vector3();
                            CreateEnemyPosition.x = tc.ti.x;
                            CreateEnemyPosition.y = tc.ti.y;
                            CreateEnemyPosition.z = tc.ti.z;
                            var a = new GameObject();
                            a.AddComponent <MonsterMake>().SetData(tc.ti.shapeid, CreateEnemyPosition, OptionType.DESTORY_TOWER);
                        }
                        break;

                    case OptionType.SCAN:
                        TowerChange st = new TowerChange();
                        foreach (TowerShape towerShape in GameManager.gm.towerShapes)
                        {
                            TowerInfo temp = new TowerInfo(towerShape.ShapeId, towerShape.transform.localPosition.x, towerShape.transform.localPosition.y, towerShape.transform.localPosition.z);
                            st.a.Add(temp);
                        }
                        st.OptType = OptionType.SCAN_MAKE;
                        rpcCall("combat.get_tower_num", JsonConvert.SerializeObject(st), null);
                        break;

                    case OptionType.SCAN_MAKE:    //fetch行为
                        if (tc.a.Count > 0)
                        {
                            foreach (TowerInfo tif in tc.a)
                            {
                                Vector3 v = new Vector3();
                                v.x  = tif.x;
                                v.y  = tif.y;
                                v.z  = tif.z;
                                v.x += 1200f;
                                TowerShape  ts = Instantiate(TowerShapeFactory.tsf.prefabs[tif.shapeid], v, Quaternion.identity);
                                TowerEntity te = ts.gameObject.GetComponent <TowerEntity>();
                                Destroy(te);
                                Destroy(ts.gameObject, 4f);
                            }
                        }
                        break;

                    case OptionType.GAME_OVER:
                        if (tc.result == "false")
                        {
                            Debug.Log("Game Over");
                            TowerChange uw = new TowerChange();
                            uw.result  = "true";
                            uw.OptType = OptionType.GAME_OVER;
                            rpcCall("combat.get_tower_num", JsonConvert.SerializeObject(uw), null);
                            //SceneManager.LoadScene("LoseScene");
                            sceneLoader.LoadScene("WinScene");
                        }
                        else if (tc.result == "true")
                        {
                            //Debug.Log("You Win");
                            //SceneManager.LoadScene("WinScene");
                            sceneLoader.LoadScene("LoseScene");
                        }
                        break;
                    }
                }
            }
        }