예제 #1
0
        /// <summary>
        /// 根据单位id和所有者获得单位实例
        /// </summary>
        /// <param name="unitID"></param>
        /// <param name="owner"></param>
        /// <param name="damage"></param>
        /// <returns></returns>
        public GameObject GetGameUnit(string unitID, OwnerEnum owner, int damage = 0)
        {
            GameObject newUnit;

            //根据所有者选择不同的模板进行单位实例化
            switch (owner)
            {
            case (OwnerEnum.Enemy):
                newUnit = Instantiate(EnemyMould);
                break;

            case (OwnerEnum.Player):
                newUnit = Instantiate(FriendlyMould);
                break;

            default:
                newUnit = Instantiate(NeutralityMould);
                break;
            }

            //将生成的GameUnit传入数据库赋值初始化
            UnitDataBase.Instance().InitGameUnit(newUnit.GetComponent <GameUnit>(), unitID, owner, damage);

            return(newUnit);
        }
예제 #2
0
        /// <summary>
        /// 本函数本意是根据敌方控制战区数量情况确定胜负
        /// 若敌方控制所有战区,判定失败,敌方无控制战区,判定胜利
        /// </summary>
        public void CountEnemyControllingArea()
        {
            int enemyCountrolAreaAmount = 0;
            int allBattleAreaAmount     = 0;

            foreach (int areaID in _battleAreaDictionary.Keys)
            {
                int enemyAmount      = 0;
                int playerUnitAmount = 0;
                allBattleAreaAmount++;
                foreach (Vector2 pos in _battleAreaDictionary[areaID])
                {
                    OwnerEnum ownerEnum = BattleMap.BattleMap.Instance().GetMapblockBelong(pos);
                    if (ownerEnum == OwnerEnum.Player)
                    {
                        playerUnitAmount++;
                    }
                    else if (ownerEnum == OwnerEnum.Enemy)
                    {
                        enemyAmount++;
                    }
                }

                // 若战区内敌我单位数量一致
                if (playerUnitAmount == enemyAmount)
                {
                    // 若都为0,那就是中立战区,不影响战区所属判定,继续下一个判断
                    if (enemyAmount == 0)
                    {
                        continue;
                    }

                    // 若均不为0,说明处于争夺状态,则该战区属于敌方
                    enemyCountrolAreaAmount++;
                }
                // 我方单位数量比敌方少,该战区属于敌方单位
                else if (playerUnitAmount < enemyAmount)
                {
                    enemyCountrolAreaAmount++;
                }

                // 剩下的情况不影响结果,不检测了
                // if playerUnitAmount > enemyAmount
            }

            // 若敌方控制所有战区,则游戏失败,通知状态机
            if (allBattleAreaAmount == enemyCountrolAreaAmount)
            {
                Gameplay.Instance().roundProcessController.Lose();
                return;
            }

            // 若敌方无控制战区,则游戏胜利,通知状态机
            if (enemyCountrolAreaAmount == 0)
            {
                Gameplay.Instance().roundProcessController.Win();
            }
        }
예제 #3
0
 /// <summary>
 /// 对GameUnit进行数值初始化
 /// </summary>
 /// <param name="unit">被初始化的持有GameUnit的GameObject</param>
 /// <param name="id">要初始化的Unit的数据的ID</param>
 /// <param name="damage">这个角色是否出场就受伤</param>
 public void InitGameUnit(GameObject unit, string id, OwnerEnum owner, int damage = 0)
 {
     if (unit.GetComponent <Unit>() != null)
     {
         InitGameUnit(unit.GetComponent <Unit>(), id, owner, damage);
     }
     else
     {
         Debug.Log("In UnitDataBase: " + unit.name + " doesn't have GameUnit.Can;t be Initial.");
     }
 }
예제 #4
0
 public static OwnerEnum Opposite(OwnerEnum owner)
 {
     if (owner == OwnerEnum.Black)
     {
         return(OwnerEnum.White);
     }
     else if (owner == OwnerEnum.White)
     {
         return(OwnerEnum.Black);
     }
     else
     {
         return(OwnerEnum.None);
     }
 }
