public static void Save(DataPlayer dataPlayer) { BinaryFormatter formatter = new BinaryFormatter(); string path = $"{Application.persistentDataPath}/{SaveName}"; FileStream stream = new FileStream(path, FileMode.Create); formatter.Serialize(stream, Convert(dataPlayer)); stream.Close(); }
public static DataPlayer Load(DataUnits dataUnits, DataPlayer reference) { string path = $"{Application.persistentDataPath}/{SaveName}"; if (File.Exists(path)) { Debug.Log($"Load successfully {path}"); BinaryFormatter formatter = new BinaryFormatter(); FileStream stream = new FileStream(path, FileMode.Open); saveFile = formatter.Deserialize(stream) as Dictionary <string, object>; DataPlayer data = Convert(saveFile, dataUnits, reference); return(data); } Debug.Log($"Save file not found in {path}"); return(null); }
public static DataPlayer Copy(DataPlayer data) { var newdata = (CreateInstance(typeof(DataPlayer)) as DataPlayer); newdata.Player = data.Player; newdata.manaFlows = data.manaFlows; newdata.startMaxMana = data.startMaxMana; newdata.manaMax = data.manaMax; newdata.upgradeMana = data.upgradeMana; newdata.upgradeManaCost = data.upgradeManaCost; newdata.dataTower = data.dataTower; newdata.playerTowers = data.playerTowers; newdata.squad = data.squad; newdata.playerUnits = data.playerUnits; newdata.side = data.side; return(newdata); }
public void OnAwake() { dataPlayer = actor.GetData <DataPlayer>(); if (dataPlayer.Player) { gameManager = Toolbox.Get <GameManager>(); managerUI = Toolbox.Get <ManagerUI>(); managerUI.pause.onClick.AddListener(OnPause); managerUI.OnButtonClick.Where(x => x.buttonPressed == ButtonPressed.unit).Subscribe(OnUnitButton).AddTo(actor); managerUI.OnButtonClick.Where(x => x.buttonPressed == ButtonPressed.mana).Subscribe(OnManaButton).AddTo(actor); managerUI.OnPauseClick.Subscribe(OnPauseOff).AddTo(actor); managerUI.endGameMenu.button.onClick.AddListener(OnEndGameContinue); managerUI.pauseMenu.Back.onClick.AddListener(OnPauseBack); managerUI.mana.maxCount = dataPlayer.manaMax = dataPlayer.startMaxMana; managerUI.mana.upCount = dataPlayer.manaMax + dataPlayer.upgradeMana; dataPlayer.mana.Value = 0; } }
public static Dictionary <string, object> Convert(DataPlayer dataPlayer) { var data = new Dictionary <string, object>(); var squad = new List <int>(); foreach (var item in dataPlayer.squad) { squad.Add(dataPlayer.playerUnits.IndexOf(item)); } data.Add(PlayerSquad, squad.ToArray()); var playerUnits = new List <Stats>(); foreach (var item in dataPlayer.playerUnits) { playerUnits.Add(item.stats); } data.Add(PlayerUnits, playerUnits.ToArray()); var playerTowers = new List <Stats>(); foreach (var item in dataPlayer.playerTowers) { playerTowers.Add(item.stats); } data.Add(PlayerTowers, playerTowers.ToArray()); data.Add(PlayerActiveTower, dataPlayer.playerTowers.IndexOf(dataPlayer.dataTower)); data.Add(Gold, dataPlayer.Gold.Value); return(data); }
public void StartBattle() { if (dataPlayer) { dataPlayer = GetData <DataPlayer>(); } if (dataPlayer.dataTower.prefab) { tower = dataPlayer.Tower = ManagerUnits.SpawnTower(dataPlayer.dataTower, dataPlayer); var spell = tower.GetData <DataSpell>(); var dataTower = tower.GetData <DataUnit>(); if (dataPlayer.Player && spell && dataTower) { var managerUi = Toolbox.Get <ManagerUI>(); managerUi.BattleButtonSpawn(dataPlayer); managerUi.spell.StartCountdown(spell.countdown); managerUi.OnButtonClick.Where(x => x.buttonPressed == ButtonPressed.spell).Subscribe( delegate (UICallBack uICallBack) { dataTower.OnSpellCast.OnNext(tower); }).AddTo(this); } else if (!dataPlayer.Player) { if (GetData <DataAi>().difficult == Difficult.normal) { dataPlayer.Tower.GetData <DataUnit>().OnSetDamage.Subscribe(delegate(Unit unit) { dataPlayer.Tower.GetData <DataUnit>().OnSpellCast.OnNext(dataPlayer.Tower); }).AddTo(this); } } } }
public void OnAwake() { dataPlayer = actor.GetData <DataPlayer>(); foreach (var item in dataPlayer.squad) { coundowns.Add(item, 0.0f); } dataPlayer.manaMax = dataPlayer.startMaxMana; dataPlayer.mana.Value = 0; manager = Toolbox.Get <GameManager>(); managerUnits = Toolbox.Get <ManagerUnits>(); if (dataPlayer.side == Side.left) { enemyUnits = managerUnits.right; } else { enemyUnits = managerUnits.left; } difficult = actor.GetData <DataAi>().difficult; if (difficult == Difficult.easy) { timeToAction = 5f; } else if (difficult == Difficult.normal) { timeToAction = 3f; } else { timeToAction = 0f; } }
protected override void OnStart() { dataPlayer = GetData <DataPlayer>(); }
public static DataPlayer Convert(Dictionary <string, object> data, DataUnits dataUnits, DataPlayer reference) { DataPlayer dataPlayer = DataPlayer.Copy(reference); dataPlayer.Gold.SetValueAndForceNotify((int)data[Gold]); var unitStats = data[PlayerUnits] as Stats[]; var playerUnits = new List <DataUnit>(); int i = 0; foreach (var item in dataUnits.units) { var unit = DataUnit.Copy(item); if (i < unitStats.Length) { unit.stats = unitStats[i]; } playerUnits.Add(unit); i++; } dataPlayer.playerUnits = playerUnits; var playerSquadNumbers = data[PlayerSquad] as int[]; var playerSquad = new List <DataUnit>(); foreach (var item in playerSquadNumbers) { playerSquad.Add(playerUnits[item]); } dataPlayer.squad = playerSquad; var towerStats = data[PlayerTowers] as Stats[]; var playerTowers = new List <DataUnit>(); i = 0; foreach (var item in dataUnits.towers) { var tower = DataUnit.Copy(item); if (i < towerStats.Length) { tower.stats = towerStats[i]; } playerTowers.Add(tower); i++; } dataPlayer.playerTowers = playerTowers; var activeTowerNumber = (int)data[PlayerActiveTower]; if (activeTowerNumber >= 0 && playerTowers.Count > activeTowerNumber) { dataPlayer.dataTower = playerTowers[activeTowerNumber]; } else { dataPlayer.dataTower = playerTowers[0]; } return(dataPlayer); }