Ejemplo n.º 1
0
 private void OnDestroy()
 {
     Behavior.Stop();
     destroySubject.OnNext(Unit.Default);
     destroySubject.OnCompleted();
     destroySubject = null;
     Behavior       = null;
 }
Ejemplo n.º 2
0
    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);
    }
Ejemplo n.º 3
0
 public void InitializeBullet(EnemyShotBehavior behavior, EnemyApi api)
 {
     this.Behavior = behavior;
     this.Api      = api;
     IsVisible     = true;
     Behavior.Initialize(this);
     Behavior.Start();
 }
Ejemplo n.º 4
0
    /// <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);
    }
Ejemplo n.º 5
0
    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;
 }
Ejemplo n.º 7
0
 public EnemyShot()
 {
     destroySubject = new Subject <Unit>();
     DestroyEvent   = destroySubject;
     Behavior       = new NullEnemyShotBehavior();
 }
Ejemplo n.º 8
0
    /// <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));
    }
Ejemplo n.º 9
0
 /// <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));
 }