示例#1
0
 public void InitializeBullet(EnemyShotBehavior behavior, EnemyApi api)
 {
     this.Behavior = behavior;
     this.Api      = api;
     IsVisible     = true;
     Behavior.Initialize(this);
     Behavior.Start();
 }
    private IEnumerator Animate()
    {
        yield return(new WaitForSeconds(0.1f));

        var player = GameManager.I.Player;
        var enemy  = GameManager.I.Enemy;
        var api    = new EnemyApi(GameManager.I.Enemy);

        api.MoveIt(enemy.InitialPosition, 20);
        player.ForceToMove(-enemy.InitialPosition, 20);
        yield return(GameUiManager.I.AnimateGameStart());

        context.ChangeState(GameManager.PlayStateName);
        context.EventAccepter.OnRoundStartSubject.OnNext(Unit.Default);
    }
示例#3
0
    /// <summary>
    /// 敵キャラクターのステートを初期化し、動作を開始します。
    /// </summary>
    public void StartEnemyAction()
    {
        var api = new EnemyApi(Enemy)
        {
            BulletRenderer = bulletRenderer
        };
        var context = new EnemyStateContext
        {
            Api            = api,
            BulletRenderer = bulletRenderer,
            Enemy          = Enemy,
            InitialPos     = Enemy.InitialPosition,
            EventAccepter  = eventFacade,
            Behaviors      = EnemyStrategy.GetBehaviors(api).GetEnumerator()
        };

        context.ChangeState(Enemy.NextRoundStateName);
    }
    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);
    }
    /// <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);
    }
示例#6
0
 public void InitializeAsync(EnemyApi api)
 {
     Api = api;
 }
示例#7
0
 public IEnumerable <EnemyBehavior> GetBehaviors(EnemyApi api)
 {
     return(behaviors);
 }