예제 #1
0
    void Start()
    {
        /* Reserve for Sence logic*/
        gm                = this;
        data              = Data.GlobalData;
        towerShapes       = new List <TowerShape>();
        enemies           = new List <Enemy>();
        pickTower         = null;
        pickRegion        = null;
        selectTypeHandler = 0;
        buildPosition     = Vector3.zero;

        datas1  = data.s1;
        datas2  = data.s2;
        datas3  = data.s3;
        counts1 = data.count1;
        counts2 = data.count2;

        highLightObj = GameObject.CreatePrimitive(PrimitiveType.Sphere).GetComponent <Transform>();
        Destroy(highLightObj.GetComponent <Collider>());
        highLightObj.GetComponent <MeshRenderer>().material = Resources.Load <Material>("Materials/MapMaterials/Silhouette");
        highLightObj.gameObject.SetActive(false);
        selectedMaterial = Resources.Load <Material>("Materials/MapMaterials/Glow");

        mapButton.SetActive(false);
        towerButton1.SetActive(false);
        towerButton2.SetActive(false);

        /*Game Data*/
        money           = data.startMoney; //start money for player
        enemyTowerCount = 0;
        enemySceneTimer = 0f;
    }
예제 #2
0
    void SolidificateTowerShape(TowerShape pickTower)
    {
        if (pickTower != null && pickTower.IsSolidificated == false)
        {
            bool allowance = false;

            if (pickTower.gameObject.GetComponent <AttackTowerEntity>() != null)
            {
                AttackTowerEntity tmp = pickTower.gameObject.GetComponent <AttackTowerEntity>();
                allowance = tmp.Solidification();
            }
            else if (pickTower.gameObject.GetComponent <DefenceTowerEntity>() != null)
            {
                DefenceTowerEntity tmp = pickTower.gameObject.GetComponent <DefenceTowerEntity>();
                allowance = tmp.Solidification();
            }
            else if (pickTower.gameObject.GetComponent <ProductionTowerEntity>() != null)
            {
                ProductionTowerEntity tmp = pickTower.gameObject.GetComponent <ProductionTowerEntity>();
                allowance = tmp.Solidification();
            }
            if (allowance)
            {
                TestPack.TowerChange(pickTower);
                pickTower.IsSolidificated = true;
                this.money -= data.solidificateCost;
            }
        }
        else
        {
            Debug.Log("Tower already solidificreate AttackTowered");
        }
    }
예제 #3
0
파일: TestPack.cs 프로젝트: sextance/TDemo
    //自爆塔
    public static void DestoryOwnTower(TowerShape towershape)
    {
        TowerChange dot = new TowerChange();

        dot.ti      = new TowerInfo(towershape.ShapeId, towershape.transform.localPosition.x, towershape.transform.localPosition.y, towershape.transform.localPosition.z);
        dot.OptType = OptionType.DESTORY_TOWER;
        LoginRequist.ucl.rpcCall("combat.get_tower_num", JsonConvert.SerializeObject(dot), null);
    }
예제 #4
0
파일: TestPack.cs 프로젝트: sextance/TDemo
    //塔固化时调用,发送固化塔的类型与位置
    public static void TowerChange(TowerShape towershape)
    {
        TowerChange tch = new TowerChange();

        tch.ti      = new TowerInfo(towershape.ShapeId, towershape.transform.localPosition.x, towershape.transform.localPosition.y, towershape.transform.localPosition.z);
        tch.OptType = OptionType.TOWER_CHANGE;
        LoginRequist.ucl.rpcCall("combat.get_tower_num", JsonConvert.SerializeObject(tch), null);
    }
예제 #5
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!");
        }
    }
예제 #6
0
    //Put destroyed tower back to factory
    public void Reclaim(TowerShape shapeToRecycle)
    {
        if (recycle)
        {
            if (pools == null)
                CreatePools();
            pools[shapeToRecycle.ShapeId].Add(shapeToRecycle);

            if( shapeToRecycle.gameObject.GetComponent<TowerEntity>().isSolidicated == true)
            {
                Transform t = shapeToRecycle.transform;
                t.localScale /= Data.GlobalData.factorScale;
            }

            shapeToRecycle.gameObject.SetActive(false);
        } else {
            Destroy(shapeToRecycle.gameObject);
        }
    }
예제 #7
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]);
        }
    }