예제 #5
0
        public static void update()
        {
            if (Utils.current_line[0] == "update_map")
            {
                for (int i = 1; i < regions.Count; ++i)
                {
                    regions[i].owner            = OwnerEnum.Unknown;
                    regions[i].number_of_armies = 0;
                }

                for (int i = 1; i <= Utils.current_line.Length / 3; ++i)
                {
                    int region_id = Int32.Parse(Utils.current_line[i * 3 - 2]);

                    OwnerEnum owner = OwnerEnum.Unknown;
                    if (Utils.current_line[3 * i - 1] == GameSettings.my_name)
                    {
                        owner = OwnerEnum.Me;
                    }

                    else if (Utils.current_line[3 * i - 1] == GameSettings.enemy_name)
                    {
                        owner = OwnerEnum.Enemy;
                    }

                    else if (Utils.current_line[3 * i - 1] == "neutral")
                    {
                        owner = OwnerEnum.Neutral;
                    }

                    else
                    {
                        Utils.error_output("Error 9: " + Utils.current_line[3 * i - 1]);
                    }

                    int number_of_armies = Int32.Parse(Utils.current_line[i * 3]);

                    MapClass.regions[region_id].owner            = owner;
                    MapClass.regions[region_id].number_of_armies = number_of_armies;
                }
            }
            else
            {
                Utils.error_output("Error 10: " + Utils.current_line[0]);
            }
        }
예제 #6
0
        /// <summary>
        /// 实现返回GameObject的函数,GetInst(string id)
        /// </summary>
        /// <param name="id"></param>
        /// <param name="owner"></param>
        /// <param name="Damage"></param>
        /// <returns></returns>
        public GameObject GetInst(string unitId, OwnerEnum owner, int Damage = 0)
        {
            foreach (GameObject _unit in m_pool)
            {
                ///根据所有者不同选择对象,因为三种对象(友军,敌军,中立)身上的脚本可能不一样,这样可以节约一点写代码的时间
                ///注意这里其实比较危险,如果搜不到GameUnit的脚本是会报错中断的,不过我们可以保证他一定有这个脚本,所以在这里可以这么写
                if (_unit.GetComponent <GameUnit>().owner == owner)
                {
                    m_pool.Remove(_unit);
                    _unit.SetActive(true);
                    //从单位数据库将新单位初始化
                    UnitDataBase.Instance().InitGameUnit(_unit, unitId, owner, Damage);
                    return(_unit);
                }
            }

            //如果没有空余的对应类型的对象,就
            //从单位生成车间取得新单位实例
            return(GameUnitFactory.Instance().GetGameUnit(unitId, owner, Damage));
        }
예제 #7
0
    public static int GetSpriteId(TypeEnum type, OwnerEnum owner)
    {
        string spriteName;

        if (type == TypeEnum.Bread)
        {
            spriteName = "bread_bounce";
        }
        else if (type == TypeEnum.Void)
        {
            spriteName = "void";
        }
        else if (type == TypeEnum.Tile)
        {
            spriteName = "tile";
        }
        else
        {
            spriteName = type.ToString().ToLower() + ((int)owner).ToString();
        }
        return(GlobalInfo.Instance.storage.unitPrefab.GetComponent <tk2dAnimatedSprite>().GetClipIdByName(spriteName));
    }
예제 #8
0
        //角色初始化到地图上
        public static void InstantiationUnit(string cardID, OwnerEnum owner, BattleMapBlock battleMapBlock)
        {
            //根据卡牌id生成单位
            GameObject temp = GameUnitPool.Instance().GetInst(cardID, owner);
            //获取GameUnit对象
            GameUnit gameUnit = temp.GetComponent <GameUnit>();

            //添加当前实例单位到UnitList中
            BattleMap.BattleMap.Instance().UnitsList.Add(gameUnit);
            //添加当前实例单位的所在地图块儿
            gameUnit.mapBlockBelow = battleMapBlock;

            //添加gameUnit到units_on_me上,且修改单位的父级对象
            battleMapBlock.AddUnit(gameUnit);
            //修改单位的本地坐标系坐标
            temp.transform.localPosition = Vector3.zero;
            //修改单位卡图的射线拦截设置
            temp.GetComponent <Image>().raycastTarget = true;

            //TODO 暂时用Text标识血量,以后改为slider
            var hpTest = temp.transform.GetChild(0);

            hpTest.gameObject.SetActive(true);
            float hp         = (temp.GetComponent <GameUnit>().hp = temp.GetComponent <GameUnit>().hp);
            float hpDivMaxHp = hp / temp.GetComponent <GameUnit>().MaxHP * 100;

            //格式化血量的显示
            hpTest.GetComponent <Text>().text = string.Format("HP: {0}%", hpDivMaxHp);

            //单位部署相当于单位驻足地图块儿
            gameUnit.nextPos = gameUnit.CurPos;

            //挂载ShowRange脚本
            temp.AddComponent <GameGUI.ShowRange>();

            //部署成功
            Gameplay.Instance().bmbColliderManager.Fresh(gameUnit);
        }
