/// <summary>
        /// 全方位に対して弾を複数打つメソッド
        /// </summary>
        /// <param name="bulletNum">発射する弾数</param>
        /// <param name="attackerType">発射するキャラの所属</param>
        /// <param name="position">発射位置</param>
        /// <param name="shape">弾幕の形</param>
        /// <param name="bulletType">弾の種類</param>
        /// <param name="data">弾の基本データ</param>
        /// <param name="time">連射時の発射角度に影響する時間情報</param>
        /// <param name="angularSpeed">連射時に変化する角速度</param>
        /// <param name="axis">連射時に変化する基準軸</param>
        /// <param name="forward">発射方向(AllRangeShotType.Planeのみ有効)</param>
        public void Shot(int bulletNum, AttackerType attackerType, GameObject shooter, Vector3[] directions, BulletData data, GameObject target, float time = 0.0f, float angularSpeed = 0.0f, Vector3 axis = default)
        {
            var bullets = ObjectPools.Instance.GetBullet(bulletNum, data.BulletType);

            if (data.BulletType == BulletType.Curve)
            {
                SetRotateOrigin(bullets, shooter, data);
            }
            else if (data.BulletType == BulletType.Funnel)
            {
                SetRotateOrigin(bullets, shooter, data, target);
            }

            if (directions == default)
            {
                directions = ShotManager.Instance.RandomVectors(bulletNum);
            }
            if (time != 0.0f && angularSpeed != 0 && axis != default)
            {
                var rotate = Quaternion.AngleAxis(time * angularSpeed, axis);
                for (int i = 0; i < bulletNum; i++)
                {
                    directions[i] = rotate * directions[i];
                }
            }
            var position = shooter.transform.position;

            for (int i = 0; i < bulletNum; i++)
            {
                Shot(bullets[i], attackerType, position + directions[i] * INITIALDISTANCE, directions[i], data, target);
            }
        }
Example #2
0
 /// <summary>
 /// ShotDataをもとに生成したActionをIteratorにセット or 単発なら実行するメソッド
 /// </summary>
 /// <param name="data">発射するShotData</param>
 public void SetUnityAction(AttackerType attackerType, BarrageData data, GameObject aim = default, GameObject target = default)
 {
     if (data == null)
     {
         return;
     }
     for (int i = 0; i < data.ShotDatas.Count; i++)
     {
         if (data.ShotDatas[i] == default || data.BulletDatas[i] == default)
         {
             continue;
         }
         if (data.ShotDatas[i].ShotType == ShotType.Normal && data.BulletDatas[i].BulletType == BulletType.Funnel)
         {
             continue;
         }
         var cnt = data.ShotDatas[i].Count;
         if (cnt > 1)
         {
             SetEvent(GetUnityAction(attackerType, data.ShotDatas[i], data.BulletDatas[i], aim, target), data.ShotDatas[i]);
         }
         else
         {
             GetUnityAction(attackerType, data.ShotDatas[i], data.BulletDatas[i], aim, target)(0.0f);
         }
     }
 }
        public override void Initialize(AttackerType attackerType, Vector3 position, Vector3 velocity, BulletData data, GameObject target, Vector3 offset)
        {
            Iterator.SetUnityAction(attackerType, data.SplitData, target, target);

            Acceleration = 2 * (data.DeploymentDistance - data.Speed * data.DeploymentTime) / data.DeploymentTime / data.DeploymentTime * velocity;
            base.Initialize(attackerType, position, velocity, data, target, offset);
        }
    public Enemy CreateEnemy(
        GameObject prefab,
        HealthType healthType,
        AttackerType attackerType,
        MoverType moverType,
        PerceptionType perceptionType,
        ICharacter target)
    {
        var newGameObject = UnityEngine.Object.Instantiate(prefab);

        newGameObject.name  = "Enemy";
        newGameObject.layer = LayerMask.NameToLayer("Enemy");

        var enemy = newGameObject.AddComponent <Enemy>();

        enemy.InitializeBrain();
        enemy.InitializePathfindingAgent();
        enemy.InitializeHealth(GetHealthData(healthType));
        enemy.InitializeAttacker(GetAttackerData(attackerType));
        enemy.InitializeMover(GetMoverData(moverType));
        enemy.InitializeLoot();
        enemy.InitializePerception(GetPerceptionData(perceptionType));
        enemy.InitializeTarget(target);

        return(enemy);
    }
