コード例 #1
0
    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;
        }
    }
コード例 #2
0
    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);
        }
    }
コード例 #3
0
    // 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);
    }
コード例 #4
0
    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);
    }
コード例 #5
0
        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
        }
コード例 #6
0
        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();
        }
コード例 #7
0
    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();
    }
コード例 #8
0
    /// <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);
    }
コード例 #9
0
    /// <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);
    }
コード例 #10
0
        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);
        }
コード例 #11
0
        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();
        }
コード例 #12
0
    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);
    }
コード例 #13
0
    // 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);
        }
    }
コード例 #14
0
        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);
        }
コード例 #15
0
        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(); }));
        }
コード例 #16
0
    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);
    }
コード例 #17
0
    /// <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);
    }
コード例 #18
0
    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)));
    }