Пример #1
0
 public override void DoEffect(BattleUnitData data, BattleUnitData todata, BattleData battle)
 {
     if (todata.UnitName == Values[1])
     {
         data.DoDamger = (int)(data.DoDamger + int.Parse(Values[0]));
     }
 }
Пример #2
0
    public void SetData(BattleUnitData bud)
    {
        mID   = bud.mID;
        mType = bud.mType;
        mHp   = mMaxHp = bud.mMaxHp;
        mEn   = mMaxEn = bud.mMaxEn;
        mAmmo = mMaxAmmo = bud.mMaxAmmo;

        mAtk         = bud.mAtk;
        mAtkType     = bud.mAtkType;
        mAtkInterval = bud.mAtkInterval;
        mAtkRange    = bud.mAtkRange;
        mDef         = bud.mDef;
        mDefType     = bud.mDefType;

        mRps = bud.mRps;

        mHealPs    = bud.mHealPs;
        mHealType  = bud.mHealType;
        mHealRange = bud.mHealRange;

        mEnCostPs   = bud.mEnCostPs;
        mAmmoCostPs = bud.mAmmoCostPs;

        mPlayerForce  = bud.mPlayerForce;
        mMoveInterval = bud.mMoveInterval;
        mSpreadFactor = bud.mSpreadFactor;
        ReCountBE();
    }
Пример #3
0
    public static void LoadData()
    {
        SqliteDataReader reader = LocalDatabase.Instance.ReadFullTable("simulation");

        s_tblBattleUnitData = new List <BattleUnitData>();
        while (reader.Read())
        {
            BattleUnitData bud = new BattleUnitData();
            bud.mID           = Convert.ToInt32(reader.GetString(reader.GetOrdinal("ID")));
            bud.mName         = reader.GetString(reader.GetOrdinal("Name"));
            bud.mPerfabPath   = reader.GetString(reader.GetOrdinal("PerfabPath"));
            bud.mType         = Convert.ToInt32(reader.GetString(reader.GetOrdinal("Type")));
            bud.mMaxHp        = Convert.ToSingle(reader.GetString(reader.GetOrdinal("MaxHP")));
            bud.mAtk          = Convert.ToSingle(reader.GetString(reader.GetOrdinal("Atk")));
            bud.mAtkType      = Convert.ToInt32(reader.GetString(reader.GetOrdinal("Atk_T")));
            bud.mDef          = Convert.ToSingle(reader.GetString(reader.GetOrdinal("Def")));
            bud.mDefType      = Convert.ToInt32(reader.GetString(reader.GetOrdinal("Def_T")));
            bud.mAtkInterval  = Convert.ToSingle(reader.GetString(reader.GetOrdinal("Atk_P")));
            bud.mAtkRange     = (EffectRange)Convert.ToInt32(reader.GetString(reader.GetOrdinal("AtkRange")));
            bud.mRps          = Convert.ToSingle(reader.GetString(reader.GetOrdinal("RPS")));
            bud.mHealPs       = Convert.ToSingle(reader.GetString(reader.GetOrdinal("HealPS")));
            bud.mHealType     = Convert.ToInt32(reader.GetString(reader.GetOrdinal("Heal_T")));
            bud.mHealRange    = (EffectRange)Convert.ToInt32(reader.GetString(reader.GetOrdinal("HealRange")));
            bud.mMaxEn        = Convert.ToSingle(reader.GetString(reader.GetOrdinal("EN")));
            bud.mMaxAmmo      = Convert.ToSingle(reader.GetString(reader.GetOrdinal("Ammo")));
            bud.mEnCostPs     = Convert.ToSingle(reader.GetString(reader.GetOrdinal("EnCostPS")));
            bud.mAmmoCostPs   = Convert.ToSingle(reader.GetString(reader.GetOrdinal("AmmoCost")));
            bud.mPlayerForce  = (Convert.ToInt32(reader.GetString(reader.GetOrdinal("PlaterForce"))) != 0);
            bud.mMoveInterval = Convert.ToSingle(reader.GetString(reader.GetOrdinal("MoveInt")));
            bud.mSpreadFactor = Convert.ToSingle(reader.GetString(reader.GetOrdinal("SpreadFac")));
            s_tblBattleUnitData.Add(bud);
        }
    }
