public override void DoEffect(BattleUnitData data, BattleUnitData todata, BattleData battle) { if (todata.UnitName == Values[1]) { data.DoDamger = (int)(data.DoDamger + int.Parse(Values[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(); }
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); } }
/// <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); }
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); } } } }
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; }
private void Awake() { battleUnitData = Instantiate(battleUnitDataToCopy); _transform = transform; _gameObject = gameObject; _deltaPosition = Vector3.zero; ray = new Ray(); effectPooler = ObjectPoolersHolder.Instance.EffectPooler; }
private void Awake() { battleUnitData = Instantiate(battleUnitDataToCopy); _transform = transform; _gameObject = gameObject; _deltaPosition = Vector3.zero; rayFWD = new Ray(); rayBWD = new Ray(); rayDistance = battleUnitData.speed * 0.02f; }
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); } }
private void Awake() { battleUnitData = Instantiate(battleUnitDataToCopy); _transform = transform; _gameObject = gameObject; _deltaPosition = Vector3.zero; targetData = new TargetData(null, null); isLaunched = false; effectPooler = ObjectPoolersHolder.Instance.EffectPooler; }
//選ばれているかチェック 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(); } }
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; } } }
/// <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(); } }
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(); }
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); } }
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(); }
/// <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(); }
//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)); }
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); } } }
public void SelectUnit(BattleUnitData _Data) { TeamDatas[1].SelectUnit(_Data); }
public abstract void DoEffect(BattleUnitData data, BattleUnitData todata, BattleData battle);