Example #1
0
        private void PlayerEnterExit_OnRespawnerComplete()
        {
            // Must have a caster and it must be the player
            if (caster == null || caster != GameManager.Instance.PlayerEntityBehaviour)
            {
                return;
            }

            // Get peered SerializablePlayer and PlayerEnterExit
            SerializablePlayer serializablePlayer = caster.GetComponent <SerializablePlayer>();
            PlayerEnterExit    playerEnterExit    = caster.GetComponent <PlayerEnterExit>();

            if (!serializablePlayer || !playerEnterExit)
            {
                Debug.LogError("Teleport effect OnRespawnerComplete() could not find both SerializablePlayer and PlayerEnterExit components.");
                return;
            }

            // Restore final position and unwire event
            serializablePlayer.RestorePosition(anchorPosition);
            PlayerEnterExit.OnRespawnerComplete -= PlayerEnterExit_OnRespawnerComplete;

            // Restore scene cache on arrival
            if (!playerEnterExit.IsPlayerInside)
            {
                SaveLoadManager.RestoreCachedScene(GameManager.Instance.StreamingWorld.SceneName);      // Player is outside
            }
            else if (playerEnterExit.IsPlayerInsideBuilding)
            {
                SaveLoadManager.RestoreCachedScene(playerEnterExit.Interior.name);                      // Player inside a building
            }
        }
        public void CheckGetScore()
        {
            SerializablePlayer player = new SerializablePlayer("Gosho", 2);
            int expected = 2;
            int actual   = player.Score;

            Assert.AreEqual(expected, actual);
        }
Example #3
0
 /// <summary>
 /// Restores the player state from a memento.
 /// </summary>
 /// <param name="memento">The memento to restore from.</param>
 public void RestoreFromMemento(SerializablePlayer memento)
 {
     id        = memento.id;
     beer      = memento.beer;
     knowledge = memento.knowledge;
     human     = memento.human;
     active    = memento.active;
 }
        public void CheckGetName()
        {
            SerializablePlayer player   = new SerializablePlayer("Gosho", 2);
            string             expected = "Gosho";
            string             actual   = player.Name;

            Assert.AreEqual(expected, actual);
        }
Example #5
0
        public void SerializeSerializablePlayer()
        {
            SerializablePlayer actualPlayer = new SerializablePlayer("Emil", 2);

            FileReadWrite.Serialize(actualPlayer, @"..\..\actualPlayer.bin");
            SerializablePlayer expectedPlayer = (SerializablePlayer)FileReadWrite.Deserialize(@"..\..\expectedPlayer.bin");

            Assert.AreEqual(expectedPlayer.Name, actualPlayer.Name);
            Assert.AreEqual(expectedPlayer.Score, actualPlayer.Score);
        }
Example #6
0
 // Cache required references in Start() or Resume() (only one or the other is called)
 void CacheReferences()
 {
     // Get peered SerializablePlayer and PlayerEnterExit
     serializablePlayer = caster.GetComponent <SerializablePlayer>();
     playerEnterExit    = caster.GetComponent <PlayerEnterExit>();
     if (!serializablePlayer || !playerEnterExit)
     {
         Debug.LogError("Teleport effect could not find both SerializablePlayer and PlayerEnterExit components.");
         return;
     }
 }
Example #7
0
 public virtual void RestoreMemento(SerializablePlayer memento)
 {
     // kind is used for instantiation
     // id, color and gui are set on Init()
     OnDisable(); // stop events from being picked up
     _effects.RemoveEffect <EffectImpl.LandmarkWrapperEffect>();
     _effects.RestoreMemento(memento.effectManager);
     OnEnable(); // start events being picked up
     _actionsPerformed = memento.actionsPerformed;
     _cardManager.RestoreMemento(memento.cards);
     _hasHadTurn = memento.hasHadTurn;
 }
    private void SavePlayerData()
    {
        if (gameObject != null)
        {
            SerializablePlayer serializedPlayer = new SerializablePlayer()
            {
                health     = this.currentHealth,
                experience = playerLevelingSystem.experience,
                level      = playerLevelingSystem.currentLevel,
                positionX  = transform.position.x,
                positionY  = transform.position.y,
                positionZ  = transform.position.z,
            };

            SaveLoad.Save <SerializablePlayer>(serializedPlayer, "PlayerStats");
        }
    }
    private void LoadPlayerData()
    {
        if (SaveLoad.SaveExists("PlayerStats"))
        {
            SerializablePlayer playerData = SaveLoad.Load <SerializablePlayer>("PlayerStats");

            currentHealth = playerData.health;
            playerLevelingSystem.experience   = playerData.experience;
            playerLevelingSystem.currentLevel = playerData.level;

            Vector3 position;
            position.x = playerData.positionX;
            position.y = playerData.positionY;
            position.z = playerData.positionZ;

            transform.position = position;
        }
    }
    public GameData(int score, GameObject player, GameObject[] monsters, EnemyManager[] enemyManagers)
    {
        this.score = score;

        this.player = new SerializablePlayer(player);

        this.monsters = new SerializableMonster[monsters.Length];
        for (int i = 0; i < monsters.Length; ++i)
        {
            this.monsters[i] = new SerializableMonster(monsters[i]);
        }

        this.enemyManagers = new SerializableEnemyManager[enemyManagers.Length];
        for (int i = 0; i < enemyManagers.Length; ++i)
        {
            this.enemyManagers[i] = new SerializableEnemyManager(enemyManagers[i]);
        }
    }
        // Cache required references
        bool CacheReferences()
        {
            // Get peered SerializablePlayer and PlayerEnterExit
            if (!serializablePlayer)
            {
                serializablePlayer = caster.GetComponent <SerializablePlayer>();
            }

            if (!playerEnterExit)
            {
                playerEnterExit = caster.GetComponent <PlayerEnterExit>();
            }

            if (!serializablePlayer || !playerEnterExit)
            {
                Debug.LogError("Teleport effect could not find both SerializablePlayer and PlayerEnterExit components.");
                return(false);
            }

            return(true);
        }