Example #5
0
    public void SetValues()
    {
        if (stats != null)
        {
            attackerType        = stats.attackerType;
            speed               = stats.speed;
            health              = stats.health;
            basicAttackDamage   = stats.basicAttackDamage;
            basicAttackSpeed    = stats.basicAttackSpeed;
            basicAttackRange    = stats.basicAttackRange;
            basicAttackCooldown = stats.basicAttackCooldown;

            ability = stats.ability;
        }
        else
        {
            attackerType        = AttackerType.Melee;
            speed               = 3;
            health              = 10;
            basicAttackDamage   = 1;
            basicAttackSpeed    = 2;
            basicAttackRange    = 50;
            basicAttackCooldown = 0.5f;
        }
    }
Example #6
0
    GameObject LoadAttacker()
    {
        string fileName = fileNames[Random.Range(0, 3)];

        string filePath = Application.dataPath + "/" + fileName;


        StreamReader sr = new StreamReader(filePath);

        GameObject attackerHolder = new GameObject("Attacker Holder");

        int yPos = 0;


        while (!sr.EndOfStream)
        {
            string line = sr.ReadLine();

            for (int xPos = 0; xPos < line.Length; xPos++)
            {
                if (line [xPos] == 'O')
                {
                    GameObject unit = GameObject.CreatePrimitive(PrimitiveType.Cube);
                    unit.layer            = 8;
                    unit.transform.parent = attackerHolder.transform;

                    unit.transform.position = new Vector3(xPos + offsetX, yPos + offsetY, 0);
                }
            }
            yPos--;
        }

        sr.Close();



        if (fileName == fileNames[0])
        {
            attackerHolder.AddComponent <MidPlaneAttacker> ();
            type = AttackerType.MID;
        }

        if (fileName == fileNames[1])
        {
            attackerHolder.AddComponent <FrontPlaneAttacker> ();
            type = AttackerType.FRONT;
        }

        if (fileName == fileNames[2])
        {
            attackerHolder.AddComponent <BackPlaneAttacker> ();
            type = AttackerType.BACK;
        }

        return(attackerHolder);
    }
Example #7
0
    public void WeakAttack(int idx)
    {
        curAttackerType = AttackerType.weak;
        curDamage       = weakAttackerTransList[idx].damage;
        weakAttackerTransList[idx].attacker.SetActive(true);

        Vector3 tempOriginPos = weakAttackerTransList[idx].originPos;

        tempOriginPos.x *= attackDir;
        weakAttackerTransList[idx].attacker.transform.localPosition = tempOriginPos;
    }