Пример #4
0
    /// <summary>덱 추가</summary>
    /// <param name="_AddData">추가할 유닛 데이터</param>
    public void AddDeck(BattleUnitData _AddData)
    {
        Debug.Log("<color=lime>AddDeck</color>  " + _AddData.Index + " / " + _AddData.UnitID + " / " + _AddData.Name);

        //해당 슬롯에 이미 다른 덱이 있는지 체크(UI)
        //SlotUnitInfoScript _BeforeSlot2 = tr_DeckSlots[_AddData.Index].GetComponent<SlotUnitInfoScript>();
        SlotUnitInfoScript _BeforeSlot = list_CurrentDeckCards.Find(r => r.UnitIndex == _AddData.Index);

        if (_BeforeSlot != null)
        {
            RemoveDeck(_BeforeSlot);
        }
        //else
        //    Debug.LogError("RemoveDeck 없음");

        SlotUnitInfoScript _slot = list_HaveCards.Find(r => r.UnitId == _AddData.UnitID);

        _slot.IsEquipedDeck = true;
        _slot._slotType     = eUnitSlotType.DeckCard;
        _slot.SetSlotIndex(_AddData.Index);
        GameUtil.MoveToParent(_slot.gameObject, tr_DeckSlots[_AddData.Index]);
        _slot.lb_Cost.text = _AddData.Index.ToString();

        //현재 등록덱 리스트에 추가
        list_CurrentDeckCards.Add(_slot);

        SaveDataManagerScript.Instance.MyDecks.AddDeck(CurrentDeckIndex, _AddData);
    }
Пример #5
0
    public void CreateUnit(int deckIdx)
    {
        UserUnitData userUnitData = Test();
        //userUnitData = userUnitDataArray[deckIdx];

        UnitData unitData = new UnitData();

        unitData.Init(userUnitData.name, userUnitData.headPart, userUnitData.leftWeponPart, userUnitData.rightWeponPart, userUnitData.legPart);

        //モデルローダーなんぞないのでテストで固定物でやる
        var h     = CreateModel(head);
        var lw    = CreateModel(left);
        var rw    = CreateModel(right);
        var l     = CreateModel(leg);
        var c     = CreateCoreModel(core);
        var trans = PartsConnectionFunction.ConnectPartModels(c, h, lw, rw, l);

        BattleUnitData battleUnitData = new BattleUnitData();

        battleUnitData.isAlive  = true;
        battleUnitData.trans    = trans;
        battleUnitData.unitData = unitData;

        unitList.Add(battleUnitData);
    }
    public void SetDistentDamger(TeamAttackingData[,] team_attack_datas)
    {
        //玩家对敌人调整距离伤害
        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                if (team_attack_datas[i, j] == null)
                {
                    continue;
                }
                int  locIndex   = i; //当前队伍编号
                int  locToIndex = j; //当前敌方队伍编号
                bool isToteam   = false;
                Army army       = Player.army;
                TeamAttackingData[] toTeamAttackingData = new TeamAttackingData[3];

                for (int ic = 0; ic < 3; ic++)
                {
                    toTeamAttackingData[ic] = team_attack_datas[locIndex, ic];
                }

                foreach (var item in team_attack_datas[locIndex, locToIndex].UnitAttackingDatas)
                {
                    BattleUnitData unitData = item.data;
                    BattleTools.DealWithDistent(unitData, locIndex, locToIndex, toTeamAttackingData, army, isToteam);
                }
            }
        }

        //敌人对玩家调整距离伤害
        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                if (team_attack_datas[j, i] == null)
                {
                    continue;
                }
                int  locIndex   = i; //当前队伍编号
                int  locToIndex = j; //当前敌方队伍编号
                bool isToteam   = true;
                Army army       = Enemy.army;
                TeamAttackingData[] toTeamAttackingData = new TeamAttackingData[3];

                for (int ic = 0; ic < 3; ic++)
                {
                    toTeamAttackingData[ic] = team_attack_datas[ic, locIndex];
                }

                foreach (var item in team_attack_datas[locToIndex, locIndex].UnitAttackingDatas)
                {
                    BattleUnitData unitData = item.toData;
                    BattleTools.DealWithDistent(unitData, locIndex, locToIndex, toTeamAttackingData, army, isToteam);
                }
            }
        }
    }
