Example #1
0
        private void InitSequences()
        {
            var   worldMap        = SpaceUtil.WorldMap;
            float startYPosition  = worldMap.Top.y + SpriteMap.HeightHalf;
            float targetYPosition = (worldMap.Center.y + (worldMap.Top.y * 2f)) * 0.333f;

            float   yDiff        = targetYPosition - startYPosition;
            Vector3 moveDistance = new Vector3(0, yDiff, 0);

            float rotateTimeHalf = RotateTime * 0.5f;

            // Initial sequence
            var moveDown          = new MoveBy(this, moveDistance, InitialTravelTime);
            var setVelocity       = new GameTaskFunc(this, () => Velocity = new Vector2(0, -FinalTravelSpeed));
            var initialRotateLeft = new RotateTo(this, AngleDown, MinAngle, rotateTimeHalf);

            var initialSequence = new Sequence(moveDown, setVelocity, initialRotateLeft);

            // Infinite sequence
            var fireLeft      = new GameTaskFunc(this, FireLeft);
            var rotateMiddle1 = new RotateTo(this, MinAngle, AngleDown, rotateTimeHalf);
            var fireDown      = new GameTaskFunc(this, FireDown);
            var rotateRight   = new RotateTo(this, AngleDown, MaxAngle, rotateTimeHalf);
            var fireRight     = new GameTaskFunc(this, FireRight);
            var rotateMiddle2 = new RotateTo(this, MaxAngle, AngleDown, rotateTimeHalf);
            var rotateLeft    = new RotateTo(this, AngleDown, MinAngle, rotateTimeHalf);

            var infiniteSequence = new Sequence(fireLeft, rotateMiddle1, fireDown,
                                                rotateRight, fireRight, rotateMiddle2, fireDown, rotateLeft);

            var repeat = new RepeatForever(infiniteSequence);

            Behavior = new EndlessSequence(repeat, initialSequence);
        }
Example #2
0
        public void Fire(float fireStrategyOverflowDt)
        {
            if (gameObject.activeSelf && FireTimer.Activated)
            {
                var bullets = PoolManager.Instance.BulletPool.GetMany <OthelloBullet>(Level, FirePosition, Level);

                float offsetX = -(BulletSpread * (Level - 1) * 0.5f);
                for (int i = 0; i < bullets.Length; i++)
                {
                    OthelloBullet bullet = bullets[i];
                    bullet.OthelloDamage = Damage;

                    bullet.PositionX += offsetX;

                    bullet.RunFrame(fireStrategyOverflowDt, fireStrategyOverflowDt);

                    if (!SpaceUtil.PointIsInBounds(bullet.transform.position))
                    {
                        bullet.RunTask(GameTaskFunc.DeactivateSelf(bullet));
                    }

                    offsetX += BulletSpread;
                }

                FireTimer.TouchTimer();
            }
        }
Example #3
0
        protected override void OnEnemySpawn()
        {
#if !UNITY_EDITOR
            // Despawn next frame
            var deactivate = GameTaskFunc.DeactivateSelf(this);
            RunTask(deactivate);
#endif
        }
