Пример #1
0
    /// <summary>
    /// 受击
    /// </summary>
    /// <param name="soldier"></param>
    /// <returns>是否死亡</returns>
    public bool hit(GeneralSoldier soldier)
    {
        GeneralSoldier attackTarget = (GeneralSoldier)soldier._data.AttackTarget;

        if (attackTarget == null)
        {
            return(true);
        }

        bool isDead = attackTarget.hurt(soldier._data.PhysicalStrength);

        if (isDead)
        {
            removeSoldier(attackTarget);

            if (_selfSoldiers.Count == 0)
            {
                //发战斗失败消息
                XLMessageManager.getInstance().sendNotification(BattleController.BATTLESTATE_FAILED);
            }

            if (_enemySoldiers.Count == 0)
            {
                //发战斗胜利消息
                XLMessageManager.getInstance().sendNotification(BattleController.BATTLESTATE_VICTORY);
            }
        }

        return(isDead);
    }
Пример #2
0
 /// <summary>
 /// 攻击状态构造函数
 /// </summary>
 /// <param name="host"></param>
 public GeneralAttackState(GeneralSoldier host)
     : base(host)
 {
     //取得士兵和动画
     soldier  = host;
     animator = soldier.GetComponent <Animator>();
 }
Пример #3
0
    public void setText(GeneralSoldier soldier, string str)
    {
        if(true)
        {
            return;
        }

        //摄像机对象
        _camera = Camera.main;

        //获取角色head模型
        headTr = soldier.gameObject.transform.Find("head");

        //得到模型head坐标
        float size_y = headTr.position.y;

        //得到模型缩放比例
        float scal_y = transform.localScale.y;

        //乘积就是高度
        playerHeight = scal_y * size_y;

        //计算世界坐标
        worldPostion = new Vector3(soldier.gameObject.transform.position.x, soldier.gameObject.transform.position.y + playerHeight, soldier.gameObject.transform.position.z);

        //根据对象头顶的3D坐标换算成它在2D屏幕中的坐标
        postion = _camera.WorldToScreenPoint(worldPostion);

        //得到真实对象头顶的2D坐标
        postion = new Vector2(postion.x, Screen.height - postion.y);

        //设置伤害
        dmgText.text = str;

        //获取画布
        GameObject canvas = GameObject.Find("Canvas");
        dmgText.transform.SetParent(canvas.transform);

        //设置锚点
        RectTransform rt = dmgText.gameObject.transform as RectTransform;
        rt.anchoredPosition = Vector2.zero;
        dmgText.gameObject.transform.localScale = Vector3.one;

        //设置坐标
        dmgText.transform.position = postion;

        //缓动
        iTween.FadeTo(gameObject, 0.1f, 1);

        iTween.ScaleTo(gameObject, new Vector3(2, 2, 2), 1);

        Hashtable hxb = new Hashtable();
        hxb.Add("position", new Vector3(dmgText.transform.position.x, dmgText.transform.position.y + 180, dmgText.transform.position.z));
        hxb.Add("time", 1.1f);
        hxb.Add("easetype", iTween.EaseType.easeOutCubic);
        hxb.Add("oncomplete", "onAnimationEnd");
        hxb.Add("oncompletetarget", this.gameObject);
        hxb.Add("oncompleteparams", this.gameObject.name);
        iTween.MoveTo(gameObject, hxb);
    }
Пример #4
0
 /// <summary>
 /// 攻击状态构造函数
 /// </summary>
 /// <param name="host"></param>
 public GeneralHurtState(GeneralSoldier host)
     : base(host)
 {
     //取得士兵和动画
     soldier = host;
     animator = soldier.GetComponent<Animator>();
 }
Пример #5
0
 /// <summary>
 /// 攻击状态构造函数
 /// </summary>
 /// <param name="host"></param>
 public GeneralWalkState(GeneralSoldier host)
     : base(host)
 {
     //取得士兵和动画
     _host         = host;
     _navmeshAgent = _host.GetComponent <NavMeshAgent>();
 }
Пример #6
0
 /// <summary>
 /// 攻击状态构造函数
 /// </summary>
 /// <param name="host"></param>
 public GeneralWalkState(GeneralSoldier host)
     : base(host)
 {
     //取得士兵和动画
     _host = host;
     _navmeshAgent = _host.GetComponent<NavMeshAgent>();
 }