예제 #8
0
    public void ConvertTo(TowerShape origin, string targetName, float healthFactor)
    {
        if (origin == null)
        {
            Debug.LogError("No Tower found to convert!");
        }

        HexCell cell = origin.gameObject.GetComponent <TowerEntity>().cell;

        if (cell == null)
        {
            Debug.LogError("?");
        }
        DestroyTowerShape(origin);

        if (targetName == "AttackTower")
        {
            CreateTowerShape(0, cell, 3, healthFactor);
            for (int i = 0; i < enemies.Count; i++)
            {
                SearchAndGo(enemies[i]);
            }
        }
        else if (targetName == "DefenceTower")
        {
            CreateTowerShape(1, cell, 3, healthFactor);
            for (int i = 0; i < enemies.Count; i++)
            {
                SearchAndGo(enemies[i]);
            }
        }
        else if (targetName == "ProductionTower")
        {
            CreateTowerShape(2, cell, 3, healthFactor);
            for (int i = 0; i < enemies.Count; i++)
            {
                SearchAndGo(enemies[i]);
            }
        }
    }
예제 #9
0
    void MobilePick()
    {
        RaycastHit hit;
        Ray        ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position);

        //Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        mapButton.SetActive(false);
        towerButton1.SetActive(false);
        towerButton2.SetActive(false);
        if (Physics.Raycast(ray, out hit))
        {
            if (hit.transform.tag == "Untagged") //any non-interactive objects
            {
                selectTypeHandler = 0;
            }
            else if (hit.transform.tag == "Tower")
            {
                pickTower = hit.transform.parent.GetComponent <TowerShape>();
                if (pickTower.gameObject.GetComponent <AttackTowerEntity>() != null)
                {
                    convertText1.text = "转守";
                    convertText2.text = "转费";
                }
                else if (pickTower.gameObject.GetComponent <DefenceTowerEntity>() != null)
                {
                    convertText1.text = "转费";
                    convertText2.text = "转攻";
                }
                else if (pickTower.gameObject.GetComponent <ProductionTowerEntity>() != null)
                {
                    convertText1.text = "转攻";
                    convertText2.text = "转守";
                }
                Debug.Log("hit:" + hit.collider.gameObject.name);
                selectTypeHandler = 1;
                //Selected effect
                if (!selectedObject || selectedObject != hit.transform)
                {
                    if (selectedObject)
                    {
                        selectedObject.GetComponent <MeshRenderer>().material = previousMaterial;
                    }
                    selectedObject   = hit.transform.gameObject;
                    previousMaterial = selectedObject.GetComponent <MeshRenderer>().material;
                    selectedObject.GetComponent <MeshRenderer>().material = selectedMaterial;
                    highLightObj.position   = hit.transform.position;
                    highLightObj.rotation   = hit.transform.rotation;
                    highLightObj.localScale = hit.transform.localScale;
                    highLightObj.GetComponent <MeshFilter>().mesh = hit.collider.GetComponent <MeshFilter>().mesh;
                    highLightObj.gameObject.SetActive(true);
                }
                towerButton1.SetActive(true);
                towerButton2.SetActive(false);
            }
            else if (hit.transform.tag == "Map")
            {
                pickRegion = hit.collider.GetComponent <HexCell>();
                Debug.Log("hit:" + hit.collider.gameObject.name);
                if (pickRegion.available == true)
                {
                    //buildPosition = HexCoordinates.FromCoordinate(instance.coordinates);
                    Debug.Log("hit: map");
                    selectTypeHandler = 2;
                    if (!selectedObject || selectedObject.name != hit.transform.name)
                    {
                        if (selectedObject)
                        {
                            selectedObject.GetComponent <MeshRenderer>().material = previousMaterial;
                        }
                        selectedObject   = hit.transform.gameObject;
                        previousMaterial = selectedObject.GetComponent <MeshRenderer>().material;
                        selectedObject.GetComponent <MeshRenderer>().material = selectedMaterial;
                        highLightObj.position   = hit.transform.position;
                        highLightObj.rotation   = hit.transform.rotation;
                        highLightObj.localScale = hit.transform.localScale;
                        highLightObj.GetComponent <MeshFilter>().mesh = hit.collider.GetComponent <MeshFilter>().mesh;
                        highLightObj.gameObject.SetActive(true);
                    }
                    mapButton.SetActive(true);
                }
                else
                {
                    Debug.Log("Region already accupied by a tower!");
                }
            }
            /*Reserve for other object*/
        }
        else
        {
            Debug.Log("hit: nothing");
            if (selectedObject)
            {
                highLightObj.gameObject.SetActive(false);
                selectedObject.GetComponent <MeshRenderer>().material = previousMaterial;
                selectedObject = null;
            }
        }
    }
예제 #10
0
파일: UsrClient.cs 프로젝트: sextance/TDemo
        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;
                    }
                }
            }
        }