private void OnDestroy() { Behavior.Stop(); destroySubject.OnNext(Unit.Default); destroySubject.OnCompleted(); destroySubject = null; Behavior = null; }
public Mob ShotMob(Vector3 position, float angle, float speed, EnemyShotBehavior behavior = null) { behavior = behavior ?? new NullEnemyShotBehavior(); position += new Vector3(0, 0, 10); var shot = BulletRenderer.ShotMob(position, angle, speed, behavior, this); return(shot); }
public void InitializeBullet(EnemyShotBehavior behavior, EnemyApi api) { this.Behavior = behavior; this.Api = api; IsVisible = true; Behavior.Initialize(this); Behavior.Start(); }
/// <summary> /// モブを発射します。 /// </summary> /// <returns>発射したモブを表すオブジェクト。</returns> /// <param name="source">発射地点。</param> /// <param name="angle">発射する角度。</param> /// <param name="speed">発射する速度。</param> public Mob ShotMob(Vector3 source, float angle, float speed, EnemyShotBehavior behavior, EnemyApi api) { var shot = GameManager.I.PoolManager.GetInstance(ObjectPoolManager.Kind.Mob); if (shot != null) { return(InitializeShot(shot, behavior, Mobs, source, angle, speed, api)); } return(null); }
private TShot InitializeShot <TShot>(GameObject shot, EnemyShotBehavior behavior, List <TShot> list, Vector3 source, float angle, float speed, EnemyApi api) where TShot : EnemyShot { shot.transform.position = source; shot.transform.SetEulerAnglesZ(0); shot.transform.parent = SpriteStudioManager.I.ManagerDraw.transform; var velocity = Vector2Extensions.FromAngleLength(angle, speed); var rigidbody = shot.GetComponent <Rigidbody2D>(); rigidbody.velocity = velocity; var script = shot.GetComponent <TShot>(); script.InitializeBullet(behavior, api); script.DestroyEvent.Subscribe(u => list.Remove(script)); list.Add(script); shot.GetComponent <Collider2D>().enabled = true; return(script); }
public void SleepInstance(EnemyShotBehavior obj) { obj.IsActive = false; }
public EnemyShot() { destroySubject = new Subject <Unit>(); DestroyEvent = destroySubject; Behavior = new NullEnemyShotBehavior(); }
/// <summary> /// 敵キャラクターから一定距離離れた位置から弾を1つ発射します。 /// </summary> /// <returns>発射した弾を表す EnemyShot オブジェクト。</returns> /// <param name="offset">敵キャラクターから見た相対的な発射位置。</param> /// <param name="angle">発射する方向。</param> /// <param name="speed">発射するスピード。</param> public EnemyShot ShotByOffset(Vector3 offset, float angle, float speed, EnemyShotBehavior behavior = null) { var pos = Enemy.transform.position + offset.ZReplacedBy(10); return(Shot(pos, angle, speed, behavior)); }
/// <summary> /// 敵キャラクターから弾を1つ発射します。 /// </summary> /// <returns>発射した弾を表す EnemyShot オブジェクト。</returns> /// <param name="angle">発射する方向。</param> /// <param name="speed">発射するスピード。</param> public EnemyShot Shot(float angle, float speed, EnemyShotBehavior behavior = null) { return(ShotByOffset(Vector3.zero, angle, speed, behavior)); }