Пример #7
0
    /// <summary>
    /// 添加一个士兵——————测试用
    /// </summary>
    /// <param name="country"></param>
    /// <param name="x_"></param>
    /// <param name="y_"></param>
    public void addSoldier(SoldierDataBase data, Defaults.SoldierType soldierType, Vector3 point)
    {
        //复制预制件
        GameObject soldierBody = ResourceManager.getInstance().getGameObject(ResourceConfig.getPrefabName(soldierType));

        soldierBody.name = null;

        if (data == null)
        {
            return;
        }

        if (data.Country == Defaults.Country.Me)
        {
            soldierBody.name = "me" + sprId;
        }
        else
        {
            soldierBody.name = "enemy" + sprId;
        }
        sprId++;

        //如果取得预制件失败,返回
        if (soldierBody == null)
        {
            return;
        }

        //根据兵种实例化兵种类,绑定到预制件
        Type scriptType = ResourceConfig.getClassType(soldierType);

        soldierBody.AddComponent(scriptType);
        GeneralSoldier soldierScript = soldierBody.GetComponent(scriptType) as GeneralSoldier;

        //如果取得脚本失败,返回
        if (soldierScript == null)
        {
            return;
        }

        //设置属性
        soldierScript._data           = data;                                              //势力
        soldierScript._data.DeadDelay = 10;
        soldierScript._data.SkillMgr.setSkills(soldierScript);                             //技能
        int distance = data.Country == Defaults.Country.Me ? 14 : 26;                      //敌我距离

        soldierBody.transform.Rotate(0, data.Country == Defaults.Country.Me ? 0 : 180, 0); //设置敌我部队的朝向
        soldierBody.transform.position = point;                                            //设置坐标

        //存进士兵容器
        if (data.Country == Defaults.Country.Enemy)
        {
            _enemySoldiers.Add(soldierScript);
        }
        else
        {
            _selfSoldiers.Add(soldierScript);
        }
    }
Пример #8
0
    /// <summary>
    /// 待机状态构造函数
    /// </summary>
    /// <param name="host"></param>
    public GeneralDeadState(GeneralSoldier host)
        : base(host)
    {
        _host = host;

        //初始化
        init();
    }
Пример #9
0
    /// <summary>
    /// 待机状态构造函数
    /// </summary>
    /// <param name="host"></param>
    public GeneralDeadState(GeneralSoldier host)
        : base(host)
    {
        _host = host;

        //初始化
        init();
    }
Пример #10
0
    /// <summary>
    /// 战斗失败
    /// </summary>
    private void battlestateFailed()
    {
        //敌方全员播放胜利动作
        for (int i = 0; i < SpriteMgr.getInstance().EnemySoldiers.Count; i++)
        {
            GeneralSoldier soldier = SpriteMgr.getInstance().EnemySoldiers[i] as GeneralSoldier;
            soldier.setState(soldier.WinState);
        }

        //弹失败窗口
        UIManager.getInstance().openPanel(PanelConfig.FAILEDPANEL);
        Debug.Log("弹失败窗口");
    }
Пример #11
0
    /// <summary>
    ///  eman -- 释放者对象
    ///  skillList -- 技能id列表
    /// </summary>
    /// <param name="eman"></param>
    public void setSkills(GeneralSoldier eman)
    {
        if (eman._data.Skills == null)
        {
            return;
        }

        for (int i = 0; i < eman._data.Skills.Length; ++i)
        {
            Skill skill = new Skill(eman, eman._data.Skills[i]);

            // 保存技能
            if (eman._data.Skills[i] != 0 && !_skillList.ContainsKey(eman._data.Skills[i]))
            {
                _skillList.Add(eman._data.Skills[i], skill);
            }
        }
    }
Пример #12
0
    /// <summary>
    ///  eman -- 释放者对象
    ///  skillList -- 技能id列表
    /// </summary>
    /// <param name="eman"></param>    
    public void setSkills(GeneralSoldier eman)
    {
        if (eman._data.Skills == null)
        {
            return;
        }

        for (int i = 0; i < eman._data.Skills.Length; ++i)
        {
            Skill skill = new Skill(eman, eman._data.Skills[i]);

            // 保存技能
            if (eman._data.Skills[i] != 0 && !_skillList.ContainsKey(eman._data.Skills[i]))
            {
                _skillList.Add(eman._data.Skills[i], skill);
            }
        }
    }
