Esempio n. 1
0
        /// <summary>
        /// 得到攻击范围之内的敌人
        /// </summary>
        /// <param name="attackRange">攻击范围类型</param>
        /// <param name="distanceAttack">攻击距离</param>
        /// <param name="isBossExsit">当前是否存在boss</param>
        /// <returns></returns>
        ArrayList GetEnemyInAttackRange(AttackRangeType type, float distanceAttack, bool isBossExsit = true)
        {
            //获取到所有可攻击怪列表
            ArrayList enemyInAttackRangeList = new ArrayList(); //可攻击敌人列表

            if (isBossExsit)                                    //存在boss的时候
            {
                CalculateEnemysCanAttack(enemyInAttackRangeList, Controller_BossBase.Instance.GetBossList(), distanceAttack);
            }
            CalculateEnemysCanAttack(enemyInAttackRangeList, Controller_EnemyBase.Instance.GetEnemyList(), distanceAttack);
            //判定攻击范围
            ArrayList enemyInForwardAttackRangeList = new ArrayList(); //可攻击敌人列表

            if (type == AttackRangeType.Forward)                       //只攻击一定范围内的正前方
            {
                foreach (GameObject enemyItem in enemyInAttackRangeList)
                {
                    //定义"主角与敌人"的方向"enemyItem"表示敌人的空间点减去主角的空间位置的点"normalized"数值归1化
                    Vector3 dir = (enemyItem.transform.position - this.gameObject.transform.position).normalized;
                    //定义"主角与敌人"的夹角(用向量"点乘"进行计算)
                    float floDirection = Vector3.Dot(dir, this.gameObject.transform.forward);//计算夹角
                    //如果主角与敌人在同一个方向,且在有效攻击范围内,则返回此类敌人
                    //"Dot"求夹角如果角度大于0敌人在主角的视野范围内(正面)并且距离在有效范围才能
                    if (floDirection > 0 && floDirection < 30)//前方扇形区域60度类怪可攻击
                    {
                        enemyInForwardAttackRangeList.Add(enemyItem);
                    }
                }
                return(enemyInForwardAttackRangeList);//前方可攻击怪
            }
            else
            {
                return(enemyInAttackRangeList);//四周全范围可攻击怪
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 释放技能时 向敌方可攻击怪发送消息 对方接受消息后回应
        /// </summary>
        void SendMessageToEnemys(AttackRangeType type, string[] proArray)
        {
            switch (GlobalParametersManager.CurrentActionTYPE)
            {
            case ActionType.Basic:
                _distanceAttack = 0.2f; //暂定数据
                _playerDamage   = 59;   //暂定数据
                AttackMessage(proArray, type, _distanceAttack, _playerDamage);
                //直线攻击
                break;

            case ActionType.Skill01:
                _distanceAttack = 0.5f;  //暂定数据
                _playerDamage   = 110;   //暂定数据
                AttackMessage(proArray, type, _distanceAttack, _playerDamage);
                //直线攻击
                break;

            case ActionType.Skill02:
                //直线攻击
                _distanceAttack = 0.5f;  //暂定数据
                _playerDamage   = 130;   //暂定数据
                AttackMessage(proArray, type, _distanceAttack, _playerDamage);
                break;

            case ActionType.Skill03:
                //直线攻击
                _distanceAttack = 0.6f; //暂定数据
                _playerDamage   = 100;  //暂定数据
                AttackMessage(proArray, type, _distanceAttack, _playerDamage);
                break;
            }
        }
Esempio n. 3
0
 void AttackMessage(string[] proArray, AttackRangeType type, float distanceAttack, float playerDamage)
 {
     foreach (GameObject go in  GetEnemyInAttackRange(type, _distanceAttack))
     {
         Debug.Log(go.name);
         //向可攻击范围内敌人发送一个攻击消息
         go.SendMessage("TakeDamage", _playerDamage + "," + proArray[3] + "," + proArray[4]);
         //TODO 参数待定
     }
 }
        //----------------------------------------------------------------------------
        //                    Constructor
        //----------------------------------------------------------------------------

        #region Constructor

        public AttackData(IHasAttack hasAttack, AttackRangeType rangeType,
                          AttackType attackType, AttackStat attackStat)
        {
            MyHasAttack = hasAttack;
            MyIsVictim  = null;

            MyRangeType  = rangeType;
            MyAttackType = attackType;
            MyAttackStat = attackStat;

            Advantage      = false;
            Disadvantage   = false;
            SumOfModifiers = 0;
        }
Esempio n. 5
0
File: Item.cs Progetto: Finb/MMX
        public static string getName(this AttackRangeType type)
        {
            switch (type)
            {
            case AttackRangeType.all: return("全体");

            case AttackRangeType.oneEnemy: return("单体");

            case AttackRangeType.smallLine: return("贯通小");

            case AttackRangeType.LargeLine: return("贯通大");

            case AttackRangeType.smallSector: return("扇形小");

            case AttackRangeType.LargeFan: return("扇形大");

            case AttackRangeType.adjustableFan: return("扇形可调节");
            }
            return("");
        }
 /// <summary>
 /// 释放技能时 向玩家发送消息 对方接受消息后回应
 /// </summary>
 void SendMessageToPlayer(AttackRangeType type, string[] proArray, float bossDamage)
 {
     AttackMessage(proArray, bossDamage);
 }