Example #8
0
    public void StrongAttack(int idx)
    {
        curAttackerType = AttackerType.strong;
        curDamage       = strongAttackerTransList[idx].damage;
        strongAttackerTransList[idx].attacker.SetActive(true);

        Vector3 tempOriginPos = strongAttackerTransList[idx].originPos;

        tempOriginPos.x *= attackDir;
        strongAttackerTransList[idx].attacker.transform.localPosition = tempOriginPos;
    }
        /// <summary>
        /// 弾を初期化する基本メソッド
        /// </summary>
        /// <param name="attackerType">弾を発射したキャラの所属</param>
        /// <param name="position">発射時の発射キャラの位置</param>
        /// <param name="velocity">弾の移動ベクトル</param>
        /// <param name="data">弾の基本情報</param>
        /// <param name="target">弾のターゲット</param>
        /// <param name="offset">弾の初期位置からの相対距離</param>
        virtual public void Initialize(AttackerType attackerType, Vector3 position, Vector3 velocity, BulletData data, GameObject target, Vector3 offset)
        {
            gameObject.SetActive(true);

            AttackerType       = attackerType;
            transform.position = position + offset;
            Velocity           = velocity * data.Speed;
            InitializeTime     = Time.time;
            Data   = data;
            Target = target;
        }
 public UIBattleTipInfo(uint hitMcbGuid, BattleTipType battleTipType, AttackerType attackerType, int diffHp, int elementHp, float scale, int elementType,
                        string spriteImagePath, Vector3 startPos, Vector2 offset, Vector2 randomRange, float disappearTime)
 {
     HitMCB_GUID     = hitMcbGuid;
     BattleTipType   = battleTipType;
     AttackerType    = attackerType;
     DiffHP          = diffHp;
     ElementHP       = elementHp;
     Scale           = scale;
     ElementType     = elementType;
     SpriteImagePath = spriteImagePath;
     StartPos        = startPos;
     Offset          = offset;
     RandomRange     = randomRange;
     DisappearTime   = disappearTime;
 }
    private AttackData GetAttackerData(AttackerType attackerType)
    {
        switch (attackerType)
        {
        case AttackerType.None:
        case AttackerType.Slow:
            return(new AttackData(Constants.SLOW_TIME_BETWEEN_ATTACKS, Constants.SLOW_PROJECTILE_SPEED, Constants.ENEMY_PROJECTILE_NAME));

        case AttackerType.Medium:
            return(new AttackData(Constants.MEDIUM_TIME_BETWEEN_ATTACKS, Constants.MEDIUM_PROJECTILE_SPEED, Constants.ENEMY_PROJECTILE_NAME));

        case AttackerType.Fast:
            return(new AttackData(Constants.FAST_TIME_BETWEEN_ATTACKS, Constants.FAST_PROJECTILE_SPEED, Constants.ENEMY_PROJECTILE_NAME));

        default:
            throw new NotImplementedException("AttackerType not implemented: " + attackerType);
        }
    }