Пример #7
0
 public void ChangeUnitEquipMode(BattleUnitData _Unitdata)
 {
     _State = eDeckManagerState.Equipmode;
     sc.ResetPosition();
     gr_Havecards.gameObject.SetActive(false);
     tr_selectmode.gameObject.SetActive(true);
     selectedSlot.SetData(_Unitdata, eUnitSlotType.SelectTargetSlot);
     selectedSlot.IsFreeze = true;
 }
Пример #8
0
 private void Awake()
 {
     battleUnitData = Instantiate(battleUnitDataToCopy);
     _transform     = transform;
     _gameObject    = gameObject;
     _deltaPosition = Vector3.zero;
     ray            = new Ray();
     effectPooler   = ObjectPoolersHolder.Instance.EffectPooler;
 }
Пример #9
0
 private void Awake()
 {
     battleUnitData = Instantiate(battleUnitDataToCopy);
     _transform     = transform;
     _gameObject    = gameObject;
     _deltaPosition = Vector3.zero;
     rayFWD         = new Ray();
     rayBWD         = new Ray();
     rayDistance    = battleUnitData.speed * 0.02f;
 }
Пример #10
0
 public void DoBuff(BattleUnitData data, BattleUnitData todata, BattleData battle, EffectTimeType time)
 {
     foreach (var buff in Setting.buff)
     {
         if (buff == null)
         {
             continue;
         }
         buff.DoBuff(data, todata, battle, time);
     }
 }
Пример #11
0
    private void Awake()
    {
        battleUnitData = Instantiate(battleUnitDataToCopy);

        _transform     = transform;
        _gameObject    = gameObject;
        _deltaPosition = Vector3.zero;
        targetData     = new TargetData(null, null);
        isLaunched     = false;
        effectPooler   = ObjectPoolersHolder.Instance.EffectPooler;
    }
Пример #12
0
 //選ばれているかチェック
 public void SelectUnitFromPosition(System.Func <Vector3, bool> checkFunction)
 {
     for (int i = 0; i < unitList.Count; i++)
     {
         BattleUnitData data = unitList[i];
         if (data.isAlive)
         {
             data.isSelection = checkFunction(data.trans.position);
         }
     }
 }
 /// <summary>덱 리스트에 유닛 제거</summary>
 public void RemoveDeck(int _Index, BattleUnitData _Data)
 {
     //동일 아이디가 리스트에 있을때만 제거
     //if (data[_Index].Exists(r => r.UnitID == _Data.UnitID))
     if (ExistsDeck(_Index, _Data))
     {
         Debug.LogError("RemoveDeck : " + _Index + " / " + _Data.Index + " / " + _Data.Name);
         BattleUnitData _removeUnit = data[_Index].Find(r => r.UnitID == _Data.UnitID);
         data[_Index].Remove(_removeUnit);
         Save();
     }
 }
Пример #14
0
        public void CreatEnemyMode()
        {
            Dictionary <int, List <BattleUnit> > entityList = new Dictionary <int, List <BattleUnit> >();

            foreach (BattleUnit enemy in mUnInstantiateEnemy)
            {
                if (entityList.ContainsKey(enemy.mID))
                {
                    entityList[enemy.mID].Add(enemy);
                }
                else
                {
                    entityList[enemy.mID] = new List <BattleUnit>();
                    entityList[enemy.mID].Add(enemy);
                }
            }

            foreach (int enemyID in entityList.Keys)
            {
                if (mParent.CanCreateModeNum() > 0)
                {
                    BattleUnitData bud = BattleUnitData.GetBattleUnitData(enemyID);

                    //just use befor monster creatfunction finished
                    int count = (entityList[enemyID].Count <= mParent.CanCreateModeNum())
                                                                        ? entityList[enemyID].Count : mParent.CanCreateModeNum();

                    for (int i = 0; i < count; i++)
                    {
                        string[] strList = bud.mPerfabPath.Split(',');

                        GameObject obj = GameObject.Instantiate(Resources.Load(strList[1])) as GameObject;
                        obj.transform.parent   = mParent.transform;
                        obj.transform.position = GetSaveCreatePos();
                        obj.transform.rotation = Quaternion.identity;
                        mParent.CreatMode(obj.GetComponent <BattleUnit>());

                        //AiMonster aimonster = obj.GetComponent<AiMonster>();
                        //if(aimonster)
                        //    aimonster.life = (int)entityList[enemyID][i].mHp;

                        mUnInstantiateEnemy.Remove(entityList[enemyID][i]);
                        GameObject.Destroy(entityList[enemyID][i].gameObject);
                    }
                    //test end
                }
                else
                {
                    break;
                }
            }
        }
