public void DeductShieldPoints(int _shieldPoints) { // If shield is already broken or not active, just ignore. if (Shield <= 0) { mTurnStatus = PlayerTurnStatus.Waiting; return; } mPlayerData.Shield -= _shieldPoints; PlayerInfoManager.Instance.UpdateShield(mPlayerData.Shield); // Check if shield got broken. if (mPlayerData.Shield <= 0) { AudioManager.PlayShieldDownSound(); mTurnStatus = PlayerTurnStatus.Running; // Broken sheild animation. ShakeAction2D shieldFailureShake = new ShakeAction2D(mShieldBubbleTransform, 100, 0.05f, Graph.InverseLinear); shieldFailureShake.SetShakeByDuration(0.8f, 100); ScaleToAction shieldScaleDown = new ScaleToAction(mShieldBubbleTransform, Graph.Exponential, Vector3.zero, 1.0f); shieldScaleDown.OnActionFinish += () => { mShieldBubbleSpriteRen.enabled = false; mTurnStatus = PlayerTurnStatus.Waiting; }; ActionHandler.RunAction(shieldFailureShake, shieldScaleDown); } else { mTurnStatus = PlayerTurnStatus.Waiting; } }
public void AddShieldPoints(int _shieldPoints) { AudioManager.PlayShieldUpSound(); // If re-adding the shield. if (Shield <= 0) { mPlayerData.Shield = 0; mPlayerData.Shield += _shieldPoints; PlayerInfoManager.Instance.UpdateShield(mPlayerData.Shield); // Show shield bubble and start the animation. mShieldBubbleTransform.localScale = Vector3.zero; mShieldBubbleSpriteRen.enabled = true; ScaleToAction shieldScaleUp = new ScaleToAction(mShieldBubbleTransform, Graph.InverseExponential, Vector3.one, 1.0f); ActionHandler.RunAction(shieldScaleUp); } // Else just adding on top of the shield. else { PulseAction pulse = new PulseAction( mShieldBubbleTransform, 1, Graph.Exponential, Graph.InverseExponential, 0.25f, 0.35f, Vector3.one, Vector3.one * 1.2f); ActionHandler.RunAction(pulse); mPlayerData.Shield += _shieldPoints; PlayerInfoManager.Instance.UpdateShield(mPlayerData.Shield); } }
// Public Functions /// <summary> /// Perform a transition-in selection /// </summary> public void TransitionEnter() { ScaleToAction actScaleEnter = new ScaleToAction(transform, Graph.InverseExponential, Vector3.one, 0.25f); actScaleEnter.OnActionStart += () => { transform.localScale = new Vector3(2f, 0f, 2f); }; ActionHandler.RunAction(actScaleEnter); }
private void ExecuteAttack() { mTurnStatus = EnemyTurnStatus.Running; Node targetNode = mPath.First.Next.Value; // Do not move the enemy in the grid for attack. ScaleToAction scaleUp = new ScaleToAction(this.transform, Graph.SmoothStep, Vector3.one * DungeonManager.Instance.ScaleMultiplier * 1.75f, 0.5f); scaleUp.OnActionStart += () => { AudioManager.PlayPreAtkSound(); }; MoveToAction moveToPos = new MoveToAction(this.transform, Graph.Dipper, DungeonManager.Instance.GridPosToWorldPos(targetNode.PosX, targetNode.PosY), 0.25f); ScaleToAction scaleDownHit = new ScaleToAction(this.transform, Graph.Dipper, Vector3.one * DungeonManager.Instance.ScaleMultiplier * 1.1f, 0.25f); ActionParallel hitParallel = new ActionParallel(moveToPos, scaleDownHit); hitParallel.OnActionFinish += () => { GameManager.Instance.Player.TakeDamage(typeAlgorithms[(int)UnitType].GetDamagePower()); }; DelayAction returnDelay = new DelayAction(0.1f); MoveToAction moveBack = new MoveToAction(this.transform, Graph.SmoothStep, DungeonManager.Instance.GridPosToWorldPos(PosX, PosY), 0.5f); ScaleToAction scaleDownReturn = new ScaleToAction(this.transform, Graph.SmoothStep, Vector3.one * DungeonManager.Instance.ScaleMultiplier, 0.5f); ActionParallel returnParallel = new ActionParallel(moveBack, scaleDownReturn); ActionSequence sequence = new ActionSequence(scaleUp, hitParallel, returnDelay, returnParallel); sequence.OnActionFinish = () => { mTurnStatus = EnemyTurnStatus.Processed; }; ActionHandler.RunAction(sequence); }
public GameScene() { Concurrent cameraPan; Sequence panZoomSequence = new Sequence(); //m_backpackers[2].Transform.PosX += 100; Party.Initialise(); m_introSequence = new Sequence(); m_introSequence.AddAction(Party.GetMovingOutAnimation()); #region Camera Intro Pan Forward T = 5s m_cameraIntroForwardPan = new MoveToStaticAction(Globals.TheGame, World.cam_Main.Transform, Vector2.Zero, 1); m_cameraIntroForwardPan.Timer.Interval = 5.0f; m_cameraIntroForwardPan.Interpolator = new PSmoothstepInterpolation(); ScaleToAction zoom1 = new ScaleToAction(Globals.TheGame, World.cam_Main.Transform, new Vector2(IntroZoom, IntroZoom), 1); zoom1.Timer.Interval = 3.0f; zoom1.StartScale = new Vector2(WaveZoom, WaveZoom); zoom1.Interpolator = new PSmoothstepInterpolation(); panZoomSequence.AddAction(zoom1); panZoomSequence.AddAction(new DelayAction(Globals.TheGame, 1.0f)); ScaleToAction zoom2 = new ScaleToAction(Globals.TheGame, World.cam_Main.Transform, new Vector2(IntroOnExitZoom, IntroOnExitZoom), 1); zoom2.Timer.Interval = 1.0f; zoom2.StartScale = zoom1.Target; zoom2.Interpolator = new PSmoothstepInterpolation(); panZoomSequence.AddAction(zoom2); cameraPan = new Concurrent(new PastaGameLibrary.Action[] { m_cameraIntroForwardPan, panZoomSequence }); m_introSequence.AddAction(cameraPan); m_introSequence.AddAction(new DelayAction(Globals.TheGame, 0.5f)); #endregion #region Camera pan backwards T = 3s m_cameraIntroBackwardsPan = new MoveToStaticAction(Globals.TheGame, World.cam_Main.Transform, Vector2.Zero, 1); m_cameraIntroBackwardsPan.Timer.Interval = 3.0f; m_cameraIntroBackwardsPan.Interpolator = new PSmoothstepInterpolation(); zoom1 = new ScaleToAction(Globals.TheGame, World.cam_Main.Transform, new Vector2(1.0f, 1.0f), 1); zoom1.Timer.Interval = 1.0f; zoom1.StartScale = zoom2.Target; zoom1.Interpolator = new PSmoothstepInterpolation(); cameraPan = new Concurrent(new PastaGameLibrary.Action[] { m_cameraIntroBackwardsPan, zoom1 }); m_introSequence.AddAction(cameraPan); #endregion }
public Individual(Crowd crowd, Vector2 positionInCrowd) : base() { m_transform.Position = positionInCrowd; m_transform.ParentTransform = crowd.Transform; m_spriteTransform = new Transform(); m_jumpTransform = new PastaGameLibrary.Transform(m_spriteTransform, true); m_sprite = new PastaGameLibrary.Sprite(Program.TheGame, TextureLibrary.GetSpriteSheet("perso_foule"), m_jumpTransform); m_sprite.Origin = new Vector2(0.5f, 1.0f); m_saut = new Sequence(-1); /// ///Jump animation /// Vector2 jumpTarget = new Vector2(0, (float)(Program.Random.NextDouble() * JumpHeight * 0.5 + JumpHeight * 0.5)); float movementTime = (float)(Program.Random.NextDouble() * 0.5 * JumpMovementTime + JumpMovementTime * 0.5); MoveToStaticAction jumpMovement = new MoveToStaticAction(Program.TheGame, m_jumpTransform, jumpTarget, 1); jumpMovement.Timer.Interval = movementTime; jumpMovement.Interpolator = new PBounceInterpolation(0); m_saut.AddAction(jumpMovement); m_saut.AddAction(new DelayAction(Program.TheGame, TotalJumpTime - movementTime)); /// ///Walk animation /// m_walk = new MoveToStaticAction(Program.TheGame, m_jumpTransform, new Vector2(0, 1), -1); m_walk.Timer.Interval = (float)Program.Random.NextDouble() * WalkAnimationTime * 0.5f + WalkAnimationTime * 0.5f; m_walk.Interpolator = new BooleanInterpolation(); /// ///Throw player animation /// m_throw = new Sequence(1); float intensity = 1 - Math.Min(1, m_transform.Position.Length() * 0.02f); m_throwStretch = new ScaleToAction(Program.TheGame, m_jumpTransform, new Vector2(1.0f, 1 - intensity * 0.5f), 1); m_throwStretch.Interpolator = new PSmoothstepInterpolation(); ScaleToAction throwDestretch = new ScaleToAction(Program.TheGame, m_jumpTransform, new Vector2(1.0f, 1.0f), 1); throwDestretch.Timer.Interval = 0.1f; m_throw.AddAction(m_throwStretch); MoveToStaticAction throwMovement = new MoveToStaticAction(Program.TheGame, m_jumpTransform, Vector2.Zero, 1); throwMovement.StartPosition = new Vector2(0, -20 - 30 * intensity); throwMovement.Timer.Interval = 0.4f; throwMovement.Interpolator = new PBounceInterpolation(0, 1); m_throw.AddAction(new Concurrent(new PastaGameLibrary.Action[] { throwMovement, throwDestretch })); m_actionManager = new SingleActionManager(); }
public void Use() { AudioManager.PlayButtonClickSound(); PlayerPiece player = GameManager.Instance.Player; // Focus onto player and animate player. BoardScroller.Instance.FocusCameraToPos( DungeonManager.Instance.GridPosToWorldPos(player.PosX, player.PosY), 0.2f, Graph.InverseExponential); ScaleToAction scaleUp = new ScaleToAction(player.transform, Graph.SmoothStep, Vector3.one * DungeonManager.Instance.ScaleMultiplier * 1.75f, 0.5f); ScaleToAction scaleDownHit = new ScaleToAction(player.transform, Graph.Dipper, Vector3.one * DungeonManager.Instance.ScaleMultiplier * 1.1f, 0.25f); ActionSequence smashSeq = new ActionSequence(scaleUp, scaleDownHit); smashSeq.OnActionFinish += () => { // Dramatic shake. ShakeAction2D camShake = new ShakeAction2D(Camera.main.transform, 10, 1.85f, Graph.InverseLinear); camShake.SetShakeByDuration(0.6f, 35); ActionHandler.RunAction(camShake); // Make all things take damage. for (int i = 0; i < mArrAffectedPositions.Length; i++) { DungeonBlock block = DungeonManager.Instance.DungeonBlocks[(int)mArrAffectedPositions[i].x, (int)mArrAffectedPositions[i].y]; switch (block.State) { case BlockState.EnemyPiece: if (RepeatPanelControls.NumRepeatsLeft > 0) { block.Enemy.TakeDamage(1 * RepeatPanelControls.NumRepeatsLeft); } else { block.Enemy.TakeDamage(1); } break; case BlockState.Obstacle: DungeonManager.Instance.DestroyBlock(block.PosX, block.PosY); break; } } RepeatPanelControls.ClearRepeats(); }; ActionHandler.RunAction(smashSeq); // Dismiss panel. ControlAreaManager.SetCardPanelVisibility(CardType.Smash, false); // Organise the cards. DeckManager.Instance.ReorganiseCards(); }
/// <summary> /// Perform a transition-out selection /// </summary> public void TransitionExit() { if (m_bIsAnimateSelect) { return; } ScaleToAction actScaleExit = new ScaleToAction(transform, Graph.Exponential, new Vector3(1f, 0f, 1f), 0.25f); actScaleExit.OnActionStart += () => { transform.localScale = Vector3.one; }; ActionHandler.RunAction(actScaleExit); }
/// <summary> /// Perform a transition successful selection /// </summary> public void TransitionSelect() { m_bIsAnimateSelect = true; ScaleToAction actScaleSelect = new ScaleToAction(transform, new Vector3(0f, 20f, 0f), 0.25f); actScaleSelect.OnActionStart += () => { transform.localScale = Vector3.one; }; actScaleSelect.OnActionFinish += () => { UI_PlayerTurn.Instance.ObjectPool_SelectionBox.PoolAllObjects(); m_bIsAnimateSelect = false; }; ActionHandler.RunAction(actScaleSelect); }
public ComboCounter(Player player) { m_sprite = new Sprite(Program.TheGame, TextureLibrary.GetSpriteSheet("multiplier_x1"), m_transform); m_sprite.Transform.Position = new Vector2(Game1.GameboyWidth / 2, Game1.GameboyHeight / 2 + 20); m_sprite.Transform.Scale = new Vector2(0); m_bump = new ScaleToAction(Program.TheGame, m_transform, new Vector2(2.3f, 2.3f), 1); m_bump.Interpolator = new PBounceInterpolation(0); m_bump.Timer.Interval = 0.2f; this.player = player; initialWidth = 37; m_sprite.SourceRectangle = new Rectangle(0, 0, 0, (int)m_sprite.Height); m_sprite.Origin = new Vector2(0f, 0.5f); }
protected override void Initialize() { base.Initialize(); Globals.Initialise(this); World.Initialise(this); AttackManager.Initialise(GraphicsDevice); DestructibleComponent.Initialise(); cameraMove = new MoveToStaticAction(this, World.cam_Main.Transform, new Vector2(0, -350), 1); cameraMove.Interpolator = new PSmoothstepInterpolation(); cameraMove.Timer.Interval = 1.0f; cameraZoom = new ScaleToAction(this, World.cam_Main.Transform, new Vector2(0.5f, 0.5f), 1); cameraZoom.Interpolator = new PSmoothstepInterpolation(); cameraZoom.Timer.Interval = 1.2f; Globals.GameScene = new GameScene(); Globals.GameScene.BuildNextLevel(); Globals.GameScene.StartCurrentLevel(); World.cam_Main.Transform.Position = new Vector2(500, -100); Globals.GameScene.StartIntro(); }
private void ExecuteAttack(int _targetX, int _targetY) { ActionSequence sequence = new ActionSequence(); // Player's logical position values set below, after attack. ScaleToAction scaleUp = new ScaleToAction(this.transform, Graph.SmoothStep, Vector3.one * DungeonManager.Instance.ScaleMultiplier * 1.75f, 0.5f); scaleUp.OnActionStart += () => { AudioManager.PlayPreAtkSound(); }; MoveToAction moveToPos = new MoveToAction(this.transform, Graph.Dipper, DungeonManager.Instance.GridPosToWorldPos(_targetX, _targetY), 0.25f); ScaleToAction scaleDownHit = new ScaleToAction(this.transform, Graph.Dipper, Vector3.one * DungeonManager.Instance.ScaleMultiplier * 1.1f, 0.25f); ActionParallel hitParallel = new ActionParallel(moveToPos, scaleDownHit); hitParallel.OnActionFinish += () => { EnemyPiece target = DungeonManager.Instance.DungeonBlocks[_targetX, _targetY].Enemy; target.TakeDamage(1); AudioManager.PlayPlayerAtkImpactSound(); if (target.Health <= 0) { ScaleToAction scaleDown = new ScaleToAction(this.transform, Graph.SmoothStep, Vector3.one * DungeonManager.Instance.ScaleMultiplier, 0.5f); scaleDown.OnActionStart += () => { BoardScroller.Instance.FocusCameraToPos(this.transform.position, 0.5f, Graph.InverseExponential); }; scaleDown.OnActionFinish += () => { // Repeat if needed. if (RepeatPanelControls.NumRepeatsLeft > 0) { if (RepeatPanelControls.NumRepeatsLeft > 0) { ControlAreaManager.ExecutedCard.Execute(); } } }; sequence.Add(scaleDown); SetPosition(_targetX, _targetY); } else { MoveToAction moveBack = new MoveToAction(this.transform, Graph.SmoothStep, DungeonManager.Instance.GridPosToWorldPos(PosX, PosY), 0.5f); ScaleToAction scaleDownReturn = new ScaleToAction(this.transform, Graph.SmoothStep, Vector3.one * DungeonManager.Instance.ScaleMultiplier, 0.5f); ActionParallel returnParallel = new ActionParallel(moveBack, scaleDownReturn); returnParallel.OnActionFinish += () => { // Repeat if needed. if (RepeatPanelControls.NumRepeatsLeft > 0) { if (RepeatPanelControls.NumRepeatsLeft > 0) { ControlAreaManager.ExecutedCard.Execute(); } } }; sequence.Add(returnParallel); } }; DelayAction returnDelay = new DelayAction(0.1f); sequence.Add(scaleUp, hitParallel, returnDelay); sequence.OnActionFinish = () => { mTurnStatus = PlayerTurnStatus.Waiting; mSpriteRen.sortingOrder = mnDefaultSpriteOrderInLayer; }; ActionHandler.RunAction(sequence); }
// Protected Functions public override void ExecuteTurn() { UI_EnemyTurnTitle.Instance.TransitionEnemy(true, m_enumPieceType.ToString()); // if: RemoteCallAStar() runs the A-Star pathfind once if (!RemoteCallAStar()) { return; } // if: The next node is the player, use a different attacking animation if (m_AStar.StartNode.linkTo == m_AStar.TargetNode) { // Variables Updates // Action Handling MoveToAction actJump1 = new MoveToAction(transform, Graph.InverseExponential, m_AStar.TargetNode.position + new Vector3(0f, 2f, 0f), 0.5f); actJump1.OnActionStart += () => { CameraManager.Instance.ZoomInAt(LevelManager.Instance.PlayerInstance.transform.position + new Vector3(0f, 1f), true); }; MoveToAction actSlam = new MoveToAction(transform, Graph.Exponential, m_AStar.TargetNode.position, 0.1f); MoveToAction actJump2 = new MoveToAction(transform, Graph.InverseExponential, m_AStar.StartNode.position, 0.5f); MoveToAction actBackToStart = new MoveToAction(transform, Graph.Exponential, m_AStar.StartNode.position, 0.4f); ScaleToAction actSquash = new ScaleToAction(LevelManager.Instance.PlayerInstance.transform, Graph.Exponential, new Vector3(1f, 0f, 1f), 0.1f); ScaleToAction actInflate = new ScaleToAction(LevelManager.Instance.PlayerInstance.transform, Graph.InverseExponential, Vector3.one, 0.2f); ActionParallel actSlamAndSquash = new ActionParallel(actSlam, actSquash); actSlamAndSquash.OnActionStart += () => { CameraManager.Instance.Shake(); }; actSlamAndSquash.OnActionFinish += () => { CameraManager.Instance.LookAt(LevelManager.Instance.PlayerInstance.transform.position, true); }; ActionParallel actJumpAndInflate = new ActionParallel(actJump2, actInflate); ActionSequence actionSeq_Hit = new ActionSequence(actJump1, actSlamAndSquash, actJumpAndInflate, actBackToStart); actionSeq_Hit.OnActionFinish += LevelManager.Instance.ExecuteNextTurn; ActionHandler.RunAction(actionSeq_Hit); } // else: Use the move animation else { // if: The there is no next path, the piece is basically trapped if (m_AStar.StartNode.linkTo == null) { return; } // Variables Updates int[] arr_nCoords = m_AStar.Position2GridCoords(m_AStar.StartNode.linkTo.position); m_nX = arr_nCoords[0]; m_nY = arr_nCoords[1]; // Action Handling MoveToAction action_MoveTo = new MoveToAction(this.transform, Graph.InverseExponential, m_AStar.StartNode.linkTo.position, 0.5f); action_MoveTo.OnActionFinish += LevelManager.Instance.ExecuteNextTurn; ActionHandler.RunAction(action_MoveTo); } }
public static void Initalise() { cutscenePlayer = new CutscenePlayer(); cutscenePlayer.Transform.PosX = -100; monster = new Monster(); crowd = new Crowd(40, 18, new Vector2(2.5f, 0.5f)); title = new Title(); DelayAction cameraDelay = new DelayAction(Program.TheGame, CameraDelay); moveToTotem = new MoveToStaticAction(Program.TheGame, Game1.GameCamera.Transform, Vector2.Zero, 1); moveToTotem.StartPosition = new Vector2(CameraMenuX, CameraMenuY); moveToTotem.Interpolator = new PSmoothstepInterpolation(); moveToTotem.Timer.Interval = TimeToFirstTotem; MethodAction moveCrowd = new MethodAction(delegate() { crowd.MoveTo(currentTotemPosition + TotemCrowdOffset, TimeToFirstTotem); }); gotoFirstTotem = new Sequence(1); gotoFirstTotem.AddAction(cameraDelay); gotoFirstTotem.AddAction(moveCrowd); gotoFirstTotem.AddAction(moveToTotem); gotoFirstTotem.AddAction(new MethodAction(delegate() { Cutscenes.ThrowPlayer(Game1.CurrentTotem); })); playerLaunch = new Sequence(1); playerLaunch.AddAction(new DelayAction(Program.TheGame, Crowd.LaunchTensionTime)); moveToAscendingPlayer = new MoveToTransform(Program.TheGame, Game1.GameCamera.Transform, new Transform(), cutscenePlayer.Transform, 1); moveToAscendingPlayer.Interpolator = new PSquareInterpolation(0.1f); moveToAscendingPlayer.RotationActive = false; playerLaunch.AddAction(moveToAscendingPlayer); readySequence = new Sequence(1); Transform end = new Transform(Game1.player.Transform, true); end.PosY = Game1.CameraOffset; moveToFallingPlayer = new MoveToTransform(Program.TheGame, Game1.GameCamera.Transform, new Transform(), end, 1); moveToFallingPlayer.Interpolator = new PSmoothstepInterpolation(); moveToFallingPlayer.RotationActive = false; readySequence.AddAction(new MethodAction(delegate() { Game1.player.GetReady(); })); readySequence.AddAction(moveToFallingPlayer); readySequence.AddAction(new MethodAction(delegate() { Game1.player.StartCountDown(); })); cameraZoom = new ScaleToAction(Program.TheGame, Game1.GameCamera.Transform, Vector2.Zero, 1); cameraZoom.Interpolator = new PSmoothstepInterpolation(); cameraZoom.Timer.Interval = 0.3f; goToPlayerOnGround = new Sequence(1); goToPlayerOnGroundMovement = new MoveToTransform(Program.TheGame, Game1.GameCamera.Transform, new Transform(), cutscenePlayer.Transform, 1); goToPlayerOnGroundMovement.Timer.Interval = 1.0f; goToPlayerOnGroundMovement.Interpolator = new PSmoothstepInterpolation(); goToPlayerOnGround.AddAction(new DelayAction(Program.TheGame, 0.5f)); goToPlayerOnGround.AddAction(goToPlayerOnGroundMovement); intro = new Sequence(1); MoveToStaticAction moveToMenu = new MoveToStaticAction(Program.TheGame, Game1.GameCamera.Transform, new Vector2(CameraMenuX, CameraMenuY), 1); moveToMenu.Timer.Interval = MoveInTime + 1.0f; intro.AddAction(moveToMenu); intro.AddAction(new MethodAction(delegate() { crowd.PushNewGuy(); })); intro.AddAction(new DelayAction(Program.TheGame, 1.5f)); intro.AddAction(new MethodAction(delegate() { StartMainMenu(); })); goToCliff = new Sequence(1); goToCliff.AddAction(moveToTotem); goToCliff.AddAction(new MethodAction(delegate() { cutscenePlayer.GiveSouls(Game1.TotalScore); monster.OpenMouth(); })); auraTexture = TextureLibrary.GetSpriteSheet("soul_temp"); soulTexture = TextureLibrary.GetSpriteSheet("soul"); //moveToAscendingPlayer = new MoveToTransform(Program.TheGame, Game1.GameCamera.Transform, new Transform(), cutscenePlayer.Transform, 1); }
public CutscenePlayer() : base() { m_ascendSound = SoundEffectLibrary.Get("ascend").CreateInstance(); m_cloud = new Prop("cloud"); m_sword = new Prop("sword"); m_shlingSprite = new Sprite(Program.TheGame, TextureLibrary.GetSpriteSheet("shling"), new Transform(m_transform, true)); m_sprite = new PastaGameLibrary.Sprite(Program.TheGame, TextureLibrary.GetSpriteSheet("player_cutscene", 1, 4), new Transform(m_transform, true)); m_sprite.Origin = new Vector2(0.5f, 0.5f); m_sprite.PixelCorrection = false; m_moveToCrowd = new MoveToTransform(Program.TheGame, m_transform, null, null, 1); m_moveToCrowd.Timer.Interval = 0.1f; MoveToStaticAction carryMovement = new MoveToStaticAction(Program.TheGame, m_transform, new Vector2(0, CarryHeight - 5), 1); carryMovement.Interpolator = new PBounceInterpolation(1.0f); carryMovement.StartPosition = new Vector2(0, CarryHeight); carryMovement.Timer.Interval = 0.2f; MethodAction action = new MethodAction(delegate() { carryMovement.StartPosition = new Vector2(0, CarryHeight); }); Sequence bounceAnimation = new Sequence(-1); bounceAnimation.AddAction(carryMovement); bounceAnimation.AddAction(action); m_carryAnimation = new Sequence(1); m_carryAnimation.AddAction(m_moveToCrowd); m_carryAnimation.AddAction(bounceAnimation); //Sword movement Transform start = new Transform(m_transform, true); Transform end = new Transform(m_transform, true); m_swordMovement = new MoveToTransform(Program.TheGame, m_sword.Transform, start, end, 1); end.PosX = SwordOffsetToPlayerX; end.PosY = SwordOffsetToPlayerY; m_swordDelay = new DelayAction(Program.TheGame, AscendDuration * SwordStartTimeRatio); //Cloud movement m_cloudMovement = new MoveToStaticAction(Program.TheGame, m_cloud.Transform, new Vector2(CloudOffsetToPlayerX, CloudOffsetToPlayerY), 1); m_cloudMovement.StartPosition = new Vector2(CloudStartX, 0); m_cloudMovement.Interpolator = new PSquareInterpolation(0.25f); //Delay of the ascend, then sword/cloud movement Sequence swordAndCloudMovement = new Sequence(1); swordAndCloudMovement.AddAction(m_swordDelay); swordAndCloudMovement.AddAction(new Concurrent(new PastaGameLibrary.Action[] { m_swordMovement, m_cloudMovement })); m_ascendMovement = new MoveToTransform(Program.TheGame, m_transform, new Transform(), new Transform(), 1); m_ascendMovement.Interpolator = new PSquareInterpolation(0.5f); MethodAction showPlayer = new MethodAction(delegate() { m_sprite.Transform.PosY -= 1; Game1.player.ShowPlayer(); isVisible = false; m_cloud.IsVisible = false; m_sword.IsVisible = false; }); //Shling! ScaleToAction shlingScale = new ScaleToAction(Program.TheGame, m_shlingSprite.Transform, new Vector2(ShlingScale, ShlingScale), 1); shlingScale.Timer.Interval = ShlingTime; shlingScale.StartScale = Vector2.Zero; shlingScale.Interpolator = new PSquareInterpolation(2); RotateToStaticAction shlingRotate = new RotateToStaticAction(Program.TheGame, m_shlingSprite.Transform, ShlingSpin, 1); shlingRotate.Timer.Interval = ShlingTime; m_shling = new Concurrent(new PastaGameLibrary.Action[] { shlingScale, shlingRotate }); Sequence readyAnim = new Sequence(1); readyAnim.AddAction(new DelayAction(Program.TheGame, 0.5f)); readyAnim.AddAction(new MethodAction(delegate() { Cutscenes.GetReady(); SoundEffectLibrary.Get("sword_slash").Play(); })); Concurrent shlingReady = new Concurrent(new PastaGameLibrary.Action[] { m_shling, readyAnim, }); m_ascend = new Sequence(1); m_ascend.AddAction(new DelayAction(Program.TheGame, Crowd.LaunchTensionTime)); m_ascend.AddAction(new MethodAction(delegate() { m_ascendSound.Play(); })); Concurrent ascendAndSword = new Concurrent(new PastaGameLibrary.Action[] { m_ascendMovement, swordAndCloudMovement }); m_ascend.AddAction(ascendAndSword); m_ascend.AddAction(showPlayer); m_ascend.AddAction(shlingReady); m_physics = new PhysicsComponent(Program.TheGame, m_transform); m_physics.Mass = 3.0f; m_jumpFromTotem = new Sequence(1); m_decelerate = new MoveToStaticAction(Program.TheGame, m_transform, Vector2.Zero, 1); m_decelerate.Interpolator = new PSquareInterpolation(0.5f); m_jumpFromTotem.AddAction(m_decelerate); m_jumpFromTotem.AddAction(new DelayAction(Program.TheGame, 0.2f)); m_jumpFromTotem.AddAction(new MethodAction(delegate() { m_physics.OnBounce = null; m_physics.Throw(1.0f, -2.0f, 0); Game1.CurrentMusic.StopDynamicMusic(); SoundEffectLibrary.Get("sword_slash").Play(); })); m_jumpFromTotem.AddAction(new DelayAction(Program.TheGame, 0.75f)); m_jumpFromTotem.AddAction(new MethodAction(delegate() { Game1.SetupNextRound(); if (Game1.CurrentTotem == null) { Cutscenes.GoToCliff(); } else { Cutscenes.GoToTotem(Game1.CurrentTotem, 1.0f, 0); } })); m_actionManager = new SingleActionManager(); m_hitSpikes = new Sequence(1); m_moveToCrashingPlayer = new MoveToTransform(Program.TheGame, Game1.GameCamera.Transform, new Transform(), new Transform(), 1); m_moveToCrashingPlayer.Timer.Interval = 0.2f; m_hitSpikes.AddAction(new DelayAction(Program.TheGame, 1.0f)); m_hitSpikes.AddAction(m_moveToCrashingPlayer); m_hitSpikes.AddAction(new DelayAction(Program.TheGame, 0.5f)); m_hitSpikes.AddAction(new MethodAction(delegate() { if (Game1.CurrentTotem == null) { Cutscenes.GoToCliff(); } else { Cutscenes.GoToTotem(Game1.CurrentTotem, 1.0f, 0); } m_sprite.SetFrame(0); m_physics.OnBounce = null; m_physics.Throw(0, -3, 0); m_transform.PosY = m_physics.GroundLevel; })); m_auraParticles = new ParticleSystem(Program.TheGame, 100); m_soulParticles = new ParticleSystem(Program.TheGame, 500); m_levitate = new Sequence(1); m_moveToCliffTip = new MoveToStaticAction(Program.TheGame, m_transform, new Vector2(Cutscenes.InitialCharacterPosition + 10, -8), 1); m_moveToCliffTip.Interpolator = new PSmoothstepInterpolation(); m_moveToCliffTip.Timer.Interval = 1.0f; m_levitate.AddAction(m_moveToCliffTip); m_levitate.AddAction(new MethodAction(delegate() { m_generateSouls = true; })); m_particleGenerator = new ParticleGenerator <GlitterParticle>(Program.TheGame, m_auraParticles); m_particleGenerator.Automatic = true; m_particleGenerator.GenerationInterval = 0.01f; m_soulParticleGenerator = new ParticleGenerator <SoulParticle>(Program.TheGame, m_soulParticles); m_jumpInMouth = new Sequence(1); m_jumpInMouth.AddAction(new DelayAction(Program.TheGame, 0.5f)); m_jumpInMouth.AddAction(new MethodAction(delegate() { m_generateSouls = false; })); m_jumpInMouth.AddAction(new DelayAction(Program.TheGame, 0.5f)); m_jumpInMouth.AddAction(new MethodAction(delegate() { JumpInMonsterMouth(); })); m_jumpInMouth.AddAction(new DelayAction(Program.TheGame, 0.25f)); m_jumpInMouth.AddAction(new MethodAction(delegate() { Cutscenes.monster.CloseMouth(); })); m_jumpInMouth.AddAction(new DelayAction(Program.TheGame, 2.0f)); m_jumpInMouth.AddAction(new MethodAction(delegate() { Cutscenes.crowd.PushNewGuy(); })); m_jumpInMouth.AddAction(new DelayAction(Program.TheGame, 1.0f)); m_jumpInMouth.AddAction(new MethodAction(delegate() { Cutscenes.StartMainMenu(); })); }
private void Die() { // Coins for the player. int coinsDropped = -1; switch (mUnitType) { case EnemyType.Black: coinsDropped = 1; break; case EnemyType.Stone: coinsDropped = 2; break; case EnemyType.Slime: coinsDropped = 1; break; case EnemyType.Glass: coinsDropped = 2; break; case EnemyType.Gold: coinsDropped = 15; break; case EnemyType.Cursed: coinsDropped = 5; break; } DelayAction delayForCoins = new DelayAction(0.5f); delayForCoins.OnActionFinish += () => { GameManager.Instance.Player.AddCoins(coinsDropped); }; ActionHandler.RunAction(delayForCoins); // Score for the player. int score = 0; switch (MovementType) { case GridType.Pawn: score = 10; break; case GridType.Rook: case GridType.Bishop: score = 15; break; case GridType.Knight: score = 20; break; case GridType.King: score = 25; break; } switch (UnitType) { case EnemyType.Black: case EnemyType.Slime: score *= 1; break; case EnemyType.Stone: score *= 2; break; case EnemyType.Glass: case EnemyType.Gold: score *= 3; break; case EnemyType.Cursed: score *= 5; break; } GameManager.Instance.AddScore(score); // Special Die Events typeAlgorithms[(int)UnitType].SpecialDieEvents(this); // TODO: Diff animations by diff enemy type? ScaleToAction scaleDown = new ScaleToAction(transform, Vector3.zero, 0.4f); scaleDown.OnActionFinish += () => { ReturnToPool(); transform.localScale = Vector3.one; transform.localScale *= DungeonManager.Instance.ScaleMultiplier; }; ActionHandler.RunAction(scaleDown); DungeonManager.Instance.RemoveEnemy(PosX, PosY); GameManager.Instance.EnemyList.Remove(this); }
/// <summary> /// End the sequence. /// </summary> public void EndSequence() { // Ending Variables m_OPSelection.PoolAllObjects(); TransitionExit(true, true); for (int i = 0; i < marr_nCardOrder.Length; i++) { if (marr_nCardOrder[i] != -1) { LevelManager.Instance.PlayerInstance.CardDeck[i] = EnumPieceType.Null; } } // Player Action Handling bool[,] arr2_bEnemyConstrain = LevelManager.Instance.GetCharacterConstrain(EnumCharacterType.Enemy); ActionSequence actSequence = new ActionSequence(); for (int i = 1; i <= m_nCurrentStep; i++) { // Converts to grid space int[] arr_nCoords = new int[2]; arr_nCoords[0] = Mathf.RoundToInt(marr_vec3StepPosition[i].x); arr_nCoords[1] = Mathf.RoundToInt(marr_vec3StepPosition[i].z); // if: There is no enemy constrain in the current co-ordinates if (arr2_bEnemyConstrain[arr_nCoords[0], arr_nCoords[1]]) { MoveToAction actMoveToNext = new MoveToAction(LevelManager.Instance.PlayerInstance.transform, Graph.InverseExponential, marr_vec3StepPosition[i], 0.25f); actSequence.Add(actMoveToNext); } // else: Kill the enemy else { Character characterTarget = LevelManager.Instance.GetCharacter(arr_nCoords[0], arr_nCoords[1]); MoveToAction actJump = new MoveToAction(LevelManager.Instance.PlayerInstance.transform, Graph.InverseExponential, marr_vec3StepPosition[i] + new Vector3(0f, 2f, 0f), 0.5f); actJump.OnActionStart += () => { CameraManager.Instance.ZoomInAt(characterTarget.transform, true); }; MoveToAction actSlam = new MoveToAction(LevelManager.Instance.PlayerInstance.transform, Graph.Exponential, marr_vec3StepPosition[i], 0.1f); DelayAction actDelay = new DelayAction(0.5f); ScaleToAction actSquash = new ScaleToAction(characterTarget.transform, Graph.Exponential, new Vector3(1f, 0f, 1f), 0.1f); ActionParallel actSlamAndSquash = new ActionParallel(actSlam, actSquash); actSlamAndSquash.OnActionStart += CameraManager.Instance.Shake; actSlamAndSquash.OnActionFinish += () => { characterTarget.Kill(); CameraManager.Instance.LookAt(LevelManager.Instance.PlayerInstance.transform.position, true); }; actSequence.Add(actJump, actSlamAndSquash, actDelay); //CameraManager.Instance.ZoomInAt(marr_vec3StepPosition[i], true); } } actSequence.OnActionFinish += () => { // After-animations Variables Handling LevelManager.Instance.PlayerInstance.X = Mathf.RoundToInt(marr_vec3StepPosition[m_nCurrentStep].x); LevelManager.Instance.PlayerInstance.Y = Mathf.RoundToInt(marr_vec3StepPosition[m_nCurrentStep].z); CameraManager.Instance.LookAt(marr_vec3StepPosition[m_nCurrentStep], true); m_OPStep.PoolAllObjects(); m_OPStepArrow.PoolAllObjects(); UI_EnemyTurnTitle.Instance.TransitionEnter(true); LevelManager.Instance.ExecuteNextTurn(); }; ActionHandler.RunAction(actSequence); }
private void SetupTitleWithLogo() { sbLoadedGame = true; mSplashPanelCG.alpha = 1.0f; // Logo Animation DelayAction prePulseDelay = new DelayAction(1.5f); PulseAction clickPulse = new PulseAction( mLogoTransform, 1, Graph.Exponential, 0.25f, Vector3.one, Vector3.one * 0.8f); clickPulse.OnActionStart += () => { AudioManager.PlayPenClickSound(); }; DelayAction postPulseDelay = new DelayAction(0.25f); MoveByAction anticipateLeft = new MoveByAction(mLogoTransform, Graph.InverseExponential, Vector3.left * (100) * (Screen.height / 1920.0f), 0.5f); ScaleToAction anticipateSquash = new ScaleToAction(mLogoTransform, Graph.InverseExponential, new Vector3(0.75f, 1.25f, 1.25f), 0.5f); ActionParallel anticipateParallel = new ActionParallel(anticipateLeft, anticipateSquash); DelayAction postAnticipateDelay = new DelayAction(0.1f); MoveByAction zoomRight = new MoveByAction(mLogoTransform, Graph.InverseExponential, Vector3.right * (1024 + 400) * (Screen.height / 1920.0f), 0.3f); ScaleToAction scaleDown = new ScaleToAction(mLogoTransform, Graph.InverseExponential, new Vector3(1.5f, 0.5f, 0.5f), 0.5f); ActionParallel zoomRightParallel = new ActionParallel(zoomRight, scaleDown); DelayAction preFadeDelay = new DelayAction(0.2f); CanvasGroupAlphaFadeToAction fadeCGAway = new CanvasGroupAlphaFadeToAction(mSplashPanelCG, 0.0f, 1.5f); fadeCGAway.OnActionFinish += () => { mSplashPanelCG.blocksRaycasts = false; }; // Tap to Start text. DelayAction TurnOn = new DelayAction(0.5f); TurnOn.OnActionFinish += () => { mTapToStartText.enabled = true; if (mStartButton.interactable == false) { mStartButton.interactable = true; } }; DelayAction TurnOff = new DelayAction(1.0f); TurnOff.OnActionFinish += () => { mTapToStartText.enabled = false; }; ActionSequence tapTextFlashSeq = new ActionSequence(TurnOn, TurnOff); ActionRepeatForever repeatFlash = new ActionRepeatForever(tapTextFlashSeq); ActionSequence splashSeq = new ActionSequence( prePulseDelay, clickPulse, postPulseDelay, anticipateParallel, postAnticipateDelay, zoomRightParallel, preFadeDelay, fadeCGAway, repeatFlash ); ActionHandler.RunAction(splashSeq); // Card Animations. // Card is already spinning in the background. // 0 to 90, snap -90, -90 to 0 mSpiningCard.localEulerAngles = Vector3.zero; // Timing here doesn't matter. Is used to sync. 0.5f just nice to have card back show when canvas fades. RotateByAction initSpin = new RotateByAction(mSpiningCard, Graph.Linear, Vector3.up * 90.0f, 0.5f); initSpin.OnActionFinish += () => { mCardSpriteRen.transform.localScale -= Vector3.right * 2.0f; mCardSpriteRen.sprite = mCardSprites[Random.Range(0, mCardSprites.Length)]; }; RotateByAction spinA = new RotateByAction(mSpiningCard, Graph.Linear, Vector3.up * 180.0f, 3.0f); spinA.OnActionFinish += () => { mCardSpriteRen.transform.localScale += Vector3.right * 2.0f; mCardSpriteRen.sprite = mSpriteCardBack; }; RotateByAction spinB = new RotateByAction(mSpiningCard, Graph.Linear, Vector3.up * 180.0f, 3.0f); spinB.OnActionFinish += () => { mCardSpriteRen.transform.localScale -= Vector3.right * 2.0f; mCardSpriteRen.sprite = mCardSprites[Random.Range(0, mCardSprites.Length)]; }; ActionSequence cardSpinSeq = new ActionSequence(spinA, spinB); ActionHandler.RunAction(new ActionSequence(initSpin, new ActionRepeatForever(cardSpinSeq))); }