Пример #13
0
    public Skill(GeneralSoldier soldier, int id)
    {
        if (id == 0)
        {
            return;
        }

        skillId = id;
        // 数据
        _skillData = new SkillData(id);

        mountPoint = getBindType(0);//(_skillData.Skill.getBindType());

        _eman = soldier;

        //加载技能所需要的特效
        loadSkllResource();

        setInstance();
    }
Пример #14
0
    public Skill(GeneralSoldier soldier, int id)
    {
        if (id == 0)
        {
            return;
        }

        skillId = id;
        // 数据
        _skillData = new SkillData(id);


        mountPoint = getBindType(0);//(_skillData.Skill.getBindType());

        _eman = soldier;

        //加载技能所需要的特效
        loadSkllResource();

        setInstance();
    }
Пример #15
0
 /// <summary>
 /// 待机状态构造函数
 /// </summary>
 /// <param name="host"></param>
 public GeneralWinState(GeneralSoldier host)
     : base(host)
 {
     //取得士兵的动画
     _host = host;
 }
Пример #16
0
 /// <summary>
 /// 待机状态构造函数
 /// </summary>
 /// <param name="host"></param>
 public GeneralMoveState(GeneralSoldier host)
     : base(host)
 {
     _host = host;
 }
Пример #17
0
    /// <summary>
    /// 受击
    /// </summary>
    /// <param name="soldier"></param>
    /// <returns>是否死亡</returns>
    public bool hit(GeneralSoldier soldier)
    {
        GeneralSoldier attackTarget = (GeneralSoldier)soldier._data.AttackTarget;

        if (attackTarget == null)
        {
            return true;
        }

        bool isDead = attackTarget.hurt(soldier._data.PhysicalStrength);

        if (isDead)
        {
            removeSoldier(attackTarget);

            if (_selfSoldiers.Count == 0)
            {
                //发战斗失败消息
                XLMessageManager.getInstance().sendNotification(BattleController.BATTLESTATE_FAILED);
            }

            if(_enemySoldiers.Count == 0)
            {
                //发战斗胜利消息
                XLMessageManager.getInstance().sendNotification(BattleController.BATTLESTATE_VICTORY);
            }

        }

        return isDead;
    }
Пример #18
0
 /// <summary>
 /// 待机状态构造函数
 /// </summary>
 /// <param name="host"></param>
 public GeneralMoveState(GeneralSoldier host)
     : base(host)
 {
     _host = host;
 }
Пример #19
0
 /// <summary>
 /// 待机状态构造函数
 /// </summary>
 /// <param name="host"></param>
 public GeneralFindState(GeneralSoldier host)
     : base(host)
 {
     _host = host;
 }
Пример #20
0
    public void setText(GeneralSoldier soldier, string str)
    {
        if (true)
        {
            return;
        }

        //摄像机对象
        _camera = Camera.main;

        //获取角色head模型
        headTr = soldier.gameObject.transform.Find("head");

        //得到模型head坐标
        float size_y = headTr.position.y;

        //得到模型缩放比例
        float scal_y = transform.localScale.y;

        //乘积就是高度
        playerHeight = scal_y * size_y;

        //计算世界坐标
        worldPostion = new Vector3(soldier.gameObject.transform.position.x, soldier.gameObject.transform.position.y + playerHeight, soldier.gameObject.transform.position.z);

        //根据对象头顶的3D坐标换算成它在2D屏幕中的坐标
        postion = _camera.WorldToScreenPoint(worldPostion);

        //得到真实对象头顶的2D坐标
        postion = new Vector2(postion.x, Screen.height - postion.y);

        //设置伤害
        dmgText.text = str;

        //获取画布
        GameObject canvas = GameObject.Find("Canvas");

        dmgText.transform.SetParent(canvas.transform);

        //设置锚点
        RectTransform rt = dmgText.gameObject.transform as RectTransform;

        rt.anchoredPosition = Vector2.zero;
        dmgText.gameObject.transform.localScale = Vector3.one;

        //设置坐标
        dmgText.transform.position = postion;

        //缓动
        iTween.FadeTo(gameObject, 0.1f, 1);

        iTween.ScaleTo(gameObject, new Vector3(2, 2, 2), 1);

        Hashtable hxb = new Hashtable();

        hxb.Add("position", new Vector3(dmgText.transform.position.x, dmgText.transform.position.y + 180, dmgText.transform.position.z));
        hxb.Add("time", 1.1f);
        hxb.Add("easetype", iTween.EaseType.easeOutCubic);
        hxb.Add("oncomplete", "onAnimationEnd");
        hxb.Add("oncompletetarget", this.gameObject);
        hxb.Add("oncompleteparams", this.gameObject.name);
        iTween.MoveTo(gameObject, hxb);
    }