예제 #9
0
 public EntitySaveData(OwnerEnum owner, ParentObjectNameEnum objectName, EntityStateEnum entityState, int maxLevel, int currentLevel, float maxHealthpoints, float currentHealthPoints, int buildCost, int buildTime, float armor, EntityActionStateEnum entityActionState, EntityBehaviourEnum entityBehaviour, float baseDamage, float movementSpeed, float viewDistance, float attackRange, float attackDelay, int foodValue, SoundHolder dieSoundHolder, SoundHolder fightSoundHolder, int experience)
 {
     this.owner               = owner;
     this.objectName          = objectName;
     this.entityState         = entityState;
     this.maxLevel            = maxLevel;
     this.currentLevel        = currentLevel;
     this.maxHealthpoints     = maxHealthpoints;
     this.currentHealthPoints = currentHealthPoints;
     this.buildCost           = buildCost;
     this.buildTime           = buildTime;
     this.armor               = armor;
     this.entityActionState   = entityActionState;
     this.entityBehaviour     = entityBehaviour;
     this.baseDamage          = baseDamage;
     this.movementSpeed       = movementSpeed;
     this.viewDistance        = viewDistance;
     this.attackRange         = attackRange;
     this.attackDelay         = attackDelay;
     this.foodValue           = foodValue;
     this.dieSoundHolder      = dieSoundHolder;
     this.fightSoundHolder    = fightSoundHolder;
     this.experience          = experience;
 }
예제 #10
0
    public void Initialize(UnitInfo info)
    {
        this.sprite = GetComponent <tk2dAnimatedSprite>();
        this.type   = info.type;
        this.owner  = info.owner;
        this.pos    = info.pos;

        setTransform(pos);
        setSpriteId(GetSpriteId(type, owner));

        if (IsSoldier(type))
        {
            transform.parent = GameObject.Find("soldier").transform;
        }
        else if (type == TypeEnum.Bread)
        {
            transform.parent = GameObject.Find("res").transform;
        }
        else if (type == TypeEnum.Tile)
        {
            transform.parent = GameObject.Find("tile").transform;
        }
        transform.localPosition = new Vector3(transform.localPosition.x, transform.localPosition.y, 0);
    }
예제 #11
0
    public void Initialize(UnitInfo info)
    {
        this.sprite = null;
        this.type   = info.type;
        this.owner  = info.owner;
        this.pos    = info.pos;

        setTransform(pos);
        setSprite(ArtManager.Instance.GetBattleCardGraphics(type, owner));

        if (IsSoldier(type))
        {
            transform.parent = GameObject.Find("soldier").transform;
        }
        else if (type == TypeEnum.Bread)
        {
            transform.parent = GameObject.Find("res").transform;
        }
        else if (type == TypeEnum.Tile)
        {
            transform.parent = GameObject.Find("tile").transform;
        }
        transform.localPosition = new Vector3(transform.localPosition.x, transform.localPosition.y, 0);
    }