Пример #15
0
    /// <summary>유닛에 빈 정보 세팅</summary>
    public void SetEmptySlot(int _Index = 0)
    {
        _slotType        = eUnitSlotType.EmptySlot;
        _Unitdata        = new BattleUnitData();
        _Unitdata.Index  = _Index;
        lb_position.text = string.Empty;

        IsEquipedDeck           = false;
        tx_UnitIcon.mainTexture = null;
        lb_Unitname.text        = string.Empty;
        lb_HaveCount.text       = string.Empty;
        lb_Cost.text            = string.Empty;
        RefreshControllButton();
    }
        /// <summary>덱 리스트에 유닛 추가</summary>
        public void AddDeck(int _Index, BattleUnitData _Data)
        {
            //if (data[_Index].Count >= MAXIMUM_DECKLISTCOUNT)
            //{
            //    Debug.LogError("8개 이상의 덱이 추가됨");
            //    return;
            //}

            //동일 아이디가 리스트에 없을때만 추가
            if (data[_Index].Exists(r => r.UnitID == _Data.UnitID) == false)
            {
                data[_Index].Add(_Data);
                Save();
            }
        }
Пример #17
0
    public void SetData(BattleUnitData _Data)
    {
        UnitData = _Data;
        TableUnit UnitBaseData = UnityDataConnector.Instance.m_TableData_Unit.GetUnitData(_Data.UnitID);
        Object    res          = AssetLoadScript.Instance.Get(eAssetType.Texture, string.Format("Unit_{0}", _Data.UnitID));

        if (res != null)
        {
            //string _IconTexturePath = string.Format("/Texture/UnitCard/Unit_{0}", _data.UnitID);
            tx_unitIcon.mainTexture = (Texture2D)res;
        }

        //lb_cost.text = UnitBaseData.Cost.ToString();
        lb_cost.text = UnitBaseData.Index.ToString();
    }
Пример #18
0
 public void DoBuff(BattleUnitData data, BattleUnitData todata, BattleData battle, EffectTimeType time)
 {
     foreach (var item in effects)
     {
         if (item == null)
         {
             continue;
         }
         if (item.TimeType != time)
         {
             continue;
         }
         item.DoEffect(data, todata, battle);
     }
 }
Пример #19
0
 public void SelectUnit(BattleUnitData _DeckData)
 {
     //Current_SelectedBattleDeck = Dic_BattleDecks[SelectedBattleDeckIndex][_DeckIndex];
     try
     {
         //Current_SelectedBattleDeck = BattleDeckDataList_.Find(r => r.Index == _DeckIndex);
         Current_SelectedBattleDeck = _DeckData;
         SelectedUnitID             = Current_SelectedBattleDeck.UnitID;
         Debug.LogError("SelectUnit : " + Current_SelectedBattleDeck.UnitID);
     }
     catch (System.Exception e)
     {
         Debug.LogError(e.ToString());
         throw;
     }
 }
        /// <summary>테스트 카드 넣기</summary>
        public void InsertCard_Test(int _index, int _id)
        {
            if (Data.Exists(r => r.UnitID == _id))
            {
                return;
            }

            //Debug.LogError("InsertCard_Test : " + _id);

            BattleUnitData _data = new BattleUnitData();

            _data.Index      = _index;
            _data.UnitID     = _id;
            _data.Level      = 1;
            _data.CardCount  = 1;
            _data.IsFindCard = true;
            Data.Add(_data);
            Save();
        }