Example #12
0
 /// <summary>
 /// Saves the game state to a memento (stored as <see cref="SerializableGame"/>).
 /// This is the top level memento handler, meaning that the entire game state is
 /// stored in the result, and can be completely restored by the result.
 /// </summary>
 /// <returns>The memento of the current game state.</returns>
 public SerializableGame SaveToMemento()
 {
     SerializablePlayer[] sPlayers = new SerializablePlayer[players.Length];
     for (int i = 0; i < players.Length; i++)
     {
         sPlayers[i] = players[i].SaveToMemento();
     }
     Sector[]             sectors  = gameMap.GetComponentsInChildren <Sector>();
     SerializableSector[] sSectors = new SerializableSector[sectors.Length];
     for (int i = 0; i < sectors.Length; i++)
     {
         sSectors[i] = sectors[i].SaveToMemento();
     }
     return(new SerializableGame
     {
         turnState = turnState,
         players = sPlayers,
         sectors = sSectors,
         currentPlayerId = currentPlayer.Id,
         lastDiscovererOfPvcId = PvcDiscoveredByLast?.Id
     });
 }
 public void PlayerNegativeScore()
 {
     SerializablePlayer player = new SerializablePlayer("Gosho", -3);
 }
 public override void RestoreMemento(SerializablePlayer memento)
 {
     base.RestoreMemento(memento);
     StartCoroutine(OnRestoreCheck());
 }
Example #15
0
        private void UpdateMode(TransportModes transportMode)
        {
            // Update the transport mode and stop any riding sounds playing.
            mode = transportMode;
            if (ridingAudioSource.isPlaying)
            {
                ridingAudioSource.Stop();
            }

            if (mode == TransportModes.Horse || mode == TransportModes.Cart)
            {
                // Tell player motor we're riding.
                playerMotor.IsRiding = true;

                // Setup appropriate riding sounds.
                SoundClips sound = (mode == TransportModes.Horse) ? horseRidingSound2 : cartRidingSound;
                ridingAudioSource.clip = dfAudioSource.GetAudioClip((int)sound);

                // Setup appropriate riding textures.
                string textureName = (mode == TransportModes.Horse) ? horseTextureName : cartTextureName;
                for (int i = 0; i < 4; i++)
                {
                    ridingTexures[i] = ImageReader.GetImageData(textureName, 0, i, true, true);
                }
                ridingTexture = ridingTexures[0];

                // Initialise neighing timer.
                neighTime = Time.time + Random.Range(1, 5);
            }
            else
            {
                // Tell player motor we're not riding.
                playerMotor.IsRiding = false;
            }

            if (mode == TransportModes.Ship)
            {
                GameManager.Instance.PlayerMotor.CancelMovement = true;
                SerializablePlayer serializablePlayer = GetComponent <SerializablePlayer>();
                DaggerfallUI.Instance.FadeBehaviour.SmashHUDToBlack();
                StreamingWorld world      = GameManager.Instance.StreamingWorld;
                DFPosition     shipCoords = DaggerfallBankManager.GetShipCoords();

                // Is there recorded position before boarding and is player on the ship?
                if (IsOnShip())
                {
                    // Check for terrain sampler changes. (so don't fall through floor)
                    StreamingWorld.RepositionMethods reposition = StreamingWorld.RepositionMethods.None;
                    if (boardShipPosition.terrainSamplerName != DaggerfallUnity.Instance.TerrainSampler.ToString() ||
                        boardShipPosition.terrainSamplerVersion != DaggerfallUnity.Instance.TerrainSampler.Version)
                    {
                        reposition = StreamingWorld.RepositionMethods.RandomStartMarker;
                        if (DaggerfallUI.Instance.DaggerfallHUD != null)
                        {
                            DaggerfallUI.Instance.DaggerfallHUD.PopupText.AddText("Terrain sampler changed. Repositioning player.");
                        }
                    }
                    // Restore player position from before boarding ship, caching ship scene first.
                    SaveLoadManager.CacheScene(world.SceneName);    // TODO: Should this should move into teleport to support other teleports? Issue only if inside. (e.g. recall)
                    DFPosition mapPixel = MapsFile.WorldCoordToMapPixel(boardShipPosition.worldPosX, boardShipPosition.worldPosZ);
                    world.TeleportToCoordinates(mapPixel.X, mapPixel.Y, reposition);
                    serializablePlayer.RestorePosition(boardShipPosition);
                    boardShipPosition = null;
                    // Restore cached scene (ship is special case, cache will not be cleared)
                    SaveLoadManager.RestoreCachedScene(world.SceneName);
                }
                else
                {
                    // Record current player position before boarding ship, and cache scene. (ship is special case, cache will not be cleared)
                    boardShipPosition = serializablePlayer.GetPlayerPositionData();
                    SaveLoadManager.CacheScene(world.SceneName);
                    // Teleport to the players ship, restoring cached scene.
                    world.TeleportToCoordinates(shipCoords.X, shipCoords.Y, StreamingWorld.RepositionMethods.RandomStartMarker);
                    SaveLoadManager.RestoreCachedScene(world.SceneName);
                }
                DaggerfallUI.Instance.FadeBehaviour.FadeHUDFromBlack();
                mode = TransportModes.Foot;
            }
        }
