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); }
/// <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); }
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); }
// 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; } }
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); }
/// <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()); }
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; } }
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); }