Пример #21
0
    /// <summary>슬롯에 유닛 정보 세팅</summary>
    public void SetData(BattleUnitData _data, eUnitSlotType _sType)
    {
        _slotType        = _sType;
        IsEquipedDeck    = false;
        _Unitdata        = _data;
        lb_position.text = (_Unitdata.Index == -1) ? string.Empty : ((eBattlePosition)_Unitdata.Index).ToString();
        UnitBaseData     = UnityDataConnector.Instance.m_TableData_Unit.GetUnitData(_data.UnitID);
        Object res = AssetLoadScript.Instance.Get(eAssetType.Texture, string.Format("Unit_{0}", _data.UnitID));

        if (res != null)
        {
            //string _IconTexturePath = string.Format("/Texture/UnitCard/Unit_{0}", _data.UnitID);
            tx_UnitIcon.mainTexture = (Texture2D)res;
        }

        lb_Unitname.text  = UnitBaseData.UnitName;
        lb_HaveCount.text = _Unitdata.CardCount.ToString();
        lb_Cost.text      = UnitBaseData.Cost.ToString();
        RefreshControllButton();
    }
Пример #22
0
        //Recount BattleUnit num in this Area.Called in Init and the time when player go to other Area
        public void RecountBattleUnit()
        {
            mDefenderList.Clear();

            //List<DragItemMgr.Item> drawItemList = DragItemMgr.Instance.GetItemList();

            //foreach(DragItemMgr.Item item in drawItemList)
            //{
            //    BattleUnit defender = item.itemScript.GetComponent<BattleUnit>();
            //    if(defender && mBounds.Contains(defender.transform.position))
            //    {
            //        mDefenderList.Add(defender);
            //        AiMonster tow = item.itemScript.GetComponent<AiMonster>();
            //        if(tow)
            //            defender.mHp = tow.life;
            //    }
            //}

            List <BattleUnit> showModelEnemies = mParent.mCurrentShowMode;

            for (int i = showModelEnemies.Count - 1; i >= 0; i--)
            {
                if (showModelEnemies[i])               //enemy aready dead but not remove yet
                {
                    if (mBounds.Contains(showModelEnemies[i].transform.position))
                    {
                        BattleUnit createBU = MonoBehaviour.Instantiate(mParent.mPerfab) as BattleUnit;
                        createBU.SetData(BattleUnitData.GetBattleUnitData(showModelEnemies[i].mID));
                        //AiMonster monster = showModelEnemies[i].GetComponent<AiMonster>();
                        //if(monster)
                        //    createBU.mHp = monster.life;
                        //else
                        //    createBU.mHp = showModelEnemies[i].mHp;
                        GameObject.Destroy(showModelEnemies[i].gameObject);
                        showModelEnemies.RemoveAt(i);
                        mEnemyList.Add(createBU);
                    }
                }
            }
        }
    public static void DealWithDistent(BattleUnitData unitData, int locIndex, int locToIndex, TeamAttackingData[] toTeamAttackingData, Army army, bool isToteam)
    {
        int around = unitData.Unit.Setting.AttackRange - locIndex;

        for (int c = 0; c < around && c < 3; c++) //大于四队时可能会发生错误
        {
            if (toTeamAttackingData[c] == null)   //跳过敌方空队伍
            {
                around++;
            }
        }

        for (int c = 0; c < locIndex; c++) //跳过己方空队伍
        {
            if (army.team[c] == null || army.team[c].GetSummary().UnitCount == 0 || army.team[c].GetSummary().Count == 0)
            {
                around++;
            }
        }

        if (locToIndex + 1 > around) //距离不够置空伤害
        {
            unitData.DoDamger = 0;
            return;
        }
        if (around <= 0)
        {
            unitData.DoDamger = 0;
            return;
        }
        else if (around == 1)
        {
            return;
        }

        around = Mathf.Clamp(around, 0, 2);
        //float damger = unitData.DoDamger;F
        List <TeamAttackingData> list = new List <TeamAttackingData>();

        for (int c = 0; c < around; c++)  //获取攻击范围内队伍
        {
            if (toTeamAttackingData[c] != null)
            {
                list.Add(toTeamAttackingData[c]);
            }
        }

        if (list.Count <= 1)
        {
            return;
        }

        unitData.DoDamger = (int)(unitData.DoDamger / list.Count); //应当向上或下取整  伤害由范围内的队伍平均分担

        // int unitCount = 0;   //伤害根据敌方人数平均分担
        // foreach (var team in list)
        //     if (!isToteam)
        //         unitCount += team.ToTeam_dic.Count;
        //     else
        //         unitCount += team.Team_dic.Count;
        //unitData.DoDamger = (int)(unitData.DoDamger * ((float)team_attack_datas[i, j].ToTeam_dic.Count / (float)unitCount)); //应当向上或下取整
    }
 /// <summary>해당 인덱스의 덱에 이미 저장된 덱이 존재하는가?</summary>
 /// <param name="_Index">덱인덱스</param>
 /// <param name="_Data">배틀유닛데이터</param>
 public bool ExistsDeck(int _Index, BattleUnitData _Data)
 {
     return(data[_Index].Exists(r => r.UnitID == _Data.UnitID));
 }
