public void SetCharacter(BattleCreature creature) { m_Creature = creature; string sprite_name = string.Format("cs_{0}", m_Creature.Info.ID); string new_sprite_name = "_cut_" + sprite_name; UISpriteData sp = m_Character.atlas.CloneCustomSprite(sprite_name, new_sprite_name); if (sp != null) { sp.height = sp.width; } m_Character.spriteName = new_sprite_name; if (m_Creature.Skills.Count > 1) { m_Skill1.spriteName = m_Creature.Skills[1].Info.IconID; } else { m_Skill1.gameObject.SetActive(false); } if (m_Creature.Skills.Count > 2) { m_Skill2.spriteName = m_Creature.Skills[2].Info.IconID; } else { m_Skill2.gameObject.SetActive(false); } }
public SkillTarget(SkillTargetContainer target_container, BattleSkill skill, ICreature target, int target_index) { this.target_container = target_container; this.Skill = skill; m_TargetIndex = target_index; m_Creature = target as BattleCreature; }
public override BattleActionResult execute(BattleCreature source, List <BattleCreature> targets, double amp, double hitChanceMultiplier, double alteredChanceForSecondary) { bool interactableTargets = false; int damageDealt = 0; List <BattleCreature> hit = new List <BattleCreature>(); foreach (BattleCreature target in targets) { if (target.isInteractable()) { interactableTargets = true; if (RandomUtils.checkOdds(chanceToHit * (1 + hitChanceMultiplier))) { double typeMultiplier = damageType.getDamageMultiplierVs(target.creature.getCreatureTypes()); int damage = DamageUtils.calculateDamage(basePower * typeMultiplier, source.creature.getStats(), target.creature.getStats()); damageDealt += damage; target.changeHealth(damage); hit.Add(target); } } } return(new DamageBattleActionResult(interactableTargets, targets.Count > 0, damageDealt, damageType, source, targets, hit)); }
protected void InitCreatures() { List <float> start_times = new List <float>(); for (int i = 0; i < characters.Count; ++i) { start_times.Add(i * 2f + Rand.NextRange(0f, BattleConfig.Instance.StartRange) * BattleConfig.Instance.AttackCoolTimeMax); } for (int i = 0; i < characters.Count; i++) { int start_time_index = Rand.NextRange(0, start_times.Count - 1); float start_time = start_times[start_time_index]; start_times.RemoveAt(start_time_index); BattleCreature creature = characters[i] as BattleCreature; creature.InitContainer(battle_layout.m_Mine.m_Characters[i]); if (UseRun == true) { var creature_tween = creature.Character.GetComponent <HFX_TweenSystem>(); creature_tween.Stop(); BattleBase.Instance.tween_system.Play("start_preset", null, creature_tween, creature.Character.transform); creature_tween.UpdatePlay(0f); } creature.Restart(start_time); } for (int i = 0; i < enemies.Count; ++i) { start_times.Add(i * 2f + Rand.NextRange(0f, BattleConfig.Instance.StartRange) * BattleConfig.Instance.AttackCoolTimeMax); } for (int i = 0; i < enemies.Count; ++i) { if (enemies[i] == null) { continue; } int start_time_index = Rand.NextRange(0, start_times.Count - 1); float start_time = start_times[start_time_index]; start_times.RemoveAt(start_time_index); BattleCreature creature = enemies[i] as BattleCreature; if (UseRun == true) { var creature_tween = creature.Character.GetComponent <HFX_TweenSystem>(); creature_tween.Stop(); BattleBase.Instance.tween_system.Play("start_preset", null, creature_tween, creature.Character.transform); creature_tween.UpdatePlay(0f); } creature.Restart(start_time); } }
public override void SetBattleEnd() { base.SetBattleEnd(); C2G.EndBattle _packet = new C2G.EndBattle(); _packet.battle_type = pe_Battle.Stage; _packet.end_type = pe_EndBattle.Win; _packet.difficulty = Network.BattleStageInfo.Difficulty; _packet.map_id = Network.BattleStageInfo.MapInfo.ID; _packet.stage_id = Network.BattleStageInfo.ID; _packet.creatures = new List <PacketInfo.pd_BattleEndCreatureInfo>(); //List<int> skill_indice = new List<int>(); for (int i = 0; i < m_TeamData.Creatures.Count; ++i) { Creature creature = m_TeamData.Creatures[i].creature; BattleCreature bc = characters.Find(c => c.Idx == creature.Idx) as BattleCreature; if (bc == null) { bc = dead_characters.Find(c => c.Idx == creature.Idx) as BattleCreature; } _packet.creatures.Add(new PacketInfo.pd_BattleEndCreatureInfo(bc.Idx, bc.IsDead)); m_TeamData.Creatures[i].auto_skill_index = bc.AutoSkillIndex; } _packet.team_data = m_TeamData.CreateSaveData(); Network.GameServer.JsonAsync <C2G.EndBattle, C2G.EndBattleAck>(_packet, OnEndBattleHandler); }
public override void SetBattleEnd() { base.SetBattleEnd(); C2G.EndWorldBoss _packet = new C2G.EndWorldBoss(); _packet.end_type = battleEndType; _packet.map_id = Network.BattleStageInfo.MapInfo.ID; _packet.score = m_BossHP.Creature.Stat.DealHP; //List<int> skill_indice = new List<int>(); for (int i = 0; i < m_TeamData.Creatures.Count; ++i) { Creature creature = m_TeamData.Creatures[i].creature; BattleCreature bc = characters.Find(c => c.Idx == creature.Idx) as BattleCreature; if (bc == null) { bc = dead_characters.Find(c => c.Idx == creature.Idx) as BattleCreature; } m_TeamData.Creatures[i].auto_skill_index = bc.AutoSkillIndex; } if (m_TeamData.IsEqual(m_TeamDataBackup) == false) { _packet.team_data = m_TeamData.CreateSaveData(); } Network.GameServer.JsonAsync <C2G.EndWorldBoss, C2G.EndWorldBossAck>(_packet, OnEndWorldBossHandler); }
protected override void Start() { m_TeamData = TeamDataManager.Instance.GetTeam(pe_Team.PVP); m_UILeaderSkill.Lock(Localization.Get("PVPOnlyAutoBattle")); base.Start(); #if SH_DEV m_btnWin.SetActive(true); #else m_btnWin.SetActive(Debug.isDebugBuild); #endif m_ProfileMine.UpdateProfile(Network.PlayerInfo.leader_creature, Network.PlayerInfo.nickname, Network.PlayerInfo.player_level); m_ProfileEnemy.UpdateProfile(Network.PVPBattleInfo.enemy_info.leader_creature, Network.PVPBattleInfo.enemy_info.nickname, Network.PVPBattleInfo.enemy_info.player_level); m_BG.material.mainTexture = AssetManager.LoadBG("000_pvp"); enemies = new List <ICreature>(); for (int i = 0; i < Network.PVPBattleInfo.enemy_team_data.Creatures.Count; ++i) { Creature creature = Network.PVPBattleInfo.enemy_team_data.Creatures[i].creature; BattleCreature battle_creature = new BattleCreature(creature, battle_layout.m_Enemy.m_Characters[i], 0f, character_hpbar_prefab, character_skill_prefab, false); battle_creature.AutoSkillIndex = Network.PVPBattleInfo.enemy_team_data.Creatures[i].auto_skill_index; if (creature.Idx == Network.PVPBattleInfo.enemy_team_data.LeaderCreatureIdx) { battle_creature.SetLeader(Network.PVPBattleInfo.enemy_team_data.UseLeaderSkillType, OnUseEnemyLeaderSkill); } enemies.Add(battle_creature); } InitCreatures(); SoundManager.Instance.PlayBGM("PVP"); }
public DamageBattleActionResult(bool succeeded, bool hadTargets, int damageDealt, CreatureType damageType, BattleCreature source, List <BattleCreature> targets, List <BattleCreature> targetsHit) : base(succeeded, hadTargets) { this.damageDealt = damageDealt; this.damageType = damageType; this.source = source; this.targets = targets; this.targets = targetsHit; }
public MoveContext(Move move, BattleCreature source, List <BattlefieldPosition> allies, List <BattlefieldPosition> enemies, List <BattlefieldPosition> targets) { this.move = move; this.source = source; this.allies = allies; this.enemies = enemies; this.targets = targets; }
public BattleActionContext(BattleAction action, BattleCreature source, List <BattleCreature> targets, double amp, double hitChanceMultiplier) { this.action = action; this.source = source; this.targets = targets; this.amp = amp; this.hitChanceMultiplier = hitChanceMultiplier; }
public bool place(BattleCreature creature, BattlefieldPosition position) { if (!positionExists(position)) { return(false); } positions[position] = creature; return(false); }
public override BattleActionResult execute(BattleCreature source, List <BattleCreature> targets, double amp, double hitChanceMultiplier, double alteredChanceForSecondary) { foreach (BattleAction ba in battleActions) { if (ba.execute(source, targets, amp, hitChanceMultiplier, alteredChanceForSecondary) != null) { return(null); } } return(null); }
public BattlefieldPosition getPosition(BattleCreature creature) { foreach (KeyValuePair <BattlefieldPosition, BattleCreature> pair in positions) { if (pair.Value.Equals(creature)) { return(pair.Key); } } return(null); }
public BattleCreature removeOccupant(BattlefieldPosition position) { if (!isOccupied(position)) { return(null); } BattleCreature oldOccupant = positions[position]; positions[position] = null; return(oldOccupant); }
public void Init(BattleCreature creature, bool use_hp_back = false) { Creature = creature; this.use_hp_back = use_hp_back; string sprite_name = string.Format("profile_{0}", Creature.Info.ID); m_Icon.spriteName = sprite_name; die_count = 0; SetHPBack(); gameObject.SetActive(true); }
public List <BattleCreature> getEnemies(BattleCreature bc) { List <BattleCreature> result = new List <BattleCreature>(); getActiveCreatures().ForEach(ac => { if (ac.owner.Equals(bc.owner)) { result.Add(ac); } }); return(result); }
public void swapPosition(int pos1, int pos2) { if (!(posExists(pos1) && posExists(pos2))) { throw new System.Exception("Cannot swap when positions are out of bounds"); } BattleCreature first = creatures[pos1]; BattleCreature second = creatures[pos2]; creatures[pos1] = second; creatures[pos2] = first; }
private async Task <List <MoveContext> > getPlayerCreatureMoveRequests() { //TODO properly implement //List<Pair<BattleCreature, Move>> moveReqs = new List<Pair<BattleCreature, Move>>(); List <BattleCreature> activeCreatures = positionManager.getActiveCreatures(); BattleCreature c = positionManager.getActiveCreatures()[0]; List <SelectButton <Move> > buttons = new List <SelectButton <Move> >(); c.getMoves().ForEach(m => { buttons.Add(SelectButton <Move> .create(m)); }); List <SelectButton <Move> > dblButtons = new List <SelectButton <Move> >(); dblButtons.AddRange(buttons); dblButtons.AddRange(buttons); Move move = await battleUIManager.getSelection <Move>(dblButtons, c.creature.creatureName + " move selection:"); List <BattleCreature> targets = new List <BattleCreature>(); switch (move.targetClass) { case TargetClass.ENEMY_SINGLE: break; case TargetClass.ALLY_SINGLE: break; case TargetClass.ALLY_ALL: break; case TargetClass.ENEMY_ALL: break; case TargetClass.ALL: break; } Debug.Log("Move selected: " + move.ToString()); MoveContext context = new MoveContext(move, c, null, null, null); return(new List <MoveContext> { context }); }
void EndWave() { if (IsLastWave) { base.SetBattleEnd(); SetBattleEndStage(); return; } WaveStartTime = 0f; IsBattleStart = false; float delay = 1.0f; var end_bundle = BattleBase.Instance.tween_system.GetBundle("end"); end_bundle.Delay = delay; foreach (var creature in characters) { BattleCreature battle_creature = creature as BattleCreature; battle_creature.Clear(); if (creature.IsDead == false) { end_bundle.Play(creature.Character.GetComponent <HFX_TweenSystem>(), creature.Character.transform, null, 1f); int heal = Mathf.RoundToInt(battle_creature.Stat.MaxHP * GameConfig.Get <float>("wave_heal")); if (heal > 0) { battle_creature.SetWaveHeal(heal); TextManager.Instance.PushHeal(battle_creature, heal, eTextPushType.Normal); } } } foreach (var creature in enemies) { if (creature != null) { (creature as BattleCreature).Clear(); if (creature.IsDead == false) { end_bundle.Play(creature.Character.GetComponent <HFX_TweenSystem>(), creature.Character.transform, null, 1f); } } } WaveEndTime = Time.time + 2f + delay; foreach (var creature in m_LightingCreatures) { creature.SetEnd(true); } }
public BattleSkill(SkillInfo info, BattleCreature creature, short skill_level) { this.Info = info; this.Creature = creature; Level = skill_level; foreach (SkillInfo.Action action in info.Actions) { if (action.IsDirect == false) { Duration = Mathf.Max(Duration, action.duration); } } }
protected override void Start() { m_TeamData = TeamDataManager.Instance.GetTeam(Network.BattleStageInfo.TeamID); m_TeamDataBackup = m_TeamData.Clone(); m_BossHP.m_Label.gameObject.SetActive(false); up_score.gameObject.SetActive(false); die_count.gameObject.SetActive(false); base.Start(); m_BG.material.mainTexture = AssetManager.LoadBG(Network.BattleStageInfo.BG_ID); enemies = new List <ICreature>(); List <MapCreatureInfo> enemy_infos = Network.BattleStageInfo.Waves[0].Creatures; for (int i = 0; i < enemy_infos.Count; ++i) { if (enemy_infos[i].CreatureInfo == null) { continue; } BattleCreature creature = new BattleCreature(enemy_infos[i], battle_layout.m_Enemy.m_Characters[i], 0f, character_hpbar_prefab, character_skill_prefab); enemies.Add(creature); } InitWorldBoss(); update_mana_creature_index = 0; update_mana_enemy_index = 0; battleEndType = pe_EndBattle.Invalid; IsBattleEnd = false; PlaybackTime = 0f; first_tick = 0; InitCreatures(); if (WorldBossInfo.Info != null) { BestScore.text = Localization.Format("WorldBossBestInBattle", WorldBossInfo.Info.score); } else { BestScore.text = Localization.Format("WorldBossBestInBattle", "-"); } SoundManager.Instance.PlayBGM("PVP"); }
public void testMoveManagerGetListOfHighestPrio() { Watchers testWatchers = new Watchers(); CreatureStats cs1 = new CreatureStats(1, 1, 1, 10); CreatureForm bf1 = new CreatureForm(new HashSet <CreatureType>(new CreatureType[] { CreatureType.VITAL }), null, null); FocusPoint f1 = new FocusPoint(null, null, null, null); FocalPoints fp1 = new FocalPoints(f1, f1, f1, f1); Creature c1 = new Creature(0, "", null, fp1, null, cs1, bf1, null); BattleCreature bc1 = new BattleCreature(c1, Owner.ALLY, testWatchers); CreatureStats cs2 = new CreatureStats(1, 1, 1, 20); CreatureForm bf2 = new CreatureForm(new HashSet <CreatureType>(new CreatureType[] { CreatureType.VITAL }), null, null); FocusPoint f2 = new FocusPoint(null, null, null, null); FocalPoints fp2 = new FocalPoints(f2, f2, f2, f2); Creature c2 = new Creature(0, "", null, fp2, null, cs2, bf2, null); BattleCreature bc2 = new BattleCreature(c2, Owner.ALLY, testWatchers); Move move1 = new Move(0, "TestMove1", "", Move.MoveClass.ATTACK, TargetClass.ENEMY_SINGLE, null, CreatureType.VITAL, 0, 0, 0); Move move2 = new Move(1, "TestMove2", "", Move.MoveClass.ATTACK, TargetClass.ENEMY_SINGLE, null, CreatureType.VITAL, 1, 0, 0); Move move3 = new Move(2, "TestMove3", "", Move.MoveClass.ATTACK, TargetClass.ENEMY_SINGLE, null, CreatureType.VITAL, -3, 0, 0); MoveContext context1 = new MoveContext(move1, bc1, null, null, null); MoveContext context2 = new MoveContext(move2, bc2, null, null, null); MoveContext context3 = new MoveContext(move3, bc1, null, null, null); MoveContext context4 = new MoveContext(move1, bc2, null, null, null); //bc2 moves faster than bc1 //Order of prio: move3, move1, move2 //Resulting move order should then be: context3, context4, context1, context2 HashSet <MoveContext> contexts = new HashSet <MoveContext>(new MoveContext[] { context1, context2, context3, context4 }); MoveManager moveManager = new MoveManager(null, null, contexts); MoveContext actual1 = moveManager.getNextMove(); MoveContext actual2 = moveManager.getNextMove(); Assert.That(moveManager.getMovesRemaining() == 2); Assert.That(moveManager.isTurnOver() == false); MoveContext actual3 = moveManager.getNextMove(); MoveContext actual4 = moveManager.getNextMove(); Assert.That(moveManager.getMovesRemaining() == 0); Assert.That(moveManager.isTurnOver()); Assert.That(actual1.Equals(context3)); Assert.That(actual2.Equals(context4)); Assert.That(actual3.Equals(context1)); Assert.That(actual4.Equals(context2)); }
public Buff(BattleCreature creature, BattleSkill skill, SkillInfo.Action action_info, int value, float duration, ISkillBuff parent) : base(duration) { Parent = parent; m_Creature = creature; Skill = skill; this.ActionInfo = action_info; switch (action_info.actionType) { case eActionType.dot_damage: case eActionType.dot_damage_mana: case eActionType.dot_heal: case eActionType.dot_heal_mana: this.Value = Mathf.RoundToInt(value / duration); break; default: this.Value = value; break; } this.StartTime = m_Creature.PlaybackTime; eBuffColorType buff_color = eBuffColorType.None; if (action_info.actionType == eActionType.shield && action_info.value > 0) { AffectValue = value; AffectValueMax = value; buff_color = eBuffColorType.Shield; } else { AffectValue = 1; AffectValueMax = 1; } if (skill != null && skill.Creature != null && IsMainBuff == true && skill.Info.ShowIcon == true) { if (buff_color != eBuffColorType.Shield) { buff_color = creature.IsTeam == skill.Creature.IsTeam ? eBuffColorType.Buff : eBuffColorType.DeBuff; } BuffContainer.Alloc(); BuffContainer.Asset.Init(Skill.Info.IconID, buff_color, Duration > 0f); BuffContainer.Asset.OnUpdate(0f, 1f); } }
public override BattleActionResult execute(BattleCreature source, List <BattleCreature> targets, double amp, double hitChanceMultiplier, double alteredChanceForSecondary) { bool anyInteractable = false; foreach (BattleCreature bc in targets) { anyInteractable |= bc.isInteractable(); if (bc.isInteractable()) { bc.changeFocus(focusChange); } } return(new BattleActionResult(anyInteractable, anyInteractable)); }
public void CheckManaFill(BattleCreature creature) { if (creature.IsTeam) { if (update_mana_creature_index != -1 && characters[update_mana_creature_index] == creature) { creature.IsManaFill = false; NextCreature(true); } } else { if (update_mana_enemy_index != -1 && enemies[update_mana_enemy_index] == creature) { creature.IsManaFill = false; NextCreature(false); } } }
public void Init(BattleCreature creature, bool reverse, float scale) { m_Creature = creature; m_Scale = scale; m_MP.fillAmount = 0f; transform.localScale = Vector3.one * scale; if (reverse == true) { m_HP.fillOrigin = (int)Image.OriginHorizontal.Right; m_HPDanger.fillOrigin = (int)Image.OriginHorizontal.Right; m_MP.fillOrigin = (int)Image.OriginHorizontal.Right; m_ManaFill.transform.parent.localScale = new Vector3(-1f, 1f, 1f); } else { m_ManaFill.transform.parent.localScale = Vector3.one; } }
void SetBattleEndStage() { C2G.EndBattle _packet = new C2G.EndBattle(); _packet.battle_type = pe_Battle.Stage; _packet.end_type = battleEndType; _packet.difficulty = Network.BattleStageInfo.Difficulty; _packet.map_id = Network.BattleStageInfo.MapInfo.ID; _packet.stage_id = Network.BattleStageInfo.ID; _packet.creatures = new List <PacketInfo.pd_BattleEndCreatureInfo>(); _packet.is_new_clear = MapClearDataManager.Instance.IsNewClear(Network.BattleStageInfo); //List<int> skill_indice = new List<int>(); for (int i = 0; i < m_TeamData.Creatures.Count; ++i) { Creature creature = m_TeamData.Creatures[i].creature; BattleCreature bc = characters.Find(c => c.Idx == creature.Idx) as BattleCreature; if (bc == null) { bc = dead_characters.Find(c => c.Idx == creature.Idx) as BattleCreature; } _packet.creatures.Add(new PacketInfo.pd_BattleEndCreatureInfo(bc.Idx, bc.IsDead)); m_TeamData.Creatures[i].auto_skill_index = bc.AutoSkillIndex; } if (m_TeamData.IsEqual(m_TeamDataBackup) == false || Tutorial.Instance.Completed == false) { _packet.team_data = m_TeamData.CreateSaveData(); } if (Tutorial.Instance.Completed == false) { C2G.TutorialState tutorial_packet = new C2G.TutorialState(); tutorial_packet.tutorial_state = Network.PlayerInfo.tutorial_state; tutorial_packet.next_tutorial_state = (short)Tutorial.Instance.CurrentState; tutorial_packet.end_battle = _packet; Network.GameServer.JsonAsync <C2G.TutorialState, C2G.TutorialStateAck>(tutorial_packet, OnTutorialEndBattleHandler); } else { Network.GameServer.JsonAsync <C2G.EndBattle, C2G.EndBattleAck>(_packet, OnEndBattleHandler); } }
public void setup(Pair <int, int> battlefieldSize, Team team1, Team team2) { this.battleUIManager = battleUIManager; this.positionManager = new BattlefieldPositionManager(battlefieldSize.getFirst(), battlefieldSize.getSecond()); this.battleUIManager.setup(positionManager); this.battleUIManager.setShowCreatureUi(true); this.watchers = new Watchers(); this.actionResolver = new BattleActionResolver(watchers.battleActionWatcher, battleUIManager); this.team1 = new BattleTeam(team1, Owner.PLAYER, watchers); this.team2 = new BattleTeam(team2, Owner.COMPUTER, watchers); BattleCreature testCreature1 = new BattleCreature(team1.getCreatures()[0], Owner.PLAYER, watchers); BattleCreature testCreature2 = new BattleCreature(team2.getCreatures()[0], Owner.COMPUTER, watchers); this.positionManager.place(testCreature1, new BattlefieldPosition(1, BattlefieldPosition.PositionType.PRIMARY, 0)); this.currentTurnPhase = 0; beginBattleLoop(); }
void NextCreature(bool is_team) { int count_limit = 5; int next_creature_index = is_team ? update_mana_creature_index:update_mana_enemy_index; List <ICreature> targets = is_team ? characters : enemies; while (true && count_limit-- > 0) { ++next_creature_index; if (next_creature_index >= targets.Count) { next_creature_index = 0; } BattleCreature creature = targets[next_creature_index] as BattleCreature; if (creature != null && creature.IsDead == false && creature.IsPlayingSkill == false && creature.IsMPFull == false) { creature.IsManaFill = true; if (is_team) { update_mana_creature_index = next_creature_index; } else { update_mana_enemy_index = next_creature_index; } return; } } if (is_team) { update_mana_creature_index = -1; } else { update_mana_enemy_index = -1; } }
protected override void Start() { m_TeamData = TeamDataManager.Instance.GetTeam(Network.BattleStageInfo.TeamID); base.Start(); m_BG.material.mainTexture = AssetManager.LoadBG(Network.BattleStageInfo.BG_ID); enemies = new List <ICreature>(); List <MapCreatureInfo> enemy_infos = Network.BattleStageInfo.Waves[0].Creatures; for (int i = 0; i < enemy_infos.Count; ++i) { if (enemy_infos[i].CreatureInfo == null) { continue; } BattleCreature creature = new BattleCreature(enemy_infos[i], battle_layout.m_Enemy.m_Characters[i], 0f, character_hpbar_prefab, character_skill_prefab); enemies.Add(creature); } InitRaid(); update_mana_creature_index = 0; update_mana_enemy_index = 0; battleEndType = pe_EndBattle.Invalid; IsBattleEnd = false; PlaybackTime = 0f; first_tick = 0; InitCreatures(); SoundManager.Instance.PlayBGM("PVP"); }