Пример #1
0
 private void Start()
 {
     projectileInitSetting = new ProjectileInitSetting(spawnPoint.position, 30, 180, 180);
     projectileSetting     = new ProjectileSetting {
         moveSpeed = 3, lifeTime = 3, elementType = ElementType.None,
     };
 }
Пример #2
0
    public override void GenerateSkill(Character character, Skill skill)
    {
        base.GenerateSkill(character, skill);

        projectileInitSetting = new ProjectileInitSetting(sourceCaster.transform.position + Vector3.up * 0.7f, 6, 60, 100);
        projectileSetting     = new ProjectileSetting {
            moveSpeed = 3, lifeTime = 3, elementType = ElementType.Fire,
        };

        ProjectileSpawner.Instance.InstantiateProjectile(projectile, projectileState, projectileInitSetting, projectileSetting);
    }
Пример #3
0
 private void LaunchAllProjectile()
 {
     foreach (Projectile proj in projectiles)
     {
         ProjectileSetting setting = new ProjectileSetting
         {
             sourceCaster = sourceCaster,
             moveSpeed    = 10f,
             lifeTime     = 5,
             elementType  = ElementType.None,
             initialAngle = 180,
         };
         proj.Setup(new ProjectileState.StraightWithDirection(), setting);
     }
 }
Пример #4
0
    public void Setup(IProjectileState state, ProjectileSetting projectileSetting)
    {
        // 通用的setup
        if (projectileSetting.sourceCaster != null)
        {
            this.sourceCaster = projectileSetting.sourceCaster;
            this.elementType  = sourceCaster.data.attackElement;
        }
        this.moveSpeed    = projectileSetting.moveSpeed;
        this.lifeTime     = projectileSetting.lifeTime;
        this.initialAngle = projectileSetting.initialAngle;  //deg
        this.target       = projectileSetting.target;

        _state = state;
        DetectHitState();
        // 該State專屬的Setup
        _state.Setup(this);
        _hitState.HitStateSetUp(this);
    }
Пример #5
0
    private IEnumerator DelayProjectileSpawn(GameObject projectilePrefab, IProjectileState state, ProjectileInitSetting projectileInitSetting, ProjectileSetting projectileSetting)
    {
        int angleChunk = projectileInitSetting.restrictAngle / projectileInitSetting.amount;    //在限制角度中平分角度
        int angle      = projectileInitSetting.angleOffset;

        for (int i = 0; i < projectileInitSetting.amount; i++)
        {
            Transform p = ObjectPools.Instance.GetObjectInPools(projectilePrefab.name, projectileInitSetting.initialPosition).transform;
            projectileSetting.initialAngle = projectileInitSetting.initialAngle;
            p.GetComponent <Projectile>().Setup(state, projectileSetting);

            if (p.GetComponent <ParticleSystem>() != null)
            {
                p.GetComponent <ParticleSystem>().Play();
            }

            angle += angleChunk;
            yield return(new WaitForSeconds(projectileSetting.shootDelay));
        }
        yield break;
    }
Пример #6
0
    public void InstantiateProjectile(GameObject projectilePrefab, IProjectileState state, ProjectileInitSetting projectileInitSetting, ProjectileSetting projectileSetting)
    {
        if (projectileTypes == null)
        {
            return;
        }

        StartCoroutine(DelayProjectileSpawn(projectilePrefab, state, projectileInitSetting, projectileSetting));
    }