Esempio n. 1
0
 public void spellTo(BattleAgent target)
 {
     for (int i = 0; i < getEffects().Count; i++) {
         IEffect effect = getEffects () [i];
         effect.cast (target);
     }
 }
Esempio n. 2
0
 /// <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;
 }
Esempio n. 3
0
    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));
    }
Esempio n. 5
0
    /// <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]);
    }
Esempio n. 6
0
    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);
    }
Esempio n. 7
0
    /// <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);
    }
Esempio n. 8
0
    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));
    }
Esempio n. 9
0
    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);
        }
    }
Esempio n. 10
0
    /// <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);
    }
Esempio n. 11
0
 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);
     }
 }
Esempio n. 12
0
    public void FindMyEnemy(BattleAgent agent)
    {
        if (agent.BaseSoldier.GetType() == typeof(EnemySoldier))
        {
            FindTargetForEnemy(agent);
        }

        if (agent.BaseSoldier.GetType() == typeof(HeroSoldier))
        {
            FindTargetForHero(agent);
        }
    }
Esempio n. 13
0
    /// <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;
    }
Esempio n. 14
0
    /// <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);
    }
Esempio n. 15
0
    /// <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)]);
    }
Esempio n. 16
0
    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 + "\".");
    }
Esempio n. 17
0
    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]));
    }
Esempio n. 18
0
    /// <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();
     }
 }
Esempio n. 20
0
    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>();
    }
Esempio n. 21
0
    /// <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);
    }
Esempio n. 22
0
    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);
    }
Esempio n. 23
0
    /// <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);
    }
Esempio n. 24
0
    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"]));
    }
Esempio n. 25
0
    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();
        }
    }
Esempio n. 26
0
    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);
    }
Esempio n. 27
0
    /// <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);
    }
Esempio n. 28
0
    /// <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);
        }
    }
Esempio n. 29
0
    /// <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);
    }
Esempio n. 30
0
    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);
    }
Esempio n. 32
0
    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));
    }
Esempio n. 33
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;
    }
Esempio n. 34
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);
    }
Esempio n. 35
0
    /// <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();
    }
Esempio n. 36
0
    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);
            }
        }
    }
Esempio n. 37
0
    /// <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);
    }
Esempio n. 38
0
    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]);
    }
Esempio n. 39
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;
        //		}
    }
Esempio n. 40
0
 public void cast(BattleAgent target)
 {
     //target.hp -= damage;
 }
Esempio n. 41
0
 public void cast(BattleAgent target)
 {
     //target.gameObject = GameManager.getAnimeObject ("sheep");
 }
Esempio n. 42
0
    public void FindMyEnemy(BattleAgent agent)
    {
        if (agent.BaseSoldier.GetType () == typeof(EnemySoldier)) {
            FindTargetForEnemy (agent);
        }

        if (agent.BaseSoldier.GetType () == typeof(HeroSoldier)) {
            FindTargetForHero (agent);
        }
    }
Esempio n. 43
0
    /// <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);
        }
    }
Esempio n. 44
0
 /// <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);
 }
Esempio n. 45
0
    /// <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)];
    }
Esempio n. 46
0
 public virtual void cast(BattleAgent target)
 {
 }
Esempio n. 47
0
    /// <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];
    }
Esempio n. 48
0
    /// <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)];
        //		}
    }
Esempio n. 49
0
 /// <summary>
 /// 开始大招特效
 /// </summary>
 /// <param name="battleAgent">Battle agent.</param>
 /// <param name="attackMessage">Attack message.</param>
 public void StartUltraSpell(BattleAgent battleAgent, AttackMessage attackMessage)
 {
 }
Esempio n. 50
0
 /// <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;
 }
Esempio n. 51
0
    /// <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);
    }
Esempio n. 52
0
 //    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;
 }
Esempio n. 54
0
    /// <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]);
            }

        }
    }
Esempio n. 55
0
    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>();
    }
Esempio n. 56
0
 // 设置数据
 private void setData(FormationAgent formation, BattleAgent battle)
 {
     setAllData(soldierStruct, formation.getShapeArray(), formation.getPosXArray(), formation.getPosYArray(), formation.getPosZArray());
 }