Example #12
0
        /// <summary>
        /// 発射した場所に向かって飛ぶ弾を発射するメソッド
        /// </summary>
        /// <param name="bulletNum">発射する弾数</param>
        /// <param name="attackerType">発射するキャラの所属</param>
        /// <param name="position">発射位置</param>
        /// <param name="shape">弾幕の形</param>
        /// <param name="bulletType">弾の種類</param>
        /// <param name="data">弾の基本データ</param>
        /// <param name="time">連射時の発射角度に影響する時間情報</param>
        /// <param name="angularSpeed">連射時に変化する角速度</param>
        /// <param name="axis">連射時に変化する基準軸</param>
        /// <param name="throughShootPoint">発射位置を通り過ぎて対称点で消失するフラグ</param>
        /// <param name="distanceFromShootPoint">通過位置を発射位置からズラす距離</param>
        public void Shot(int bulletNum, AttackerType attackerType, GameObject shooter, Vector3[] directions, BulletData data, GameObject target, float time, float angularSpeed, Vector3 axis, bool throughShootPoint, float distanceFromShootPoint)
        {
            var bullets = ObjectPools.Instance.GetBullet(bulletNum, data.BulletType);

            if (data.BulletType == BulletType.Curve)
            {
                SetRotateOrigin(bullets, shooter, data);
            }
            else if (data.BulletType == BulletType.Funnel)
            {
                SetRotateOrigin(bullets, shooter, data, target);
            }

            if (directions == default)
            {
                directions = ShotManager.Instance.RandomVectors(bulletNum);
            }

            if (time != 0.0f && angularSpeed != 0 && axis != default)
            {
                var rotate = Quaternion.AngleAxis(time * angularSpeed, axis);
                for (int i = 0; i < bulletNum; i++)
                {
                    directions[i] = rotate * directions[i];
                }
            }

            Vector3[] offsets      = new Vector3[bulletNum];
            var       backDistance = -data.Speed * data.ValidTime;

            if (throughShootPoint)
            {
                backDistance /= 2;
            }
            for (int i = 0; i < bulletNum; i++)
            {
                offsets[i] = directions[i] * backDistance;
            }

            var position = shooter.transform.position;

            for (int i = 0; i < bulletNum; i++)
            {
                Shot(bullets[i], attackerType, position, directions[i], data, default, offsets[i] + directions[i].GetOrthogonalUnitVector() * distanceFromShootPoint);
Example #13
0
        /// <summary>
        /// 弾を複数発射する一番基本的なメソッド
        /// </summary>
        /// <param name="bulletNum">発射する弾数</param>
        /// <param name="attackerType">発射するキャラの所属</param>
        /// <param name="position">発射位置</param>
        /// <param name="velocity">弾の進行方向</param>
        /// <param name="bulletType">弾の種類</param>
        /// <param name="data">弾の基本データ</param>
        /// <param name="randomDiffusion">弾のブレをランダムにするFlag</param>
        /// <param name="bulletShake">弾のブレ(0.0-1.0)</param>
        public void Shot(int bulletNum, AttackerType attackerType, GameObject shooter, BulletType bulletType, BulletData data, GameObject aim, GameObject target, bool randomDiffusion, float bulletShake)
        {
            var bullets = ObjectPools.Instance.GetBullet(bulletNum, bulletType);

            Vector3 velocity = default;

            if (aim != default)
            {
                velocity = (aim.transform.position - shooter.transform.position).normalized;
            }
            else
            {
                velocity = shooter.transform.forward;
            }

            if (data.BulletType == BulletType.Curve)
            {
                SetRotateOrigin(bullets, shooter, data);
            }
            else if (data.BulletType == BulletType.Funnel)
            {
                SetRotateOrigin(bullets, shooter, data, target);
            }

            var position = shooter.transform.position;

            if (randomDiffusion || bulletShake == default)
            {
                foreach (BaseBullet bullet in bullets)
                {
                    Shot(bullet, attackerType, position, velocity.RandamShake(MAX_SHAKE * bulletShake), data, target);
                }
            }
            else
            {
                var newVelocitys = FixedShake(velocity, MAX_SHAKE * bulletShake, bulletNum);
                for (int i = 0; i < bulletNum; i++)
                {
                    Shot(bullets[i], attackerType, position, newVelocitys[i], data, target);
                }
            }
        }
        private void HandleCommonTip(uint mcGUID, BattleTipType battleTipType)
        {
            if (!EnableUIBattleTip)
            {
                return;
            }
            if ((int)battleTipType >= (int)BattleTipType.FollowDummySeparate)
            {
                return;
            }

            AttackerType attackerType = AttackerType.None;

            MechaComponent mc_owner = ClientBattleManager.Instance.FindMechaComponent(mcGUID);

            if (ClientBattleManager.Instance.PlayerMecha != null && mc_owner != null)
            {
                attackerType = GetAttackerType(mc_owner.Mecha.MechaInfo, ClientBattleManager.Instance.PlayerMecha.MechaInfo, battleTipType);
            }

            if (attackerType == AttackerType.NoTip)
            {
                return;
            }

            UIBattleTipInfo info = new UIBattleTipInfo(
                0,
                battleTipType,
                attackerType,
                0,
                0,
                0.13f,
                0,
                "",
                mc_owner.transform.position + Vector3.up * 1f,
                Vector2.zero,
                Vector2.one,
                0.5f);

            CreateTip(info);
        }
Example #15
0
        /// <summary>
        /// ShotDataをもとにActionを生成するメソッド
        /// </summary>
        /// <param name="shotData">発射するShotData</param>
        /// <returns></returns>
        private UnityAction <float> GetUnityAction(AttackerType attackerType, ShotData shotData, BulletData bulletData, GameObject aim, GameObject target)
        {
            // var position = shooter.transform.position; //発射位置を固定したい場合はキャッシュしておく ※固定するとFunnelから出る弾の発射位置も移動しなくなるので注意
            var velocity = (aim == default) ? default : (aim.transform.position - transform.position).normalized;

                           Vector3[] directions = ShotManager.Instance.GetShotShape(shotData.AllRangeShotShape, shotData.GetBulletNum, RandomNum);
                           switch (shotData.ShotType)
                           {
                           case ShotType.Normal:
                               return((t) => ShotManager.Instance.NormalShot.Shot(shotData.GetBulletNum, attackerType, gameObject, bulletData.BulletType,
                                                                                  bulletData, aim, target, shotData.RandomDiffusion, shotData.BulletShake));

                           case ShotType.AllRange:
                               if (velocity != default && shotData.AllRangeShotShape == AllRangeShotShape.Plane)
                               {
                                   for (int i = 0; i < shotData.BulletNum; i++)
                                   {
                                       directions[i].TransformDirection(velocity);
                                   }
                               }
                               return((t) => ShotManager.Instance.AllRangeShot.Shot(shotData.GetBulletNum, attackerType, gameObject, directions, bulletData, target, t,
                                                                                    shotData.AngularSpeed, shotData.Axis));

                           case ShotType.Gather:
                               var gatherAtTarget = target != default && shotData.GatherAtTarget;
                               if (velocity != default && shotData.AllRangeShotShape == AllRangeShotShape.Plane)
                               {
                                   for (int i = 0; i < shotData.BulletNum; i++)
                                   {
                                       directions[i] = directions[i].TransformDirection(velocity);
                                   }
                               }
                               return((t) => ShotManager.Instance.GatherShot.Shot(shotData.GetBulletNum, attackerType, gatherAtTarget ? target : gameObject, directions,
                                                                                  bulletData, target, t, shotData.AngularSpeed, shotData.Axis, shotData.PassGatherPoint, shotData.DistanceFromGatherPoint));

                           default:
                               return(default);
                           }
        }
 public override void Initialize(AttackerType attackerType, Vector3 position, Vector3 velocity, BulletData data, GameObject target, Vector3 offset)
 {
     base.Initialize(attackerType, position, velocity, data, target, offset);
     FirstContact = false;
     IsEnable     = false;
 }
Example #17
0
 /// <summary>
 /// 弾を発射する一番基本的なメソッド
 /// </summary>
 /// <param name="bullet">発射する弾</param>
 /// <param name="attackerType">発射するキャラの所属</param>
 /// <param name="position">発射位置</param>
 /// <param name="velocity">弾の進行方向</param>
 /// <param name="data">弾の基本データ</param>
 /// <param name="offset">発射位置からズレるVector</param>
 protected void Shot(BaseBullet bullet, AttackerType attackerType, Vector3 position, Vector3 velocity, BulletData data, GameObject target = default, Vector3 offset = default)
 {
     bullet.Initialize(attackerType, position, velocity, data, target, offset);
 }
Example #18
0
 public Panel(int row, int column, AttackerType attackerType)
 {
     Coordinates  = new BoardPosition(row, column);
     AttackerType = attackerType;
 }
Example #19
0
 void Start()
 {
     AttackerType = transform.parent.GetComponent <FlyCharacterStatus>().AttackerType;
     GetComponent <SphereCollider>().radius = Radius;
 }
    public void init(AttackerType attackerType, AttackType aType, BaseSkillData hsd = null, TranscendData td = null, int[] transcendLevel = null, bool isFromHeroSkill = false)
    {
        //Log.log("init attackdata!!!");
        if (td != null)
        {
            for (int i = attrOriginal.Length - 1; i >= 0; --i)
            {
                if (isFromHeroSkill)
                {
                    attr[i] = td.getValueByATTR(transcendLevel, attrOriginal[i].Get(), E_ATTR_STR[i]);
                }
                else
                {
                    attr[i] = td.getValueByATTR(transcendLevel, attrOriginal[i].Get(), ATTR_STR[i]);
                }
            }
        }

        cm = GameManager.me.characterManager;

        _skillData = hsd;

        switch (type)
        {
        case NONE_0:
            chracterMove = moveStay;

            monsterShoot  = shootMonster0;
            playerShoot   = shootPlayer0;
            playSkill     = playSkillRightNow;
            preDamageCalc = damageCalc0;


            if (_skillData.skillDataType == BaseSkillData.SkillDataType.Hero && _skillData.targeting == 1)
            {
                targetRange = _skillData.targetAttr[1];
            }

            break;

        case SHORT_1:         //1
            //len = 1;
            chracterMove = moveShortAttackType;

            if (aType == AttackType.Attack)
            {
                monsterShoot  = shootMonster1;
                playerShoot   = shootPlayer1;
                preDamageCalc = damageCalc0;
            }

            playSkill = playSkillNormal;

            break;

        case SHORT_RANGE_2:          //2
            //len = 3; //데미지범위	최소데미지비율	최대타겟유닛수

            chracterMove = moveShortAttackType;

            if (aType == AttackType.Attack || aType == AttackType.Skill)
            {
                monsterShoot  = shootMonster2;
                playerShoot   = shootPlayer2;
                preDamageCalc = damageCalc0;
            }

            playSkill = playSkillNormal;

            break;

        case LINE_3:         //3

            if (attackerType == AttackerType.Hero)
            {
                skillMove = moveSkillHeroMonsterLineType;
            }

            chracterMove = moveLineType;

            if (aType == AttackType.Attack || aType == AttackType.Skill)
            {
                monsterShoot  = shootMonsterBullet3;
                playerShoot   = shootPlayerBullet3;
                preDamageCalc = damageCalc0;
            }

            playSkill = playSkillLinear;

            break;

        case LINE_RANGE_4:         //4

            if (attackerType == AttackerType.Hero)
            {
                skillMove = moveSkillHeroMonsterLineType;
            }

            chracterMove = moveLineType;

            if (aType == AttackType.Attack || aType == AttackType.Skill)
            {
                monsterShoot  = shootMonsterBullet4;
                playerShoot   = shootPlayerBullet4;
                preDamageCalc = damageCalc0;
            }

            playSkill = playSkillLinear;

            break;


        case LINE_PASS_5:         //5

            if (attackerType == AttackerType.Hero)
            {
                skillMove   = moveSkillHeroMonsterLineType;
                targetRange = attr[4];
            }

            chracterMove = moveLineType;

            if (aType == AttackType.Attack || aType == AttackType.Skill)
            {
                monsterShoot  = shootMonsterBullet5;
                playerShoot   = shootPlayerBullet5;
                preDamageCalc = damageCalc0;
            }

            playSkill = playSkillLinear;

            break;

        case CURVE_RANGE_6:         //6
            //len = 4; //타임리밋	데미지범위	최소데미지비율	최대타겟유닛수

            if (attackerType == AttackerType.Hero)
            {
                skillMove   = moveSkillHeroMonsterLineType;
                targetRange = attr[1];
                maxHit      = attr[3];
            }

            chracterMove = moveLineType;

            if (aType == AttackType.Attack || aType == AttackType.Skill)
            {
                monsterShoot  = shootMonsterBullet6;
                playerShoot   = shootPlayerBullet6;
                preDamageCalc = damageCalc0;
            }

            playSkill = playSkillNormal;

            break;

        case DROP_RANGE_7:         //7
            //len = 4; //타임리밋	데미지범위	최소데미지비율	최대타겟유닛수

            if (attackerType == AttackerType.Hero)
            {
                skillMove = moveSkillHeroMonsterLineType;

                targetRange = attr[1];
                maxHit      = attr[3];
            }

            chracterMove = moveLineType;

            if (aType == AttackType.Attack || aType == AttackType.Skill)
            {
                monsterShoot  = shootMonsterBullet7;
                playerShoot   = shootPlayerBullet7;
                preDamageCalc = damageCalc0;
            }

            playSkill = playSkillNormal;

            break;

        case CIRCLE_RANGE_8:

            if (attackerType == AttackerType.Hero)
            {
                skillMove   = moveSkillHeroMonsterLineType;
                targetRange = attr[0];
                maxHit      = attr[2];
            }

            chracterMove = moveLineType;

            if (aType == AttackType.Attack || aType == AttackType.Skill)
            {
                monsterShoot  = shootMonsterBullet8;
                playerShoot   = shootPlayerBullet8;
                preDamageCalc = damageCalc0;
            }

            playSkill = playSkillNormal;

            //len = 3; //데미지범위	최소데미지비율	최대타겟유닛수
            break;

        case FIXED_EFFECT_9:
            //len = 4; //최대타겟유닛수	이펙트타입	이펙트Z/R	이펙트X
            if (attackerType == AttackerType.Hero)
            {
                skillMove = moveSkillHeroMonsterLineType;

                // 11~12 사각기둥. 21~22. 원기둥.
                if (attr[1] > 12)
                {
                    targetRange = attr[2];
                }
                else
                {
                    targetRange = attr[3];
                }

                maxHit = attr[0];
            }

            chracterMove = moveLineType;

            if (aType == AttackType.Attack || aType == AttackType.Skill)
            {
                monsterShoot  = shootMonsterBullet9;
                playerShoot   = shootPlayerBullet9;
                preDamageCalc = damageCalc0;
            }

            playSkill = playSkillNormal;


            break;

        case CONTINUE_FIXED_EFFECT_10:         //최대타겟유닛수	지속시간	이펙트타입	이펙트Z/R	이펙트X
            //len = 5;
            if (attackerType == AttackerType.Hero)
            {
                skillMove = moveSkillHeroMonsterLineType;

                // 11~12 사각기둥. 21~22. 원기둥.
                if (attr[2] > 12)
                {
                    targetRange = attr[3];
                }
                else
                {
                    targetRange = attr[4];
                }


                maxHit = attr[0];
            }

            chracterMove = moveLineType;

            if (aType == AttackType.Attack || aType == AttackType.Skill)
            {
                monsterShoot  = shootMonsterBullet10;
                playerShoot   = shootPlayerBullet10;
                preDamageCalc = damageCalc0;
            }

            playSkill = playSkillNormal;



            break;

        case CURVE_AFTER_CONTINUE_FIXED_EFFECT_11:         //타임리밋	최대타겟유닛수	지속시간	이펙트타입	이펙트Z/R	이펙트X
            //len = 6;
            if (attackerType == AttackerType.Hero)
            {
                skillMove = moveSkillHeroMonsterLineType;

                // 11~12 사각기둥. 21~22. 원기둥.
                if (attr[3] > 12)
                {
                    targetRange = attr[4];
                }
                else
                {
                    targetRange = attr[5];
                }

                maxHit = attr[1];
            }

            chracterMove = moveLineType;

            if (aType == AttackType.Attack || aType == AttackType.Skill)
            {
                monsterShoot  = shootMonsterBullet11;
                playerShoot   = shootPlayerBullet11;
                preDamageCalc = damageCalc0;
            }

            playSkill = playSkillNormal;



            break;

        case ATTACH_BULLET_12:
            //len = 5; // 최대타겟유닛수	지속시간	이펙트타입	이펙트Z/R	이펙트X
            if (attackerType == AttackerType.Hero)
            {
                skillMove = moveSkillHeroMonsterLineType;
            }

            chracterMove = moveLineType;

            if (aType == AttackType.Attack || aType == AttackType.Skill)
            {
                monsterShoot  = shootMonsterBullet12;
                playerShoot   = shootPlayerBullet12;
                preDamageCalc = damageCalc0;
            }

            playSkill = playSkillLoop;

            break;

        case TIME_BOMB_13:         //13

#if UNITY_EDITOR
            Debug.Log("==== 안쓰는 것!!!! ====!!!!");
#endif

            //len = 4; //폭발대기시간	  데미지범위	최소데미지비율	최대타겟유닛수
            if (attackerType == AttackerType.Hero)
            {
                chracterMove = moveLineType;
                skillMove    = moveSkillHeroMonsterLineType;
            }
            else if (attackerType == AttackerType.Unit)
            {
                chracterMove = moveLineType;
            }

            if (aType == AttackType.Attack || aType == AttackType.Skill)
            {
                monsterShoot = shootMonsterBullet12;
                playerShoot  = shootPlayerBullet12;
            }

            playSkill = playSkillNormal;

            break;

        case LAND_MINE_14:         //14

            //len = 4; //데미지범위	최소데미지비율	최대타겟유닛수  자연폭발시간
            if (attackerType == AttackerType.Hero)
            {
                chracterMove = moveLandMineType;             //moveLandMineAttackType;
                skillMove    = moveLandMineType;             //moveLandMineAttackType;
            }
            else if (attackerType == AttackerType.Unit)
            {
                chracterMove = moveLandMineType;                //moveLandMineAttackType;
            }

            if (aType == AttackType.Attack || aType == AttackType.Skill)
            {
                monsterShoot  = shootMonsterBullet14;
                playerShoot   = shootPlayerBullet14;
                preDamageCalc = damageCalc0;
            }

            playSkill = playSkillNormal;

            break;

        case CHAIN_LIGHTING_15:           //15

//			Debug.Log("==== 수정해야함 ====!!!!");

            //len = 3; //최대전체거리	최대연결거리A	최대연결거리B	최대연결유닛수	연결딜레이
            if (attackerType == AttackerType.Hero)
            {
                skillMove = moveSkillHeroMonsterLineType;
            }

            chracterMove = moveLineType;

            if (aType == AttackType.Attack || aType == AttackType.Skill)
            {
                monsterShoot  = shootMonsterBullet15;
                playerShoot   = shootPlayerBullet15;
                preDamageCalc = damageCalc0;
            }

            playSkill = playSkillLoop;

            break;


        case SCREEN_ATTACK_16:

            // 이동은 수정해야함. 그런데 굳이 할 필요는 없을듯???
            if (attackerType == AttackerType.Hero)
            {
                skillMove   = moveSkillHeroMonsterLineType;
                targetRange = attr[0];
            }

            chracterMove = moveLineType;

            if (aType == AttackType.Attack || aType == AttackType.Skill)
            {
                monsterShoot  = shootMonsterBullet16;
                playerShoot   = shootPlayerBullet16;
                preDamageCalc = damageCalc0;
            }

            playSkill = playSkillNormal;



            break;

        case METHEO_17:         //17

            if (attackerType == AttackerType.Hero)
            {
                skillMove   = moveSkillHeroMonsterLineType;
                targetRange = attr[5];
                maxHit      = attr[3];
            }

            chracterMove = moveLineType;

            if (aType == AttackType.Attack || aType == AttackType.Skill)
            {
                monsterShoot  = shootMonsterBullet17;
                playerShoot   = shootPlayerBullet17;
                preDamageCalc = damageCalc0;
            }

            playSkill = playSkillNormal;

            break;


        case CHASER_18:         //18

            if (attackerType == AttackerType.Hero)
            {
                skillMove = moveSkillHeroMonsterLineType;
            }

            chracterMove = moveLineType;

            if (aType == AttackType.Attack || aType == AttackType.Skill)
            {
                monsterShoot  = shootMonsterBullet18;
                playerShoot   = shootPlayerBullet18;
                preDamageCalc = damageCalc0;
            }

            playSkill = playSkillLinear;

            break;
        }
    }