예제 #12
0
        /// <summary>
        /// 对GameUnit进行数值初始化
        /// </summary>
        /// <param name="unit">被初始化的GameUnit引用</param>
        /// <param name="unitID">要初始化的Unit的数据的ID</param>
        /// <param name="damage">这个角色是否出场就受伤</param>
        public void InitGameUnit(Unit unit, string unitID, OwnerEnum owner, int damage = 0)
        {
            if (!_unitsData.ContainsKey(unitID))
            {
                Debug.Log("UnitDataBase is not contant " + unitID);
                return;
            }

            JsonData data = _unitsData[unitID];

            //先删除异能再初始化数值
            //初始化数值,记得和GameUnit的成员保持一致
            unit.owner    = owner;
            unit.atk      = int.Parse(data["Atk"].ToString());
            unit.id       = data["CardID"].ToString();
            unit.Color    = data["Color"][0].ToString();
            unit.Effort   = data["Effort"].ToString();
            unit.CD       = int.Parse(data["HasCD"].ToString());
            unit.MaxHP    = int.Parse(data["Hp"].ToString()); unit.hp = unit.MaxHP - damage;
            unit.id       = data["ID"].ToString();
            unit.mov      = int.Parse(data["Mov"].ToString());
            unit.name     = data["Name"].ToString();
            unit.priority = new List <int>();
            unit.priority.Add(int.Parse(data["Prt"].ToString()));
            unit.rng    = int.Parse(data["Rng"].ToString());
            unit.tag    = new List <string>();
            unit.events = new List <string>();

            int tagCount   = data["Tag"].Count;
            int eventCount = data["Event"].Count;

            for (int i = 0; i < Mathf.Max(tagCount, eventCount); i++)
            {
                if (i < tagCount && i < eventCount)
                {
                    unit.tag.Add(data["Tag"][i].ToString());
                    unit.events.Add(data["Event"][i].ToString());
                }
                else if (i < tagCount)
                {
                    unit.tag.Add(data["Tag"][i].ToString());
                }
                else if (i < eventCount)
                {
                    unit.events.Add(data["Event"][i].ToString());
                    Debug.Log("event" + unit.events[i]);
                }
            }

            unit.priSPD = 0;
            unit.priDS  = 0;
            unit.fly    = false;
            //unit.damaged = "" //不知道这什么玩意儿
            unit.disarm       = true;
            unit.restrain     = true;
            unit.armorRestore = 0;
            unit.armor        = 0;

            //最后初始化新异能
            AddGameUnitAbility(unit, data);
        }
예제 #13
0
 private Owner(OwnerEnum code)
 {
     this.codePlayer = code;
 }
예제 #14
0
 /// <summary>
 /// Initializes a new instance of the <see cref="EmbedSettingsTitle" /> class.
 /// </summary>
 /// <param name="name">How the embeddable player handles the video title.  Option descriptions:  * &#x60;hide&#x60; - The title is hidden.  * &#x60;show&#x60; - The title is shown.  (required).</param>
 /// <param name="owner">How the embeddable player handles the video owner&#39;s information.  Option descriptions:  * &#x60;hide&#x60; - The owner&#39;s information is hidden.  * &#x60;show&#x60; - The owner&#39;s information is shown.  (required).</param>
 /// <param name="portrait">How the embeddable player handles the video owner&#39;s portrait.  Option descriptions:  * &#x60;hide&#x60; - The owner&#39;s portrait is hidden  * &#x60;show&#x60; - The owner&#39;s portrait is shown.  (required).</param>
 public EmbedSettingsTitle(NameEnum name = default(NameEnum), OwnerEnum owner = default(OwnerEnum), PortraitEnum portrait = default(PortraitEnum))
 {
     this.Name     = name;
     this.Owner    = owner;
     this.Portrait = portrait;
 }
예제 #15
0
 public static int GetSpriteId(TypeEnum type, OwnerEnum owner)
 {
     string spriteName;
     if (type == TypeEnum.Bread)
         spriteName = "bread_bounce";
     else if (type == TypeEnum.Void)
         spriteName = "void";
     else if (type == TypeEnum.Tile)
         spriteName = "tile";
     else
         spriteName = type.ToString().ToLower() + ((int)owner).ToString();
     return GlobalInfo.Instance.storage.unitPrefab.GetComponent<tk2dAnimatedSprite>().GetClipIdByName(spriteName);
 }
예제 #16
0
    public void Initialize(UnitInfo info)
    {
        this.sprite = GetComponent<tk2dAnimatedSprite>();
        this.type = info.type;
        this.owner = info.owner;
        this.pos = info.pos;

        setTransform(pos);
        setSpriteId(GetSpriteId(type, owner));

        if (IsSoldier(type))
            transform.parent = GameObject.Find("soldier").transform;
        else if (type == TypeEnum.Bread)
            transform.parent = GameObject.Find("res").transform;
        else if (type == TypeEnum.Tile)
            transform.parent = GameObject.Find("tile").transform;
        transform.localPosition = new Vector3(transform.localPosition.x, transform.localPosition.y, 0);
    }