public Fireball(Vector2 pos, bool marioIsLeft) { position = pos; shootLeft = marioIsLeft; state = new AttackFireBallState(this); physics = new BasicPhysics(this); }
private IEnumerator ResetProjectileInTimeCorutine(GameObject obj, bool isActive, float time) { yield return(new WaitForSeconds(time)); _state = null; _hitState = null; obj.SetActive(isActive); yield break; }
public void InstantiateProjectile(GameObject projectilePrefab, IProjectileState state, ProjectileInitSetting projectileInitSetting, ProjectileSetting projectileSetting) { if (projectileTypes == null) { return; } StartCoroutine(DelayProjectileSpawn(projectilePrefab, state, projectileInitSetting, projectileSetting)); }
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); }
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; }