예제 #1
0
        /*public void CreateMultiply(String bulletype,String shootername,Gun gun,Vector3 position,Vector3 muzzleOrientation,BulletType bt)
         * {
         *  _bullet = (GameObject) Resources.Load("MultiplyBullet/"+bulletype, typeof(GameObject));
         *  Vector3 start = position + muzzleOrientation.normalized * _bullet.transform.localScale.magnitude*SystemOption.SceneScale;
         *  start.z = SystemOption.ItemZPosition;
         *
         *  GameObject newBullet = ObjectPool.current.GetObject(_bullet);
         *
         *
         *  Bullet bullet = newBullet.GetComponent<Bullet>();
         *  bullet.SetSprite(bt);
         *  bullet.Shootout(shootername,gun,start,muzzleOrientation);
         *
         * }*/

        public void CreateTrack(String shootername, Gun gun, Vector3 position, Vector3 muzzleOrientation, float rotateper, BulletType bt)
        {
            Debug.Log("PlayerTrackShoot");
            Vector3 start = position + muzzleOrientation.normalized *
                            (SystemOption.StartBulletOffsetScale + gun.BulletSize + UpgradeTree.PlayerArchive.ExtraBulletSpecialLevel * SystemOption.ExBulletScalePerL);

            start.z = SystemOption.ItemZPosition;
            GameObject newBullet = NewObjectPool.Current.Generate("TrackBall");

            newBullet.transform.right = muzzleOrientation;
            newBullet.GetComponent <SpriteRenderer>().color = BuffColor(gun.Gunbuff);
            TrackBullet bullet = newBullet.GetComponent <TrackBullet>();

            bullet.Shootout(shootername, gun, start, rotateper);
            newBullet.GetComponent <Transform>().localScale =
                new Vector3(gun.BulletSize + UpgradeTree.PlayerArchive.ExtraBulletSpecialLevel * SystemOption.ExBulletScalePerL * SystemOption.SceneScale,
                            gun.BulletSize + UpgradeTree.PlayerArchive.ExtraBulletSpecialLevel * SystemOption.ExBulletScalePerL * SystemOption.SceneScale,
                            gun.BulletSize + UpgradeTree.PlayerArchive.ExtraBulletSpecialLevel * SystemOption.ExBulletScalePerL * SystemOption.SceneScale);
            //Debug.DrawLine(position,start,Color.red,2);
        }
예제 #2
0
        public BulletBase ShootBullet(int templateID, UnitBase shooter, UnitBase target, bool isAttack)
        {
            var        config = ConfigManager.Bullet.getRow(templateID);
            BulletBase bullet = null;

            switch (config.BulletType)
            {
            case BulletType.kCoordBullet:
                bullet = new CoordBullet(shooter, target.position);
                break;

            case BulletType.kLineBullet:
                if (config.FixRange > 0)
                {
                    var offset = (target.position - shooter.position).normalized * config.FixRange;
                    bullet = new LineBullet(shooter, shooter.position + offset);
                }
                else
                {
                    bullet = new LineBullet(shooter, target.position);
                }
                break;

            case BulletType.kPenteralBullet:
                if (config.FixRange > 0)
                {
                    var offset = (target.position - shooter.position).normalized * config.FixRange;
                    bullet = new PenetraBullet(shooter, config.DecayScale, shooter.position + offset);
                }
                else
                {
                    bullet = new PenetraBullet(shooter, config.DecayScale, target.position);
                }
                break;

            case BulletType.kReturnBullet:
                if (config.FixRange > 0)
                {
                    var offset = (target.position - shooter.position).normalized * config.FixRange;
                    bullet = new ReturnBullet(shooter, config.DecayScale, shooter.position + offset);
                }
                else
                {
                    bullet = new ReturnBullet(shooter, config.DecayScale, target.position);
                }
                break;

            case BulletType.kTrackBullet:
                bullet = new TrackBullet(shooter, target);
                break;

            default:
                throw new NotImplementedException("not implemented type " + config.BulletType.ToString());
            }
            bullet.radius       = config.Radius;
            bullet.speed        = config.Speed;
            bullet.acceleration = config.Acceleration;
            if (isAttack)
            {
                bullet.InitDamage((int)shooter.ATK.value, config.DamageType, isAttack);
            }
            else if (config.Damage > 0)
            {
                bullet.InitDamage(config.Damage, config.DamageType, isAttack);
            }
            if (config.AoeRadius > 0)
            {
                List <SkillModule.BuffEmitter> emitters = new List <SkillModule.BuffEmitter>(config.BuffEmitter.Length);
                for (int i = 0; i < config.BuffEmitter.Length; ++i)
                {
                    var emitter        = new SkillModule.BuffEmitter();
                    var emitter_config = ConfigManager.BuffEmitter.getRow(config.BuffEmitter[i]);
                    emitter.buffs = new int[emitter_config.Buffs.Length];
                    for (int n = 0; n < emitter_config.Buffs.Length; ++n)
                    {
                        emitter.buffs[n] = emitter_config.Buffs[n];
                    }
                    emitter.Caster = shooter;
                    emitter.filter = emitter_config.AoeFilter;
                    emitters[i]    = emitter;
                }
                bullet.InitAoeFile(config.AoeRadius, config.AoeDuration, config.AoeInterval, emitters);
            }
            if (config.Buffs != null && config.Buffs.Length > 0)
            {
                int[] buffs = new int[config.Buffs.Length];
                for (int n = 0; n < config.Buffs.Length; ++n)
                {
                    buffs[n] = config.Buffs[n];
                }
                bullet.InitBuff(buffs);
            }
            bullet.position = shooter.position;
            AddBullet(bullet);
            return(bullet);
        }