Example #4
0
        protected override void OnPlayerBulletInit()
        {
            float worldHeight = SpaceUtil.WorldMap.Height;

            var spriteHeight = Sprite.size.y;
            var heightScale  = worldHeight / spriteHeight;

            transform.localScale = new Vector3(1, heightScale, 1);

            var delay        = new Delay(this, FullBrightTime);
            var removeActive = new GameTaskFunc(this, () => HitBoxActive = false);
            var fadeTo       = new FadeTo(this, 0.0f, FadeTime);
            var deactivate   = GameTaskFunc.DeactivateSelf(this);

            Behavior = new Sequence(delay, removeActive, fadeTo, deactivate);
        }
        protected sealed override void OnPlayerBulletInit()
        {
            const float BlinkAlpha    = 0.5f;
            const float BlinkDelay    = 0.05f;
            var         blinkOut      = new GameTaskFunc(this, () => Alpha = BlinkAlpha);
            var         blinkDelay    = new Delay(this, BlinkDelay);
            var         blinkIn       = new GameTaskFunc(this, () => Alpha = 1.0f);
            var         turnOffDamage = new GameTaskFunc(this, () => DamageActive = false);

            var fade       = new FadeTo(this, 0f, 1.0f);
            var deactivate = new GameTaskFunc(this, DeactivateSelf);

            FadeOutSequence = new Sequence(blinkOut, blinkDelay, blinkIn, blinkDelay,
                                           blinkOut, blinkDelay, blinkIn, turnOffDamage, fade, deactivate);

            OnSmiteBulletInit();
        }
        protected override void OnInit()
        {
            var initialSize = GetComponent <Renderer>().bounds.size;

            float spawnMinX = SpaceUtil.WorldMap.Left.x + initialSize.x;
            float spawnMinY = (SpaceUtil.WorldMap.Bottom.y + SpaceUtil.WorldMap.Center.y) * 0.5f;

            SpawnMin = new Vector2(spawnMinX, spawnMinY);

            float spawnMaxX = SpaceUtil.WorldMap.Right.x - initialSize.x;
            float spawnMaxY = (SpaceUtil.WorldMap.Center.y + SpaceUtil.WorldMap.Top.y) * 0.5f;

            SpawnMax = new Vector2(spawnMaxX, spawnMaxY);

            var activateCanCollide = new GameTaskFunc(this, () => CanCollide = true);

            float fullBrightAlpha = Alpha;

            var entranceFadeIn   = new FadeTo(this, 0f, fullBrightAlpha, FadeTime);
            var entranceScaleIn  = new ScaleTo(this, float.Epsilon, LocalScale, FadeTime);
            var entranceSequence = new Sequence(entranceFadeIn, entranceScaleIn, activateCanCollide);

            var fadeOut            = new FadeTo(this, fullBrightAlpha, TravelAlpha, FadeTime);
            var fadeOutEase        = new EaseIn3(fadeOut);
            var scaleOut           = new ScaleTo(this, LocalScale, TravelSizeScale, FadeTime);
            var scaleOutEase       = new EaseIn3(scaleOut);
            var fadeOutConcurrence = new ConcurrentGameTask(fadeOutEase, scaleOutEase);

            TravelMove     = MoveTo.Default(this, 1.0f);
            TravelMoveEase = new EaseInOut(TravelMove);

            var fadeIn            = new FadeTo(this, TravelAlpha, fullBrightAlpha, FadeTime);
            var scaleIn           = new ScaleTo(this, TravelSizeScale, LocalScale, FadeTime);
            var fadeInConcurrence = new ConcurrentGameTask(fadeIn, scaleIn);

            TravelSequence = new Sequence(fadeOutConcurrence, TravelMoveEase, fadeInConcurrence, activateCanCollide);

            CanCollide         = false;
            LocalScale         = float.Epsilon;
            transform.position = SpaceUtil.WorldMap.Center;
            RunTask(entranceSequence);
        }
        protected override void OnEnemyBulletInit()
        {
            LaserColor = SpriteColor;

            float worldHeight = SpaceUtil.WorldMap.Height;

            LocalScaleX = worldHeight * MathUtil.Sqrt2;

            var sprite = GetComponent <SpriteRenderer>();

            WidthHalf = sprite.size.x * 0.5f * transform.localScale.x;

            var fadeIn           = new FadeTo(this, 0f, PrefireColor.a, FadeInTime);
            var prefireDelay     = new Delay(this, PrefireFullBrightTime);
            var activateCollider = new GameTaskFunc(this, ActivateCollider);
            var postfireDelay    = new Delay(this, FullBrightTime);
            var fadeTo           = new FadeTo(this, 0.0f, FadeTime);
            var deactivate       = GameTaskFunc.DeactivateSelf(this);

            Behavior = new Sequence(fadeIn, prefireDelay, activateCollider, postfireDelay, fadeTo, deactivate);
        }
        protected override void OnPermanentVelocityBulletInit()
        {
            Scale = SpaceUtil.WorldMap.Height;

            var scaleIn   = new ScaleTo(this, float.Epsilon, Scale, ScaleInTime);
            var scaleEase = new EaseIn3(scaleIn);

            MoveToCenter = new MoveTo(this, Vector3.zero, new Vector3(1f, 1f), ScaleInTime);

            var scaleAndMove = new ConcurrentGameTask(scaleEase, MoveToCenter);

            var calmExplosion = new GameTaskFunc(this, () => IsExploding = false);

            var fade     = new FadeTo(this, 0, FadeTime);
            var fadeEase = new EaseOut(fade);

            Sequence = new Sequence(scaleAndMove, calmExplosion, fadeEase);

            //ManagedMiscSprites = new List<ValkyrieSprite>();
            ManagedEnemies       = new TrackedPooledObjectSet <Enemy>();
            ManagedEnemyBullets  = new TrackedPooledObjectSet <EnemyBullet>();
            ManagedPlayerBullets = new TrackedPooledObjectSet <PlayerBullet>();
            ManagedPickups       = new TrackedPooledObjectSet <Pickup>();
        }
Example #9
0
 protected override void OnPlayerBulletInit()
 {
     EnableProjectiles  = new GameTaskFunc(this, () => CanShootProjectiles = true);
     DisableProjectiles = new GameTaskFunc(this, () => CanShootProjectiles = false);
     ProjectileTimer    = new LoopingFrameTimer(TimeBetweenProjectiles);
 }