Пример #25
0
    void GeneratNewEnemy()
    {
        mReadyEnemyNum += mEnemyRecoverPS * mUpdateInterval;

        mGenPassTime += Time.deltaTime;

        if (mGenPassTime >= mGenInterval)
        {
            int generatNum = 0;

            if (mReadyEnemyNum >= mFreeEnemyNum)
            {
                generatNum    = mFreeEnemyNum;
                mFreeEnemyNum = 0;
            }
            else if (mReadyEnemyNum >= mEnemyGeneratedMax)
            {
                generatNum     = mEnemyGeneratedMax;
                mFreeEnemyNum -= generatNum;
            }
            else if (mReadyEnemyNum >= mEnemyGeneratedMin)
            {
                generatNum     = (int)(mFreeEnemyNum - mReadyEnemyNum);
                mFreeEnemyNum -= generatNum;
            }
            else             // don't generat anything
            {
                return;
            }

            // if generat enemies reset mGenPassTime
            mGenPassTime -= mGenInterval;

            float totalForce = 0;
            for (int i = 0; i < mBorderlineArea.Count; i++)
            {
                totalForce += 1f / mBorderlineArea[i].mDefenderForce;
            }
            float random     = UnityEngine.Random.Range(0f, 1f);
            int   areaIndex  = 0;
            float currentSum = 0;
            for (int i = 0; i < mBorderlineArea.Count; i++)
            {
                if (currentSum < random && currentSum + 1f / mBorderlineArea[i].mDefenderForce / totalForce >= random)
                {
                    areaIndex = i;
                    break;
                }
                else
                {
                    currentSum += 1f / mBorderlineArea[i].mDefenderForce / totalForce;
                }
            }

            int sumP = 0;
            int hitP = 0;
            for (int i = 0; i < mGenEnemyP.Count; i++)
            {
                sumP += mGenEnemyP[i];
            }

            Dictionary <int, int> generatEnemies = new Dictionary <int, int>();

            for (int i = 0; i < generatNum; i++)
            {
                hitP       = UnityEngine.Random.Range(0, sumP);
                currentSum = 0;

                for (int j = 0; j < mGenEnemyP.Count; j++)
                {
                    if (currentSum <= hitP && currentSum + mGenEnemyP[j] > hitP)
                    {
                        if (generatEnemies.ContainsKey(j))
                        {
                            generatEnemies[j]++;
                        }
                        else
                        {
                            generatEnemies[j] = 1;
                        }
                        break;
                    }
                    else
                    {
                        currentSum += mGenEnemyP[j];
                    }
                }
            }

            //
            foreach (int enmyIndex in generatEnemies.Keys)
            {
                BattleUnit bU = MonoBehaviour.Instantiate(mPerfab) as BattleUnit;
                bU.transform.parent = transform;
                bU.gameObject.SetActive(false);
                bU.SetData(BattleUnitData.GetBattleUnitData(mGenEnemyID[enmyIndex]));
                mBorderlineArea[areaIndex].AddBattleUnit(bU);
            }
        }
    }
Пример #26
0
 public void SelectUnit(BattleUnitData _Data)
 {
     TeamDatas[1].SelectUnit(_Data);
 }
 public abstract void DoEffect(BattleUnitData data, BattleUnitData todata, BattleData battle);