Пример #21
0
 /// <summary>
 /// 待机状态构造函数
 /// </summary>
 /// <param name="host"></param>
 public GeneralFindState(GeneralSoldier host)
     : base(host)
 {
     _host = host;
 }
Пример #22
0
    /// <summary>
    /// 生成下一个战场的显示内容
    /// </summary>
    private void creatNextBattle(BattleData data)
    {
        int  spriteCount = 0;
        bool isBreak     = false;

        if (num == 1)
        {
            //生成自己的部队
            for (int i = 0; i < MyFormationData.formationList.Count; i++)
            {
                for (int j = 0; j < MyFormationData.formationList[i].SoldiersDict.Count; j++)
                {
                    if (MyFormationData.formationList[i].SoldiersDict[j] != null)
                    {
                        MyFormationData.formationList[i].SoldiersDict[j].Country = Defaults.Country.Me;
                        if (i == 0)
                        {
                            SpriteMgr.getInstance().addSoldier(MyFormationData.formationList[i].SoldiersDict[j], Defaults.SoldierType.Cavalryman, new Vector3(j % 3 + _mySoldierPoints[i].x, 0 + _mySoldierPoints[i].y, (int)(j / 3) + _mySoldierPoints[i].z));
                        }
                        else
                        {
                            SpriteMgr.getInstance().addSoldier(MyFormationData.formationList[i].SoldiersDict[j], Defaults.SoldierType.Armorman, new Vector3(j % 3 + _mySoldierPoints[i].x, 0 + _mySoldierPoints[i].y, (int)(j / 3) + _mySoldierPoints[i].z));
                        }

                        if (++spriteCount >= SPRITE_COUNT)
                        {
                            isBreak = true;
                            break;
                        }
                    }
                }

                if (isBreak)
                {
                    break;
                }
            }
        }

        spriteCount = 0;
        if (num == 0)
        {
            //自己部队停止动作
            for (int i = 0; i < SpriteMgr.getInstance().SelfSoldiers.Count; i++)
            {
                GeneralSoldier soldier = SpriteMgr.getInstance().SelfSoldiers[i] as GeneralSoldier;
                soldier.setState(soldier.IdleState);
                soldier.IsDebug = true;

                if (++spriteCount >= SPRITE_COUNT)
                {
                    break;
                }
            }
        }

        //生成敌人的部队
        spriteCount = 0;
        isBreak     = false;
        for (int i = 0; i < campaignData.BattleList[campaignData.battleIndex].FormationList.Count; i++)
        {
            for (int j = 0; j < campaignData.BattleList[campaignData.battleIndex].FormationList[i].SoldiersDict.Count; j++)
            {
                //Debug.Log(i + " " + j + " " + campaignData.BattleList[campaignData.battleIndex].FormationList[i].soldiersDict[j]);
                if (campaignData.BattleList[campaignData.battleIndex].FormationList[i].SoldiersDict[j] != null)
                {
                    campaignData.BattleList[campaignData.battleIndex].FormationList[i].SoldiersDict[j].Country = Defaults.Country.Enemy;
                    if (j == 0)
                    {
                        SpriteMgr.getInstance().addSoldier(campaignData.BattleList[campaignData.battleIndex].FormationList[i].SoldiersDict[j], Defaults.SoldierType.Masterman, new Vector3(j % 3 + _enemySoldierPoints[i].x, 0 + _enemySoldierPoints[i].y, (int)(j / 3) + _enemySoldierPoints[i].z));
                    }
                    else
                    {
                        SpriteMgr.getInstance().addSoldier(campaignData.BattleList[campaignData.battleIndex].FormationList[i].SoldiersDict[j], Defaults.SoldierType.Axeman, new Vector3(j % 3 + _enemySoldierPoints[i].x, 0 + _enemySoldierPoints[i].y, (int)(j / 3) + _enemySoldierPoints[i].z));
                    }
                }

                if (++spriteCount >= SPRITE_COUNT)
                {
                    isBreak = true;
                    break;
                }
            }

            if (isBreak)
            {
                break;
            }
        }
    }
Пример #23
0
 /// <summary>
 /// 待机状态构造函数
 /// </summary>
 /// <param name="host"></param>
 public GeneralWinState(GeneralSoldier host)
     : base(host)
 {
     //取得士兵的动画
     _host = host;
 }