Ejemplo n.º 1
0
    public override void Process(GameObject entity, Asteroid asteroid, VectoredMovement vectoredMovement, Destroyable destroyable)
    {
        var asteroidRoot = GetBlackboard <Blackboard>().AsteroidRoot;

        if (destroyable.Destroyed)
        {
            destroyable.Destroyed = false;
            switch (asteroid.Size)
            {
            case AsteroidSize.Large:
                asteroid.Size = AsteroidSize.Medium;
                BreakAsteroid(asteroid, vectoredMovement, asteroidRoot);
                break;

            case AsteroidSize.Medium:
                asteroid.Size = AsteroidSize.Small;
                BreakAsteroid(asteroid, vectoredMovement, asteroidRoot);
                break;

            case AsteroidSize.Small:
                RobotArmsUtils.RunAtEndOfFrame(() => {
                    GameObject.Destroy(asteroid.gameObject);
                });
                break;
            }

            GameObject.Instantiate(destroyable.DestroyedEffect, entity.transform.position, entity.transform.rotation);
        }
    }
Ejemplo n.º 2
0
        public override void Process(GameObject entity, DelayedAction delayedAction)
        {
            if (!delayedAction.Running)
            {
                return;
            }

            delayedAction.Delay -= Time.deltaTime;

            if (delayedAction.Delay > 0)
            {
                if (delayedAction.OnUpdate != null)
                {
                    delayedAction.OnUpdate();
                }
            }
            else
            {
                if (delayedAction.OnComplete != null)
                {
                    delayedAction.OnComplete();
                }
                RobotArmsUtils.DestroyComponent(delayedAction);
            }
        }
Ejemplo n.º 3
0
 public override void Process(GameObject entity, Projectile projectile, Destroyable destroyable)
 {
     if (destroyable.Destroyed)
     {
         RobotArmsUtils.RunAtEndOfFrame(() => GameObject.Destroy(entity));
     }
 }
Ejemplo n.º 4
0
        public override void Process(GameObject entity, Expirable expirable)
        {
            expirable.TimeRemaining -= Time.deltaTime;

            if (expirable.TimeRemaining <= 0)
            {
                RobotArmsUtils.DestroyGameObject(expirable.Target);
            }
        }
Ejemplo n.º 5
0
    static void BreakAsteroid(Asteroid asteroid, VectoredMovement vectoredMovement, Transform asteroidRoot)
    {
        // New asteroid will be initialized in the above Initialize method as it is a new GameObject with new components.
        RobotArmsUtils.RunAtEndOfFrame(() => {
            var newAsteroid = GameObject.Instantiate(asteroid.gameObject) as GameObject;
            newAsteroid.transform.parent = asteroidRoot;

            RandomizeAsteroidMovement(vectoredMovement);
            SetSpriteAndBoundsForCurrentSize(asteroid);
        });
    }
Ejemplo n.º 6
0
    public override void Process(GameObject entity, Ship ship, PlayerInput input, VectoredMovement movement, Trigger2D trigger, Destroyable destroyable)
    {
        if (ship.Fuel > 0)
        {
            if (input.Thrust)
            {
                movement.Velocity += entity.transform.up * ship.ThrustForce * Time.deltaTime;
                if (movement.Velocity.magnitude > ship.MaxSpeed)
                {
                    movement.Velocity = movement.Velocity.normalized * ship.MaxSpeed;
                }

                ship.Fuel -= ship.FuelConsumptionPerSecond * Time.deltaTime;
            }

            entity.transform.Rotate(0, 0, -input.Rotation * ship.RotationSpeed * Time.deltaTime);
        }

        if (input.Fire)
        {
            RobotArmsUtils.RunAtEndOfFrame(() => {
                var projectile              = GameObject.Instantiate(ship.Projectile, ship.transform.position, ship.transform.rotation) as GameObject;
                var projectileMovement      = projectile.GetComponent <VectoredMovement>();
                projectileMovement.Velocity = projectile.transform.up * projectile.GetComponent <Projectile>().Speed;
            });
        }

        if (trigger.Colliders.Any(c => destroyable.DestroyWhenTouchingTag.Contains(c.tag)))
        {
            RobotArmsUtils.RunAtEndOfFrame(() => {
                GameObject.Instantiate(destroyable.DestroyedEffect, entity.transform.position, entity.transform.rotation);
                GameObject.Destroy(entity);
                GetBlackboard <Blackboard>().GameOverScreen.SetActive(true);
            });
        }
    }