Example #16
0
        private void UpdateMode(TransportModes transportMode)
        {
            // Update the transport mode and stop any riding sounds playing.
            mode = transportMode;
            if (ridingAudioSource.isPlaying)
            {
                ridingAudioSource.Stop();
            }

            if (mode == TransportModes.Horse || mode == TransportModes.Cart)
            {
                // Tell player motor we're riding. TODO: Change to event system so other classes can listen for transport changes.
                playerMotor.IsRiding = true;

                // Setup appropriate riding sounds.
                SoundClips sound = (mode == TransportModes.Horse) ? horseRidingSound2 : cartRidingSound;
                ridingAudioSource.clip = dfAudioSource.GetAudioClip((int)sound);

                // Setup appropriate riding textures.
                string textureName = (mode == TransportModes.Horse) ? horseTextureName : cartTextureName;
                for (int i = 0; i < 4; i++)
                {
                    ridingTexures[i] = ImageReader.GetImageData(textureName, 0, i, true, true);
                }
                ridingTexure = ridingTexures[0];

                // Initialise neighing timer.
                neighTime = Time.time + Random.Range(1, 5);
            }
            else
            {
                // Tell player motor we're not riding.
                playerMotor.IsRiding = false;
            }

            if (mode == TransportModes.Ship)
            {
                GameManager.Instance.PlayerMotor.CancelMovement = true;
                SerializablePlayer serializablePlayer = GetComponent <SerializablePlayer>();
                DaggerfallUI.Instance.SmashHUDToBlack();

                // Is player on board ship?
                if (boardShipPosition != null)
                {
                    // Check for terrain sampler changes. (so don't fall through floor)
                    StreamingWorld.RepositionMethods reposition = StreamingWorld.RepositionMethods.None;
                    if (boardShipPosition.terrainSamplerName != DaggerfallUnity.Instance.TerrainSampler.ToString() ||
                        boardShipPosition.terrainSamplerVersion != DaggerfallUnity.Instance.TerrainSampler.Version)
                    {
                        reposition = StreamingWorld.RepositionMethods.RandomStartMarker;
                        if (DaggerfallUI.Instance.DaggerfallHUD != null)
                        {
                            DaggerfallUI.Instance.DaggerfallHUD.PopupText.AddText("Terrain sampler changed. Repositioning player.");
                        }
                    }
                    // Restore player position from before boarding ship.
                    DFPosition mapPixel = MapsFile.WorldCoordToMapPixel(boardShipPosition.worldPosX, boardShipPosition.worldPosZ);
                    GameManager.Instance.StreamingWorld.TeleportToCoordinates(mapPixel.X, mapPixel.Y, reposition);
                    serializablePlayer.RestorePosition(boardShipPosition);
                    boardShipPosition = null;
                }
                else
                {
                    // Record current player position before boarding ship.
                    boardShipPosition = serializablePlayer.GetPlayerPositionData();

                    // Teleport to ship
                    GameManager.Instance.StreamingWorld.TeleportToCoordinates(2, 2, StreamingWorld.RepositionMethods.RandomStartMarker);
                }
                DaggerfallUI.Instance.FadeHUDFromBlack();
                mode = TransportModes.Foot;
            }
        }
 public void PlayerNullName()
 {
     SerializablePlayer player = new SerializablePlayer(null, 4);
 }