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); }
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(); } }
protected override void OnEnemySpawn() { #if !UNITY_EDITOR // Despawn next frame var deactivate = GameTaskFunc.DeactivateSelf(this); RunTask(deactivate); #endif }
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>(); }
protected override void OnPlayerBulletInit() { EnableProjectiles = new GameTaskFunc(this, () => CanShootProjectiles = true); DisableProjectiles = new GameTaskFunc(this, () => CanShootProjectiles = false); ProjectileTimer = new LoopingFrameTimer(TimeBetweenProjectiles); }