public void spellTo(BattleAgent target) { for (int i = 0; i < getEffects().Count; i++) { IEffect effect = getEffects () [i]; effect.cast (target); } }
/// <summary> /// Initializes a new instance of the <see cref="AttackMessage"/> class. /// </summary> /// <param name="sender">施法者</param> /// <param name="targets">攻击目标</param> /// <param name="spellId">技能</param> public AttackMessage(BattleAgent sender, List<BattleAgent> targets, int skillId, CooldownType type) { this.Sender = sender; this.Targets = targets; this.SkillId = skillId; this.CooldownType = type; }
public BattleSkillAction(BattleAgent agent, Skill skill, BattleManhattanDistanceZone target, float power, float spcost, float hpcost) { Agent = agent; Skill = skill; Target = target; Power = power; SPCost = spcost; HPCost = hpcost; }
public override BattleMenu Construct(BattleAgent agent, Dictionary <string, object> selections) { string rangeType, targetType; GetRangeAndTarget(agent, selections, out rangeType, out targetType); BattleManhattanDistanceZone range = Skill.GetRange(rangeType, agent); BattleManhattanDistanceZone target = Skill.GetTarget(targetType, agent, range); return(new BattleTargetSelectMenu(id, range, target)); }
/// <summary> /// 初始化默认声音 /// </summary> override public void AddSoundDemo() { BattleAgent.BaseSprite.AddSound(StateId.Attack, "hm_action_attack_01"); BattleAgent.BaseSprite.AddSound(StateId.Ult, "hm_action_ult_01"); BattleAgent.BaseSprite.AddSound(StateId.Dead, "dead_hm"); BattleAgent.AddTimerDemo(new float[] { 1.5f, 6.0f }); this.BattleAgent.AddSkillDemo(CooldownType.Attack, SkillData.testData [2]); this.BattleAgent.AddSkillDemo(CooldownType.Ult, SkillData.testData [20004]); }
BattleAgent RandomizeTarget(int _skillRange) { int randomizador = Random.Range(0, _skillRange); randomizador = Mathf.Clamp(randomizador, 0, BattleManager.instance.heroParty.Count); BattleAgent target = BattleManager.instance.heroParty [randomizador]; return(target); }
/// <summary> /// battleID:战场ID /// formationIdx:编队ID /// </summary> /// <param name="battleID"></param> /// <param name="formationIdx"></param> public BattleData( int battleID, int formationIdx ) { _battle = new BattleAgent(); _battle.setData(battleID); // 编队的容器 _formationList = new List<FormationData>(); addAllFormation(formationIdx); }
public BattleAction Construct(BattleAgent agent, Dictionary <string, object> selections) { List <BattleAction> sequence = new List <BattleAction>(); foreach (BattleCommandAction action in Actions) { sequence.Add(action.Construct(agent, selections)); } return(sequence.Count == 1 ? sequence[0] : new BattleSequenceAction(sequence)); }
private IEnumerator RunShotsFired() { while (shotsFired.Count > 0) { float distance = Screen.height * shotSpeedPercent * Time.deltaTime * (isDefender ? 1f : -1f); damagingShotChannels.Clear(); shotsToDestroy = 0; for (int i = 0; i < shotsFired.Count; i++) { shotsFired[i].transform.position += Vector3.up * distance; if (isDefender) { if (shotsFired[i].transform.position.y > Screen.height - BoardAgent.ChannelWidth) { damagingShotChannels.Add(shotChannels[i]); } if (shotsFired[i].transform.position.y > Screen.height) { shotsToDestroy++; } } else { if (shotsFired[i].transform.position.y < BoardAgent.ChannelWidth) { damagingShotChannels.Add(shotChannels[i]); } if (shotsFired[i].transform.position.y < 0f) { shotsToDestroy++; } } } BattleAgent.DamageOpponent(damagingShotChannels, isDefender); for (int i = 0; i < shotsToDestroy; i++) { DestroyShot(0); } if (shotsFired.Count == 0) { yield break; } yield return(null); } }
/// <summary> /// battleID:战场ID /// formationIdx:编队ID /// </summary> /// <param name="battleID"></param> /// <param name="formationIdx"></param> public BattleData(int battleID, int formationIdx) { _battle = new BattleAgent(); _battle.setData(battleID); // 编队的容器 _formationList = new List <FormationData>(); addAllFormation(formationIdx); }
public void spawnAIPlayers() { for (int i = 0; i < numberOfAIPlayer; i++) { BattleAgent player = Instantiate(AIPlayerPrefab, PlayerSpawnLocation[i].transform.position, Quaternion.Euler(0f, -90f, 0f)).GetComponent <BattleAgent>(); player.gameController = this; player.PlayerID = i; player.TeamID = i; player.GetComponent <Unity.MLAgents.Policies.BehaviorParameters>().TeamId = i; battleAgentDictionary.Add(i, player); } }
public void FindMyEnemy(BattleAgent agent) { if (agent.BaseSoldier.GetType() == typeof(EnemySoldier)) { FindTargetForEnemy(agent); } if (agent.BaseSoldier.GetType() == typeof(HeroSoldier)) { FindTargetForHero(agent); } }
/// <summary> /// 物体相对位移后的某点 /// </summary> /// <returns>相对位移坐标</returns> /// <param name="agent">Agent.</param> /// <param name="delta">Delta.</param> public static Vector3 GetDeltaPointWorld(BattleAgent agent, Vector3 delta) { //受击点相对坐标 Vector3 hitLocal = delta + agent.BaseSprite.HitPoint; //受击点世界坐标 Vector3 hitScreen = StageManager.SharedInstance.HeroLayer.gameObject.transform.TransformVector (hitLocal); // Vector3 hitScreen2 = new Vector3 (hitScreen.x, hitScreen.y, Camera.main.farClipPlane); return hitScreen2; }
/// <summary> /// 物体相对位移后的某点 /// </summary> /// <returns>相对位移坐标</returns> /// <param name="agent">Agent.</param> /// <param name="delta">Delta.</param> public static Vector3 GetDeltaPointWorld(BattleAgent agent, Vector3 delta) { //受击点相对坐标 Vector3 hitLocal = delta + agent.BaseSprite.HitPoint; //受击点世界坐标 Vector3 hitScreen = StageManager.SharedInstance.HeroLayer.gameObject.transform.TransformVector(hitLocal); // Vector3 hitScreen2 = new Vector3(hitScreen.x, hitScreen.y, Camera.main.farClipPlane); return(hitScreen2); }
/// <summary> /// 根据目标点算出适合攻击的位置按权重从大到小排。 /// 距离越大,权重越高。 /// </summary> /// <returns>The attack position.</returns> /// <param name="map">Map.</param> /// <param name="range">Range.</param> public Vector2 GetAttackPos(BattleAgent startAgent, BattleAgent targetAgent, int range) { Vector2 start = startAgent.MapPos; Vector2 target = targetAgent.MapPos; List <Vector2> list = new List <Vector2> (); //可攻击点 for (int i = 0; i < MAX_ROW; i++) { for (int j = 0; j < MAX_COL; j++) { Vector2 a = new Vector2(i, j); float dis = Vector2.Distance(a, target); //同一列也不要 不要占屏幕第一行,最后两行 if (dis <= range && i != target.x && j < 9 && j > 1) { list.Add(a); } } } if (list.Count == 0) { Debug.Log("list count=0"); return(startAgent.MapPos); } //有人占据的点 List <Vector2> list2 = GetUsedPos(); //移除有人占据的点 for (int j = 0; j < list2.Count; j++) { if (list.Contains(list2 [j])) { list.Remove(list2 [j]); } } List <float> disList = new List <float> (); for (int i = 0; i < list.Count; i++) { float d = Vector2.Distance(start, list [i]); disList.Add(d); } float min = Mathf.Min(disList.ToArray()); //距离攻击方最近的可攻击点 return(list [disList.IndexOf(min)]); }
public static BattleAgentDecider Parse(string type, BattleAgent agent) { switch (type) { case "manual": return(new BattleManualAgentDecider(agent)); case "berserk": return(new BattleBerserkAgentDecider(agent)); } throw new System.ArgumentException("[BattleAgentDecider] Unrecognized behaviour type \"" + type + "\"."); }
public static BattleManhattanDistanceZone GetTarget(string target, BattleAgent agent, BattleManhattanDistanceZone range) { if (target.Equals("Single")) { return(new BattleManhattanDistanceZone(new Vector2Int(), 0, 0)); } if (target.StartsWith("All")) { return(new BattleManhattanDistanceZone(range.Center, range.MinRadius, range.MaxRadius + agent["AoE:" + target.Substring(4)])); } return(new BattleManhattanDistanceZone(new Vector2Int(), 0, agent[target])); }
/// <summary> /// 攻击结束 /// </summary> public void OnAttackEnd() { for (int i = 0; i < battleAgent.Targets.Count; i++) { BattleAgent t = battleAgent.Targets [i]; AttackMessage message = new AttackMessage(battleAgent, battleAgent.Targets, 1); t.dispatchEvent(SoldierEvent.HIT, message); } OnIdle(); this.battleAgent.FinishMove(); }
public void AgentDie(BattleAgent ba) { remainLives -= 1; // Debug.Log("m_BattleAgentManager.remainLives" + remainLives); // Destroy(ba.gameObject); Debug.Log("playerStates.Count" + playerStates.Count); if (remainLives == 0) { // Debug.Log("lost the game"); // NoAgentInTeam() NoAgentInTeam(); } }
void Awake() { if (mInstance != null) { Debug.LogError("Only one instance of BattleAgent allowed. Destroying " + gameObject + " and leaving " + mInstance.gameObject); Destroy(gameObject); return; } mInstance = this; drags = new Dictionary <int, DragDirection>(); }
/// <summary> /// Adds the enemy. /// </summary> void AddEnemy() { GameObject parent = StageManager.SharedInstance.NpcLayer; // Vector2[] pos = new Vector2[] { // new Vector2 (4, 4), // new Vector2 (5, 9), // new Vector2 (9, 3), // new Vector2 (8, 9) // }; for (int i = 0; i < enemyPos.Length - 1; i++) { GameObject hfPrefab = ResourceManager.GetInstance.LoadPrefab(TestData.charDB [11].Prefab); GameObject hf = StageManager.SharedInstance.AddToStage(parent, hfPrefab); hf.name = "hf" + i; BaseSoldier hfSoldier = hf.AddComponent <HFSoldier> (); BattleAgent agent = new BattleAgent(hfSoldier, TestData.charDB [11]); agent.BaseSprite.FaceTo = FaceTo.Right; //agent.BaseSprite.SetLocalPosition (pos [i].x, pos [i].y); agent.BaseSprite.SetMapPosition(enemyPos [i].x, enemyPos [i].y); enemyList.Add(agent); agentDict.Add(hf.name, agent); } //boss GameObject prefab = ResourceManager.GetInstance.LoadPrefab(TestData.charDB [17].Prefab); GameObject am = StageManager.SharedInstance.AddToStage(parent, prefab); am.name = "am"; BaseSoldier amSoldier = am.AddComponent <AMSoldier> (); Character c = TestData.charDB [17]; c.Speed = 3.0f; BattleAgent amAgent = new BattleAgent(amSoldier, c); amAgent.Character.HitPoint = new Vector3(0, 100, 100); //agent.BaseSprite.SetLocalPosition (pos [i].x, pos [i].y); amAgent.BaseSprite.SetMapPosition(enemyPos [2].x, enemyPos [2].y); enemyList.Add(amAgent); agentDict.Add(am.name, amAgent); }
public List <Vector3> distanceToEnemies(int playerID) { //if (!enemyList[0]) //{ // return new Vector3(10, 10, 10); //} //var agentPos = theAgent.transform.position; //var enemyPos = enemyList[0].transform.position; //return age BattleAgent ba = battleAgentDictionary[playerID]; List <Vector3> enemies = battleAgentDictionary.Values.Where(x => x.PlayerID != playerID).Select(x => x.transform.position - ba.transform.position).ToList(); return(enemies); }
/// <summary> /// 移除英雄 /// </summary> /// <param name="ba">Ba.</param> public void RemoveSoldier(BattleAgent ba) { if (soldierList.Contains(ba)) { this.soldierList.Remove(ba); agentDict.Remove(ba.BaseSprite.gameObject.name); for (int i = 0; i < enemyList.Count; i++) { enemyList [i].RemoveTarget(ba); } } Destroy(ba.BaseSprite.gameObject); }
public BattleCommandListMenu(BattleManager manager, BattleAgent agent) { m_Manager = manager; m_Agent = agent; Add(new CommandOption(AssetHolder.Commands["Move"])); foreach (BattleCommand command in m_Agent.BaseCharacter.Commands) { Add(new CommandOption(command)); } Add(new CommandOption(AssetHolder.Commands["End Turn"])); }
public IEnumerator ChangeOrder() { allySkill = false; selecting = true; while ((selectedHero == null || selectedTarget == null)) { yield return(null); } int dif = selectedHero.position - selectedTarget.position; if (dif <= 1 && dif >= -1) { float t = 0; Vector2 a = selectedHero.transform.localPosition; Vector2 b = selectedTarget.transform.localPosition; int aPosition = selectedHero.position; int bPosition = selectedTarget.position; HeroAgent heroAgent = selectedHero.GetComponent <HeroAgent> (); heroAgent.ChangeHUD(selectedHero); while (t < 1) { selectedHero.transform.localPosition = Vector2.Lerp(a, b, t); selectedTarget.transform.localPosition = Vector2.Lerp(b, a, t); HUDManager.instance.ChangeTurnHUD(); t += Time.deltaTime * 2; yield return(null); } string nameA = selectedHero.name; string nameB = selectedTarget.name; int indexA = PartyManager.instance.partyList.FindIndex(d => d == nameA); int indexB = PartyManager.instance.partyList.FindIndex(d => d == nameB); PartyManager.instance.partyList [indexA] = nameB; PartyManager.instance.partyList [indexB] = nameA; selectedHero.position = bPosition; selectedTarget.position = aPosition; selectedTarget = null; HUDManager.instance.ChangeTargetHUD(null); selecting = false; NextTurn(); } }
public override IEnumerator ChooseAction() { float startTime = Time.time; while (Time.time < startTime + chooseTime) { yield return(null); } int randomizeSkill = Random.Range(0, enemyInfo.skillList.Length); int skillRange = enemyInfo.skillList [randomizeSkill].range; BattleAgent target = RandomizeTarget(skillRange); enemyInfo.skillList [randomizeSkill].CheckSkill(this, target); }
/// <summary> /// 将阵容上 6个位置上的英雄ID 传过来 null 表示没有人 占位用的 /// </summary> /// <param name="idArray"></param> private MyFormationData() { // 初始化 自己阵容list formationList = new List<FormationData>(); // 阵型, pos 等信息 FormationAgent foramtion = new FormationAgent(); foramtion.setData((int)Defaults.ResultNum.One); // 目前 1 formation 表中 1 是自己的队伍信息 // 兵种结构 _battle = new BattleAgent(); _battle.setData((int)Defaults.ResultNum.One); // 目前 1 battle 表中 1 是自己的队伍信息 setData(foramtion, _battle); }
/// <summary> /// 移除目标 /// </summary> /// <param name="target">Target.</param> public void RemoveTarget(BattleAgent target) { if (target == null) { return; } if (this.targets == null) { return; } if (this.targets.Contains(target)) { this.targets.Remove(target); } }
/// <summary> /// 将阵容上 6个位置上的英雄ID 传过来 null 表示没有人 占位用的 /// </summary> /// <param name="idArray"></param> private MyFormationData() { // 初始化 自己阵容list formationList = new List <FormationData>(); // 阵型, pos 等信息 FormationAgent foramtion = new FormationAgent(); foramtion.setData((int)Defaults.ResultNum.One); // 目前 1 formation 表中 1 是自己的队伍信息 // 兵种结构 _battle = new BattleAgent(); _battle.setData((int)Defaults.ResultNum.One); // 目前 1 battle 表中 1 是自己的队伍信息 setData(foramtion, _battle); }
public bool Damage(List <int> damageChannels) { for (int i = 0; i < damageChannels.Count; i++) { for (int j = currentChannelPositions.Count - 1; j >= 0; j--) { if (damageChannels[i] == currentChannelPositions[j]) { DestroySegment(j); BattleAgent.DamageDealt(damageChannels[i], isDefender); break; } } } return(segments.Count == 0); }
public override List <object> Options(BattleAgent agent, Dictionary <string, object> selections) { string rangeType, targetType; GetRangeAndTarget(agent, selections, out rangeType, out targetType); BattleManhattanDistanceZone range = Skill.GetRange(rangeType, agent); BattleManhattanDistanceZone target = Skill.GetTarget(targetType, agent, range); List <object> points = new List <object>(); foreach (Vector2Int point in range) { // check within boundaries points.Add(point); } return(points); }
public MoveInstruct RegisterCollision(BattleAgent _other) { //For now, count all collisions as the same if (_other is Obstacle) { TakeDamage(10 + _other.speed); speed--; } else { TakeDamage(5 + _other.speed); speed--; } return(new MoveInstruct(TerrainManager.Instance.terrain[ Mathf.Abs((int)gridPos.position.x - (int)(transform.forward.normalized.x)), Mathf.Abs((int)gridPos.position.y - (int)(transform.forward.normalized.z))], 0)); }
/// <summary> /// 物体的受击点世界坐标 /// </summary> /// <returns>The hit point world.</returns> /// <param name="agent">Agent.</param> public static Vector3 GetHitPointWorld(BattleAgent agent) { //return agent.GameObject.transform.position; //物体位置 Vector3 local = agent.GameObject.transform.localPosition; //受击点相对坐标 Vector3 hitLocal = local + agent.BaseSprite.HitPoint; //受击点世界坐标 Vector3 hitScreen = StageManager.SharedInstance.HeroLayer.gameObject.transform.TransformVector (hitLocal); // Vector3 hitScreen2 = new Vector3 (hitScreen.x, hitScreen.y, Camera.main.farClipPlane); //screenPoint.z = 10.0f; //distance of the plane from the camera //Vector3 pos = Camera.main.ScreenToWorldPoint (hitScreen2); return hitScreen2; }
/// <summary> /// 物体的受击点世界坐标 /// </summary> /// <returns>The hit point world.</returns> /// <param name="agent">Agent.</param> public static Vector3 GetHitPointWorld(BattleAgent agent) { //return agent.GameObject.transform.position; //物体位置 Vector3 local = agent.GameObject.transform.localPosition; //受击点相对坐标 Vector3 hitLocal = local + agent.BaseSprite.HitPoint; //受击点世界坐标 Vector3 hitScreen = StageManager.SharedInstance.HeroLayer.gameObject.transform.TransformVector(hitLocal); // Vector3 hitScreen2 = new Vector3(hitScreen.x, hitScreen.y, Camera.main.farClipPlane); //screenPoint.z = 10.0f; //distance of the plane from the camera //Vector3 pos = Camera.main.ScreenToWorldPoint (hitScreen2); return(hitScreen2); }
/// <summary> /// 被击中效果 /// </summary> /// <param name="battleAgent">攻击方</param> public void ComboHitEffect(AttackMessage am) { BattleAgent attacker = am.Sender; for (int i = 0; i < am.ComboCount; i++) { float x = UnityEngine.Random.Range(0, 100); float y = UnityEngine.Random.Range(0, 100); AddFlashEffect(new Vector3(x, y, 0)); //PlayComboSound(); } StartCoroutine(PlayComboSound(am.ComboCount)); AddComboFlashEffect(); AddComboNum(); }
public void ChangeTargetHUD(BattleAgent selectedAgent) { bool active = selectedAgent != null ? true : false; targetMarker.gameObject.SetActive(active); if (selectedAgent != null) { Vector2 pos = worldToUISpace(selectedAgent.transform.position); Vector2 newPos = targetMarker.transform.position; newPos.x = pos.x; targetMarker.transform.position = newPos; if (selectedAgent.GetComponent <EnemyAgent>() != null) { ChangeEnemyHUD(selectedAgent.actualInfo); } } }
/// <summary> /// Adds the enemy. /// </summary> void AddEnemy() { GameObject parent = StageManager.SharedInstance.NpcLayer; // Vector2[] pos = new Vector2[] { // new Vector2 (4, 4), // new Vector2 (5, 9), // new Vector2 (9, 3), // new Vector2 (8, 9) // }; for (int i = 0; i < enemyPos.Length - 1; i++) { GameObject hfPrefab = ResourceManager.GetInstance.LoadPrefab (TestData.charDB [11].Prefab); GameObject hf = StageManager.SharedInstance.AddToStage (parent, hfPrefab); hf.name = "hf" + i; BaseSoldier hfSoldier = hf.AddComponent<HFSoldier> (); BattleAgent agent = new BattleAgent (hfSoldier, TestData.charDB [11]); agent.BaseSprite.FaceTo = FaceTo.Right; //agent.BaseSprite.SetLocalPosition (pos [i].x, pos [i].y); agent.BaseSprite.SetMapPosition (enemyPos [i].x, enemyPos [i].y); enemyList.Add (agent); agentDict.Add (hf.name, agent); } //boss GameObject prefab = ResourceManager.GetInstance.LoadPrefab (TestData.charDB [17].Prefab); GameObject am = StageManager.SharedInstance.AddToStage (parent, prefab); am.name = "am"; BaseSoldier amSoldier = am.AddComponent<AMSoldier> (); Character c = TestData.charDB [17]; c.Speed = 3.0f; BattleAgent amAgent = new BattleAgent (amSoldier, c); amAgent.Character.HitPoint = new Vector3 (0, 100, 100); //agent.BaseSprite.SetLocalPosition (pos [i].x, pos [i].y); amAgent.BaseSprite.SetMapPosition (enemyPos [2].x, enemyPos [2].y); enemyList.Add (amAgent); agentDict.Add (am.name, amAgent); }
void AddHero2() { GameObject parent = StageManager.SharedInstance.HeroLayer; GameObject odPrefab = ResourceManager.GetInstance.LoadPrefab (TestData.charDB [12].Prefab); GameObject od = StageManager.SharedInstance.AddToStage (parent, odPrefab); BaseSoldier odSoldier = od.AddComponent<ODSoldier> (); BattleAgent agent = new BattleAgent (odSoldier, TestData.charDB [12]); agent.BaseSprite.SetMapPosition (10, 15); //agent.BaseSprite.SetLocalPosition (260, -245); agent.BaseSprite.AddDownEffect (); soldierList.Add (agent); enemyList [0].AddTarget (soldierList [0]); soldierList [0].AddTarget (enemyList [0]); }
IEnumerator AddOD() { yield return new WaitForSeconds (0.2f); //奥丁 GameObject parent = StageManager.SharedInstance.HeroLayer; GameObject odPrefab = ResourceManager.GetInstance.LoadPrefab (TestData.charDB [12].Prefab); GameObject od = StageManager.SharedInstance.AddToStage (parent, odPrefab); od.name = "od"; BaseSoldier odSoldier = od.AddComponent<ODSoldier> (); BattleAgent odAgent = new BattleAgent (odSoldier, TestData.charDB [12]); odAgent.BaseSprite.SetMapPosition (soldierPos [0].x, soldierPos [0].y); odAgent.BaseSprite.AddDownEffect (); soldierList.Add (odAgent); agentDict.Add (od.name, odAgent); AudioManager.SharedInstance.PlayOneShot ("fly", 1.0f); yield return new WaitForSeconds (0.2f); //绿萼 // GameObject lePrefab = ResourceManager.GetInstance.LoadPrefab (TestData.charDB [13].Prefab); // GameObject le = StageManager.SharedInstance.AddToStage (parent, lePrefab); // le.name = "le"; // BaseSoldier leSoldier = le.AddComponent<LESoldier> (); // BattleAgent leAgent = new BattleAgent (leSoldier, TestData.charDB [13]); // leAgent.BaseSprite.SetMapPosition (soldierPos [1].x, soldierPos [1].y); // // leAgent.BaseSprite.AddDownEffect (); // soldierList.Add (leAgent); // agentDict.Add (le.name, leAgent); // AudioManager.SharedInstance.PlayOneShot ("fly", 1.0f); // yield return new WaitForSeconds (0.2f); //慕雪 GameObject mxPrefab = ResourceManager.GetInstance.LoadPrefab (TestData.charDB [14].Prefab); GameObject mx = StageManager.SharedInstance.AddToStage (parent, mxPrefab); mx.name = "mx"; BaseSoldier mxSoldier = mx.AddComponent<MXSoldier> (); BattleAgent mxAgent = new BattleAgent (mxSoldier, TestData.charDB [14]); mxAgent.BaseSprite.SetMapPosition (soldierPos [1].x, soldierPos [1].y); mxAgent.BaseSprite.AddDownEffect (); soldierList.Add (mxAgent); agentDict.Add (mx.name, mxAgent); AudioManager.SharedInstance.PlayOneShot ("fly", 1.0f); yield return new WaitForSeconds (0.2f); //寒梦 GameObject hmPrefab = ResourceManager.GetInstance.LoadPrefab (TestData.charDB [15].Prefab); GameObject hm = StageManager.SharedInstance.AddToStage (parent, hmPrefab); hm.name = "hm"; BaseSoldier hmSoldier = hm.AddComponent<HMSoldier> (); BattleAgent hmAgent = new BattleAgent (hmSoldier, TestData.charDB [15]); hmAgent.BaseSprite.SetMapPosition (soldierPos [2].x, soldierPos [2].y); hmAgent.BaseSprite.AddDownEffect (); soldierList.Add (hmAgent); agentDict.Add (hm.name, hmAgent); AudioManager.SharedInstance.PlayOneShot ("fly", 1.0f); yield return new WaitForSeconds (0.3f); //蓉蓉 // GameObject rrPrefab = ResourceManager.GetInstance.LoadPrefab (TestData.charDB [16].Prefab); // GameObject rr = StageManager.SharedInstance.AddToStage (parent, rrPrefab); // rr.name = "rr"; // BaseSoldier rrSoldier = rr.AddComponent<RRSoldier> (); // BattleAgent rrAgent = new BattleAgent (rrSoldier, TestData.charDB [16]); // // rrAgent.BaseSprite.SetMapPosition (soldierPos [4].x, soldierPos [4].y); // rrAgent.BaseSprite.AddDownEffect (); // soldierList.Add (rrAgent); // agentDict.Add (rr.name, rrAgent); // AudioManager.SharedInstance.PlayOneShot ("fly", 1.0f); // FindTargetForHero (odAgent); // soldierList [0].AddTarget (enemyList [0]); // soldierList [1].AddTarget (enemyList [0]); // soldierList [2].AddTarget (enemyList [0]); // soldierList [3].AddTarget (enemyList [0]); // soldierList [4].AddTarget (enemyList [0]); //enemyList [0].AddTarget (rrAgent); //enemyList [0].AddTarget (odAgent); enemyList [0].AddTarget (odAgent); enemyList [1].AddTarget (mxAgent); enemyList [2].AddTarget (hmAgent); odAgent.AddTarget (enemyList [0]); mxAgent.AddTarget (enemyList [1]); hmAgent.AddTarget (enemyList [2]); //leAgent.AddTarget (enemyList [1]); //rrAgent.AddTarget (enemyList [0]); // hmAgent.IsReady = true; // enemyList [4].IsReady = true; // enemyList[4].IsReady = true; // mxAgent.IsReady = true; // leAgent.IsReady = true; // enemyList[1].IsReady = true; // rrAgent.IsReady = true; // enemyList[0].IsReady = true; // for (int i = 0; i < soldierList.Count; i++) { // soldierList [i].IsReady = true; // } // // for (int i = 0; i < enemyList.Count; i++) { // enemyList [i].IsReady = true; // } }
public void cast(BattleAgent target) { //target.hp -= damage; }
public void cast(BattleAgent target) { //target.gameObject = GameManager.getAnimeObject ("sheep"); }
public void FindMyEnemy(BattleAgent agent) { if (agent.BaseSoldier.GetType () == typeof(EnemySoldier)) { FindTargetForEnemy (agent); } if (agent.BaseSoldier.GetType () == typeof(HeroSoldier)) { FindTargetForHero (agent); } }
/// <summary> /// 移除目标 /// </summary> /// <param name="target">Target.</param> public void RemoveTarget(BattleAgent target) { if (target==null) { return; } if (this.targets == null) { return; } if (this.targets.Contains(target)) { this.targets.Remove(target); } }
/// <summary> /// 新增目标 /// </summary> /// <param name="target">Target.</param> public void AddTarget(BattleAgent target) { if (this.targets == null) { this.targets = new List<BattleAgent> (); } this.targets.Add (target); }
/// <summary> /// 根据目标点算出适合攻击的位置按权重从大到小排。 /// 距离越大,权重越高。 /// </summary> /// <returns>The attack position.</returns> /// <param name="map">Map.</param> /// <param name="range">Range.</param> public Vector2 GetAttackPos(BattleAgent startAgent, BattleAgent targetAgent, int range) { Vector2 start = startAgent.MapPos; Vector2 target = targetAgent.MapPos; List<Vector2> list = new List<Vector2> (); //可攻击点 for (int i = 0; i < MAX_ROW; i++) { for (int j = 0; j < MAX_COL; j++) { Vector2 a = new Vector2 (i, j); float dis = Vector2.Distance (a, target); //同一列也不要 不要占屏幕第一行,最后两行 if (dis <= range && i != target.x && j < 9 && j > 1) { list.Add (a); } } } if (list.Count == 0) { Debug.Log ("list count=0"); return startAgent.MapPos; } //有人占据的点 List<Vector2> list2 = GetUsedPos (); //移除有人占据的点 for (int j = 0; j < list2.Count; j++) { if (list.Contains (list2 [j])) { list.Remove (list2 [j]); } } List<float> disList = new List<float> (); for (int i = 0; i < list.Count; i++) { float d = Vector2.Distance (start, list [i]); disList.Add (d); } float min = Mathf.Min (disList.ToArray ()); //距离攻击方最近的可攻击点 return list [disList.IndexOf (min)]; }
public virtual void cast(BattleAgent target) { }
/// <summary> /// 优先同一行站位攻击 /// </summary> /// <returns>The attack position same row.</returns> /// <param name="startAgent">Start agent.</param> /// <param name="targetAgent">Target agent.</param> /// <param name="range">Range.</param> public Vector2 GetAttackPosSameRow(BattleAgent startAgent, BattleAgent targetAgent, int range) { Vector2 start = startAgent.MapPos; Vector2 target = targetAgent.MapPos; List<Vector2> list = new List<Vector2> (); //可攻击点 for (int i = 0; i < MAX_ROW; i++) { for (int j = 0; j < MAX_COL; j++) { Vector2 a = new Vector2 (i, j); float dis = Vector2.Distance (a, target); //同一列也不要 不要占屏幕第一行,最后两行 if (dis <= range && i != target.x && j < 9 && j > 1) { list.Add (a); } } } //有人占据的点 List<Vector2> list2 = GetUsedPos (); //移除有人占据的点 for (int j = 0; j < list2.Count; j++) { if (list.Contains (list2 [j])) { list.Remove (list2 [j]); } } List<Vector2> sameRow = new List<Vector2> (); for (int i = 0; i < list.Count; i++) { if (list [i].y == target.y) { sameRow.Add (list [i]); } } if (sameRow.Count == 0) { for (int i = 0; i < list.Count; i++) { if (list [i].y + 1 == target.y || list [i].y - 1 == target.y) { sameRow.Add (list [i]); } } } int idx = sameRow.Count; int next = UnityEngine.Random.Range (0, idx - 1); return sameRow [next]; }
/// <summary> /// 根据目标点算出适合攻击的位置按权重从大到小排。 /// 距离越大,权重越高。 /// </summary> /// <returns>The attack position.</returns> /// <param name="map">Map.</param> /// <param name="range">Range.</param> public Vector2 GetRangeAttackPos(BattleAgent startAgent, BattleAgent targetAgent, int range) { Vector2 start = startAgent.MapPos; Vector2 target = targetAgent.MapPos; List<Vector2> list = new List<Vector2> (); for (int i = 0; i < MAX_ROW; i++) { for (int j = 0; j < MAX_COL; j++) { Vector2 a = new Vector2 (i, j); float dis = Vector2.Distance (a, target); //同一列也不要 if (dis <= range && dis > startAgent.Character.GuardRange && i != target.x && j < 9 && j > 1) { list.Add (a); } } } List<Vector2> list2 = GetUsedPos (); for (int j = 0; j < list2.Count; j++) { if (list.Contains (list2 [j])) { list.Remove (list2 [j]); } } // float tmp = Vector2.Distance (startAgent.MapPos, targetAgent.MapPos); int idx = list.Count; int next = UnityEngine.Random.Range (0, idx - 1); return list [next]; //如果近身,或者靠近屏幕边缘就随机到下一个位置 // if (tmp < startAgent.Character.GuardRange && // (startAgent.MapPos.x < 1 || startAgent.MapPos.x > MapUtil.MAX_COL - 1)) { // // int idx = list.Count; // // int next = UnityEngine.Random.Range (0, idx - 1); // // return list [next]; // // } else { // List<float> disList = new List<float> (); // for (int i = 0; i < list.Count; i++) { // float d = Vector2.Distance (start, list [i]); // disList.Add (d); // } // float min = Mathf.Min (disList.ToArray ()); // return list [disList.IndexOf (min)]; // } }
/// <summary> /// 开始大招特效 /// </summary> /// <param name="battleAgent">Battle agent.</param> /// <param name="attackMessage">Attack message.</param> public void StartUltraSpell(BattleAgent battleAgent, AttackMessage attackMessage) { }
/// <summary> /// Initializes a new instance of the <see cref="AttackMessage"/> class. /// </summary> /// <param name="sender">施法者</param> /// <param name="targets">攻击目标</param> /// <param name="spellId">技能</param> public AttackMessage(BattleAgent sender, List<BattleAgent> targets, int skillId) { this.Sender = sender; this.Targets = targets; this.SkillId = skillId; }
/// <summary> /// 移除英雄 /// </summary> /// <param name="ba">Ba.</param> public void RemoveSoldier(BattleAgent ba) { if (soldierList.Contains (ba)) { this.soldierList.Remove (ba); agentDict.Remove (ba.BaseSprite.gameObject.name); for (int i = 0; i < enemyList.Count; i++) { enemyList [i].RemoveTarget (ba); } } Destroy (ba.BaseSprite.gameObject); }
// BuffSkill buff = new BuffSkill (){ // // } // public List<IEffect> getEffects() // { // return new List().add(new ChangSheepEffect()).add(new PropChangeEffect()); // } // // // public void cast(BattleAgent target){ // int time = 3000;//3秒 // target.addBuff(buff,time); // } public void cast(BattleAgent target) { throw new NotImplementedException (); }
public void cast(BattleAgent target) { // target.atk = 0; // target.def = 0; // target.speed = 50; }
/// <summary> /// 查找最近的目标 /// </summary> private void FindTargetForHero(BattleAgent hero) { List<BattleAgent> list = BattleManager.SharedInstance.GetEnemyList (); List<float> disList = new List<float> (); for (int i = 0; i < list.Count; i++) { float dis = Vector2.Distance (hero.MapPos, list [i].MapPos); disList.Add (dis); } float min = Mathf.Min (disList.ToArray ()); for (int j = 0; j < disList.Count; j++) { if (min == disList [j]) { hero.AddTarget (list [j]); } } }
void Awake() { if( mInstance != null ) { Debug.LogError( "Only one instance of BattleAgent allowed. Destroying " + gameObject + " and leaving " + mInstance.gameObject ); Destroy( gameObject ); return; } mInstance = this; drags = new Dictionary<int, DragDirection>(); }
// 设置数据 private void setData(FormationAgent formation, BattleAgent battle) { setAllData(soldierStruct, formation.getShapeArray(), formation.getPosXArray(), formation.getPosYArray(), formation.getPosZArray()); }