Adds world object tracking to game save state

fix
Jonathan Miller 4 years ago
parent 6a6afc79cb
commit 59be9e713c

File diff suppressed because it is too large Load Diff

@ -24,10 +24,7 @@ namespace SiegeSong
}
}
void Update()
{
}
void Update() { }
public void AddItem(int itemID, int amount)
{
@ -37,24 +34,19 @@ namespace SiegeSong
Contents.Add(itemID, amount);
}
public void RemoveItem(int itemID, int amount)
public void RemoveItem(int itemID, int amount, InventoryManager inventoryManager = null)
{
if (Contents.ContainsKey(itemID))
{
var currentlyOwnedCount = Contents[itemID];
if (InventoryManager.EquipmentManager.LeftHandCurrentEquipIndex == itemID)
if (inventoryManager != null)
{
if (InventoryManager.EquipmentManager.LeftHandCurrentEquipIndex == itemID)
InventoryManager.EquipmentManager.LeftHandCurrentEquipIndex = 0;
}
if (InventoryManager.EquipmentManager.AbilityCurrentEquipIndex == itemID)
{
InventoryManager.EquipmentManager.AbilityCurrentEquipIndex = 0;
}
if (InventoryManager.EquipmentManager.RightHandCurrentEquipIndex == itemID)
{
InventoryManager.EquipmentManager.RightHandCurrentEquipIndex = 0;
}
if (InventoryManager.ApparrelManager.CurrentlyActiveIDs.Contains(itemID))
{
var newList = new List<int>();
@ -64,6 +56,7 @@ namespace SiegeSong
InventoryManager.ApparrelManager.CurrentlyActiveIDs = newList.ToArray();
InventoryManager.ApparrelManager.UpdateApparrel();
}
}
if (currentlyOwnedCount - amount > 0)
Contents[itemID] = currentlyOwnedCount - amount;

@ -12,6 +12,7 @@ namespace SiegeSong
{
public int ID;
public string WardrobeKey;
public string DroppableKey;
public bool VisibleToPlayer;
public int MonetaryValue;
public float PhysicalWeight;
@ -21,9 +22,6 @@ namespace SiegeSong
public string FriendlyName;
public string Description;
public string[] Effects;
public GameObject DroppableItem;
public GameObject InventoryManager;
public GameObject ReadMenuManager;
public ItemType Type;
public EquipableType EquipableType;
public AparrelSlot AparrelSlot;
@ -31,7 +29,6 @@ namespace SiegeSong
public UnityEvent Use;
public UnityEvent UseStart;
public UnityEvent UseEnd;
public Transform DroppedStartPosition;
public Dictionary<DamageWeight, Dictionary<DamageType, bool>> FullProtection;
public Dictionary<DamageWeight, Dictionary<DamageType, bool>> PartialProtection;
@ -96,27 +93,21 @@ namespace SiegeSong
apparrelManager.InventoryManager.Actor.Stats.ActiveInventoryItemIDs = activeIdsList;
apparrelManager.UpdateApparrel();
}
else if (EquipableType == EquipableType.Equipment)
{
}
break;
case ItemType.Readable:
var readMenu = ReadMenuManager.GetComponent<ReadMenuManager>();
readMenu.SelectedBookID = ID;
readMenu.Open();
//readMenu.SelectedBookID = ID;
//readMenu.Open();
break;
case ItemType.Consumable:
var inventory = InventoryManager.GetComponent<InventoryManager>();
inventory.SelectedItemID = ID;
inventory.SelectedAmount = 1;
inventory.RemoveItem();
apparrelManager.InventoryManager.SelectedItemID = ID;
apparrelManager.InventoryManager.SelectedAmount = 1;
apparrelManager.InventoryManager.RemoveItem();
if (Use != null)
Use.Invoke();
@ -147,12 +138,5 @@ namespace SiegeSong
break;
}
}
public void Drop()
{
var droppedObject = GameObject.Instantiate(DroppableItem);
droppedObject.transform.position = DroppedStartPosition.position;
droppedObject.transform.rotation = DroppedStartPosition.rotation;
}
}
}

@ -10,6 +10,7 @@ namespace SiegeSong
{
public class InventoryManager : MonoBehaviour
{
public InstanceManager InstanceManager;
public EquipmentManager EquipmentManager;
public ApparrelManager ApparrelManager;
@ -26,7 +27,6 @@ namespace SiegeSong
public GameObject TransferScreen;
public GameObject InventoryScreen;
public Text DescriptionLabel;
public Text EffectsLabel;
//public SkinnedMesh PreviewMesh;
@ -55,16 +55,12 @@ namespace SiegeSong
public GameObject TransferOtherPointer;
public GameObject TransferSelfPointer;
public Container TransferOther;
private List<GameObject> TransferRows;
public GameObject TransferRowArea;
public GameObject TransferRowPrefab;
public GameObject ItemDictionary;
public int SelectedItemID;
public int SelectedAmount;
private List<GameObject> InventoryRows;
private Dictionary<int, GameObject> rows;
public GameObject InventoryRowArea;
public GameObject InventoryRowPrefab;
@ -76,6 +72,7 @@ namespace SiegeSong
public int SelectedItemIndex;
public Transform DroppedItemStartPosition;
private bool downArrowInputOldState;
private bool upArrowInputOldState;
@ -84,8 +81,6 @@ namespace SiegeSong
private bool activateInputOldState;
private bool dropInputOldState;
public Transform DroppedItemStartPosition;
private Color enabledTextColor;
private Color disabledTextColor;
@ -96,11 +91,16 @@ namespace SiegeSong
private float rowsXOffset = 0f;
private float rowsYOffset = 0f;
private List<GameObject> TransferRows;
private List<GameObject> InventoryRows;
private Dictionary<int, GameObject> rows;
void Start()
{
rows = new Dictionary<int, GameObject>();
InventoryRows = new List<GameObject>();
Inventory.InventoryManager = this;
SelectedAmount = 1;
}
public void OnPointerClick(PointerEventData eventData)
@ -168,7 +168,6 @@ namespace SiegeSong
SelectedItemID = Inventory.GetIDByOwnedIndex(SelectedItemIndex);
if (TransferScreenOpen && !TransferTargetSelf)
SelectedItemID = TransferOther.GetIDByOwnedIndex(SelectedItemIndex);
SelectedAmount = 1;
if (DropInputNewState)
dropInputOldState = true;
if (ActivateInputNewState)
@ -424,15 +423,20 @@ namespace SiegeSong
MaxCarryWeightLabel.text = Actor.Stats.MaxCarryWeight.ToString();
CurrentGoldLabel.text = Actor.Stats.Gold.ToString();
foreach(var row in InventoryRows)
if (row.active)
row.active = false;
for (var i = 0; i < Inventory.Contents.Count; i++)
{
var rowExists = false;
var uiRow = rows != null && rows.ContainsKey(Inventory.GetIDByOwnedIndex(i)) ? rows[Inventory.GetIDByOwnedIndex(i)] : Instantiate(InventoryRowPrefab);
var uiRowProperties = uiRow.GetComponent<InventoryRow>();
var uiRowRect = uiRow.GetComponent<RectTransform>();
uiRow.active = true;
uiRowProperties.InventoryManager = this;
uiRowProperties.ItemID = Inventory.GetIDByOwnedIndex(i);
var rowExists = false;
var uiRowRect = uiRow.GetComponent<RectTransform>();
uiRow.transform.parent = InventoryRowArea.transform;
uiRow.transform.localScale = Vector3.one;
uiRowRect.position = new Vector2(0, inventoryRowHeight * -(i + 1));
@ -515,33 +519,39 @@ namespace SiegeSong
public void DropItem()
{
RemoveItem();
for (var i = 0; i < SelectedAmount; i++)
{
GetItemByID(SelectedItemID).GetComponent<InventoryItem>().DroppedStartPosition = DroppedItemStartPosition;
GetItemByID(SelectedItemID).GetComponent<InventoryItem>().Drop();
var inventoryItem = GetItemByID(SelectedItemID).GetComponent<InventoryItem>();
var droppedObject = new WorldObject();
droppedObject.FriendlyName = inventoryItem.FriendlyName;
droppedObject.PositionX = DroppedItemStartPosition.position.x;
droppedObject.PositionY = DroppedItemStartPosition.position.y;
droppedObject.PositionZ = DroppedItemStartPosition.position.z;
droppedObject.RotationX = DroppedItemStartPosition.eulerAngles.x;
droppedObject.RotationY = DroppedItemStartPosition.eulerAngles.y;
droppedObject.RotationZ = DroppedItemStartPosition.eulerAngles.z;
droppedObject.DroppableKey = inventoryItem.DroppableKey;
InstanceManager.InstantiateWorldObject(droppedObject);
}
RemoveItem();
}
public void AddItem()
{
if (Inventory.Contents.ContainsKey(SelectedItemID))
Inventory.Contents[SelectedItemID] += SelectedAmount;
else
Inventory.Contents.Add(SelectedItemID, SelectedAmount);
Inventory.AddItem(SelectedItemID, SelectedAmount);
if (InventoryScreenOpen)
UpdateInventoryScreen();
if (TransferScreenOpen)
UpdateTransferScreen();
}
public void RemoveItem()
{
var currentlyOwnedCount = Inventory.Contents.ContainsKey(SelectedItemID) ? Inventory.Contents[SelectedItemID] : 0;
if (currentlyOwnedCount - SelectedAmount > 0)
{
Inventory.Contents[SelectedItemID] = currentlyOwnedCount - SelectedAmount;
}
else
{
Inventory.Contents.Remove(SelectedItemID);
}
Inventory.RemoveItem(SelectedItemID, SelectedAmount, this);
if (InventoryScreenOpen)
UpdateInventoryScreen();
if (TransferScreenOpen)
UpdateTransferScreen();
}
public void ActivateItem()

@ -7,6 +7,12 @@ namespace SiegeSong
{
public class Selectable : MonoBehaviour
{
public string InstanceID;
public string DroppableKey;
public string StationKey;
public string ArchitectureKey;
public string Name = "Selectable";
public string Interaction = "Interact with";
public bool Danger = false;
@ -14,35 +20,28 @@ namespace SiegeSong
public int ItemAmount;
public Sprite Icon;
public UnityEngine.Events.UnityEvent OnInteract;
public InventoryManager InventoryManager;
public Container Container;
void Start()
{
void Start() { }
}
void Update() { }
void Update()
public void Activate(InventoryManager inventoryManager)
{
}
public void Activate(InventoryManager inventory)
{
InventoryManager = inventory;
if (InventoryManager != null)
if (inventoryManager != null)
{
if (Container == null)
{
InventoryManager.SelectedItemID = ItemID;
InventoryManager.SelectedAmount = ItemAmount;
InventoryManager.AddItem();
inventoryManager.InstanceManager.WorldObjectInstances.Remove(inventoryManager.InstanceManager.GetWorldObjectInstanceByID(InstanceID));
inventoryManager.InstanceManager.WorldObjectInstanceIDs.Remove(InstanceID);
inventoryManager.SelectedItemID = ItemID;
inventoryManager.SelectedAmount = ItemAmount;
inventoryManager.AddItem();
Destroy(gameObject);
}
else
{
InventoryManager.OpenTransferMenu(Container);
inventoryManager.OpenTransferMenu(Container);
}
}
else

@ -12,7 +12,7 @@ namespace SiegeSong
public class Statistics
{
public int ID;
public string InstanceID;
public string ActorInstanceID;
public float LocationX;

@ -24,9 +24,9 @@ namespace SiegeSong
public AudioClip[] UseSounds;
public string UseLeftAnimatorField = "UseLeftEquipment";
public string UseAbilityAnimatorField = "UseAbilityEquipment";
public string UseRightAnimatorField = "UseRightEquipment";
private string useLeftAnimatorField = "UseLeftEquipment";
private string useAbilityAnimatorField = "UseAbilityEquipment";
private string useRightAnimatorField = "UseRightEquipment";
bool delayTimerActive;
float useEffectDelayTimer;
@ -69,13 +69,13 @@ namespace SiegeSong
switch (EquipSlots)
{
case EquipableArea.Left:
CharacterAnimator.SetTrigger(UseLeftAnimatorField);
CharacterAnimator.SetTrigger(useLeftAnimatorField);
break;
case EquipableArea.Ability:
CharacterAnimator.SetTrigger(UseAbilityAnimatorField);
CharacterAnimator.SetTrigger(useAbilityAnimatorField);
break;
case EquipableArea.Right:
CharacterAnimator.SetTrigger(UseRightAnimatorField);
CharacterAnimator.SetTrigger(useRightAnimatorField);
break;
}
Weapon.Actor.ExpendStamina(StaminaCost, Increment);

@ -0,0 +1,33 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using SiegeSong;
namespace SiegeSong
{
[System.Serializable]
public class WorldObject
{
public string WorldObjectInstanceID;
public string FriendlyName;
public float PositionX;
public float PositionY;
public float PositionZ;
public float RotationX;
public float RotationY;
public float RotationZ;
public string DroppableKey;
public string StationKey;
public string ArchitectureKey;
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 09aa79951bd839040850b32a43623b7c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -72,7 +72,7 @@ namespace SiegeSong
RaycastHit hit;
if (Input.GetMouseButtonDown(0))
if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit, 25) && hit.transform.gameObject.GetComponent<Statistics>() != null)
ConsoleInput += hit.transform.gameObject.GetComponent<Statistics>().InstanceID;
ConsoleInput += hit.transform.gameObject.GetComponent<Statistics>().ActorInstanceID;
if (Input.GetKeyDown(EnterKey))
SubmitCurrentInput();
@ -95,13 +95,13 @@ namespace SiegeSong
void SubmitCurrentInput()
{
var targetInstanceId = "";
var targetActorInstanceId = "";
var targeted = false;
var validCommand = false;
if (ConsoleInput.IndexOf(subWordDelimiter) != -1 && (ConsoleInput.IndexOf(subWordDelimiter) < ConsoleInput.IndexOf(wordDelimiter) || ConsoleInput.IndexOf(wordDelimiter) == -1))
{
targetInstanceId = ConsoleInput.Split(wordDelimiter)[0].Split(subWordDelimiter)[0];
targetActorInstanceId = ConsoleInput.Split(wordDelimiter)[0].Split(subWordDelimiter)[0];
targeted = true;
}
var words = ConsoleInput.Split(wordDelimiter);
@ -111,7 +111,7 @@ namespace SiegeSong
{
if (!targeted)
{
targetInstanceId = words[1].ToLower();
targetActorInstanceId = words[1].ToLower();
if (words.Length == 3 && int.TryParse(words[2], out instanceCount))
instanceCount = int.Parse(words[2]);
}
@ -134,28 +134,28 @@ namespace SiegeSong
switch (commandWord)
{
case "kill":
KillActor(targetInstanceId);
KillActor(targetActorInstanceId);
break;
case "resurrect":
RessurrectActor(targetInstanceId);
RessurrectActor(targetActorInstanceId);
break;
case "spawn":
SpawnActor(targetInstanceId, instanceCount);
SpawnActor(targetActorInstanceId, instanceCount);
break;
case "despawn":
DespawnActor(targetInstanceId);
DespawnActor(targetActorInstanceId);
break;
case "respawn":
RespawnActor(targetInstanceId);
RespawnActor(targetActorInstanceId);
break;
case "setplayer":
SetActorToPlayer(targetInstanceId);
SetActorToPlayer(targetActorInstanceId);
break;
case "drive":
DriveMotor(targetInstanceId, parameter);
DriveMotor(targetActorInstanceId, parameter);
break;
case "tgm":
ToggleActorGodMode(targetInstanceId);
ToggleActorGodMode(targetActorInstanceId);
break;
}
validCommand = true;
@ -175,61 +175,61 @@ namespace SiegeSong
void KillActor(string instaceID)
{
var actor = InstanceManager.GetInstanceByID(instaceID).GetComponent<StatisticsManager>();
var actor = InstanceManager.GetActorInstanceByID(instaceID).GetComponent<StatisticsManager>();
actor.Stats.Alive = false;
actor.Stats.Health = 0;
}
void RessurrectActor(string instaceID)
{
var actor = InstanceManager.GetInstanceByID(instaceID).GetComponent<StatisticsManager>();
var actor = InstanceManager.GetActorInstanceByID(instaceID).GetComponent<StatisticsManager>();
actor.Stats.Alive = true;
actor.Stats.Health = 1;
}
void SpawnActor(string instaceID, int? instanceCount = 1)
{
var actor = InstanceManager.GetInstanceByID(instaceID).GetComponent<StatisticsManager>();
var actor = InstanceManager.GetActorInstanceByID(instaceID).GetComponent<StatisticsManager>();
//for(var i = 0; i < instanceCount; i++)
// actor.ActorLoader.LoadActor();
}
void RespawnActor(string instaceID)
{
var actor = InstanceManager.GetInstanceByID(instaceID).GetComponent<StatisticsManager>();
var actor = InstanceManager.GetActorInstanceByID(instaceID).GetComponent<StatisticsManager>();
//actor.ActorLoader.LoadActor(true);
}
void DespawnActor(string instaceID)
{
var actor = InstanceManager.GetInstanceByID(instaceID).GetComponent<StatisticsManager>();
var actor = InstanceManager.GetActorInstanceByID(instaceID).GetComponent<StatisticsManager>();
GameObject.Destroy(actor.gameObject);
}
void SetActorToPlayer(string instaceID)
{
var currentPlayerActor = InstanceManager.GetInstanceByID(InstanceManager.CurrentPlayerInstanceID);
var currentPlayerActor = InstanceManager.GetActorInstanceByID(InstanceManager.CurrentPlayerActorInstanceID);
foreach (Transform childtransform in currentPlayerActor.transform)
{
if (childtransform.gameObject.name == "PlayerAgent")
childtransform.gameObject.active = false;
}
var actor = InstanceManager.GetInstanceByID(instaceID);
var actor = InstanceManager.GetActorInstanceByID(instaceID);
foreach (Transform childtransform in actor.transform)
if (childtransform.gameObject.name == "PlayerAgent")
childtransform.gameObject.active = true;
RuntimeManager.PlayerInstance = actor;
RuntimeManager.PlayerActorInstance = actor;
}
void ToggleActorGodMode(string instaceID)
{
var actorStats = InstanceManager.GetInstanceByID(instaceID).GetComponent<Statistics>();
var actorStats = InstanceManager.GetActorInstanceByID(instaceID).GetComponent<Statistics>();
}
void DriveMotor(string instaceID, string direction)
{
var actorMotor = InstanceManager.GetInstanceByID(instaceID).GetComponent<Motor>();
var actorMotor = InstanceManager.GetActorInstanceByID(instaceID).GetComponent<Motor>();
switch (direction)
{
case "forward":

@ -223,7 +223,7 @@ namespace SiegeSong
SaveFileLoader.ActiveSaveFileLocation = $"{Application.persistentDataPath.Replace("/", "\\")}\\{SaveFileLoader.DirectoryName}\\{SavedGames[subMenuSelectedIndex].PlayerFullName.Replace(" ", "_")}_{SavedGames[subMenuSelectedIndex].FileNameSuffix}";
SaveFileLoader.LoadGameFile();
ResumeGame();
SaveFileLoader.RuntimeManager.PlayerInstance.GetComponentInChildren<NotificationManager>().Notify("Game Loaded!");
SaveFileLoader.RuntimeManager.PlayerActorInstance.GetComponentInChildren<NotificationManager>().Notify("Game Loaded!");
}
void SaveGame()
@ -234,7 +234,7 @@ namespace SiegeSong
SaveFileLoader.SaveGameFile($"{Application.persistentDataPath.Replace("/", "\\")}\\{SaveFileLoader.DirectoryName}\\{SavedGames[subMenuSelectedIndex - 1].PlayerFullName.Replace(" ", "_")}_{SavedGames[subMenuSelectedIndex - 1].FileNameSuffix}");
ResumeGame();
SaveFileLoader.RuntimeManager.PlayerInstance.GetComponentInChildren<NotificationManager>().Notify("Game Saved!");
SaveFileLoader.RuntimeManager.PlayerActorInstance.GetComponentInChildren<NotificationManager>().Notify("Game Saved!");
InitializeSaveLoadSubmenu();
}

@ -5,20 +5,12 @@ using SiegeSong;
namespace SiegeSong
{
//[System.Serializable] public struct ActorList { public [] actors; }
//[Serializable] public struct TerrainDeformationList { public TerrainDeformation[] terrainDeformations; }
//[Serializable] public struct FactionOperationList { public FactionOperation[] factionOperations; }
//[Serializable] public struct FactionOperationList { public FactionOperation[] factionOperations; }
//[Serializable] public struct QuestlineChoiceList { public QuestlineChoice[] questlineChoices; }
//[Serializable] public struct WorldObjectLocationList { public WorldObjectLocation[] worldObjectLocations; }
[System.Serializable]
public class SaveFile
{
public List<Statistics> Actors;
//public Dictionary<InventoryItem, Vector3> WorldObjectLocations; // To Do - convert to flat sub-object
//public TerrainDeformationList WorldObjectLocationList;
public List<WorldObject> WorldObjects;
//public TerrainDeformationList TerrainDeformationList;

@ -34,6 +34,8 @@ namespace SiegeSong
private int StartingYear = 1136;
private WaitForEndOfFrame waitForEndOfFrame = new WaitForEndOfFrame();
private string defaultPlayerSpeciesKey = "_Human";
public string DirectoryName = "SaveGameData";
public MetaData[] GetSaveFilesMetaData()
@ -67,11 +69,11 @@ namespace SiegeSong
var playerFriendlyFullName = "";
var actorList = new List<Statistics>();
for (var i = 0; i < InstanceManager.Instances.Length; i++)
for (var i = 0; i < InstanceManager.ActorInstances.Count; i++)
{
var instance = InstanceManager.Instances[i];
var instanceID = InstanceManager.InstanceIDs[i];
if (instanceID == InstanceManager.CurrentPlayerInstanceID)
var instance = InstanceManager.ActorInstances[i];
var instanceID = InstanceManager.ActorInstanceIDs[i];
if (instanceID == InstanceManager.CurrentPlayerActorInstanceID)
{
var actor = instance.GetComponent<StatisticsManager>();
actorList.Add(actor.Stats);
@ -79,13 +81,31 @@ namespace SiegeSong
ActiveSaveFileMeta.PlayerFullName = playerFriendlyFullName;
ActiveSaveFileMeta.PlayerLevel = actor.Stats.Level;
ActiveSaveFileMeta.PlayerActiveQuestFriendlyName = "None";
ActiveSaveFileMeta.ScreenWidth = Screen.width;
ActiveSaveFileMeta.ScreenHeight = Screen.height;
}
}
ActiveSaveFile.Actors = actorList;
var worldObjectList = new List<WorldObject>();
foreach (var worldObjectInstance in InstanceManager.WorldObjectInstances)
{
var worldObject = new WorldObject();
worldObject.WorldObjectInstanceID = worldObjectInstance.GetComponent<Selectable>().InstanceID;
worldObject.FriendlyName = worldObjectInstance.GetComponent<Selectable>().Name;
worldObject.PositionX = worldObjectInstance.transform.position.x;
worldObject.PositionY = worldObjectInstance.transform.position.y;
worldObject.PositionZ = worldObjectInstance.transform.position.z;
worldObject.RotationX = worldObjectInstance.transform.eulerAngles.x;
worldObject.RotationY = worldObjectInstance.transform.eulerAngles.y;
worldObject.RotationZ = worldObjectInstance.transform.eulerAngles.z;
worldObject.DroppableKey = worldObjectInstance.GetComponent<Selectable>().DroppableKey;
worldObject.StationKey = worldObjectInstance.GetComponent<Selectable>().StationKey;
worldObject.ArchitectureKey = worldObjectInstance.GetComponent<Selectable>().ArchitectureKey;
worldObjectList.Add(worldObject);
}
ActiveSaveFile.WorldObjects = worldObjectList;
//ActiveSaveFile.PreviewImage;
ActiveSaveFileMeta.ScreenWidth = Screen.width;
ActiveSaveFileMeta.ScreenHeight = Screen.height;
var systemDateTime = System.DateTime.Now;
ActiveSaveFileMeta.LastPlayedOn = $"{(systemDateTime.Hour > 12 ? $"{(systemDateTime.Hour - (systemDateTime.Hour == 12 ? 0 : 12)).ToString("D2")}:{systemDateTime.Minute.ToString("D2")}{(systemDateTime.Hour > 12 ? "PM" : "AM")}" : $"{systemDateTime.Hour.ToString("D2")}:{systemDateTime.Minute.ToString("D2")}{(systemDateTime.Hour > 12 ? "PM" : "AM")}")} {systemDateTime.Day.ToString("D2")}/{systemDateTime.Month.ToString("D2")}/{systemDateTime.Year}";
@ -125,73 +145,21 @@ namespace SiegeSong
{
RuntimeManager.DePopulateReferences();
InstanceManager.ClearAndUnload();
//RuntimeManager.ClearAndUnload();
ActiveSaveFile = JsonUtility.FromJson<SaveFile>(System.IO.File.ReadAllText($"{ActiveSaveFileLocation.Replace("/", "\\")}.ssng"));
GameObject instance = new GameObject();
foreach (var stats in ActiveSaveFile.Actors)
{
for(var i = 0; i < InstanceManager.SpeciesDefinitionsContainer.transform.childCount; i++)
{
var species = InstanceManager.SpeciesDefinitionsContainer.transform.GetChild(i);
if (species.gameObject.name == InstanceManager.HumanSpeciesKey)
instance = GameObject.Instantiate(species).gameObject;
}
if (instance.GetComponent<StatisticsManager>() == null)
instance.AddComponent<StatisticsManager>();
var actor = instance.GetComponent<StatisticsManager>();
if (actor.Stats == null)
actor.Stats = new Statistics();
if (!instance.active)
instance.active = true;
var instance = InstanceManager.InstantiateActor(stats);
if (stats.IsPlayer)
{
for (var j = 0; j < instance.transform.childCount; j++)
{
if (instance.transform.GetChild(j).name == "PlayerAgent")
{
instance.transform.GetChild(j).gameObject.active = true;
PlayerTracker.transform.parent = instance.transform;
}
}
}
actor.Stats = stats;
instance.transform.eulerAngles = new Vector3(stats.RotationX, stats.RotationY, stats.RotationZ);
instance.transform.position = new Vector3(stats.LocationX, stats.LocationY, stats.LocationZ);
for (var i = 0; i < stats.InventoryItemIDs.Count; i++)
{
actor.Inventory.SelectedItemID = stats.InventoryItemIDs[i];
actor.Inventory.SelectedAmount = stats.InventoryItemQuantities[i];
actor.Inventory.AddItem();
actor.Inventory.SelectedItemID = 0;
actor.Inventory.SelectedAmount = 0;
actor.Inventory.SelectedItemIndex = 0;
PlayerTracker.transform.parent = instance.Value.transform;
RuntimeManager.PlayerActorInstance = instance.Value;
InstanceManager.CurrentPlayerActorInstanceID = instance.Key;
}
foreach (var itemId in stats.ActiveInventoryItemIDs)
{
if (actor.Inventory.GetItemByID(itemId).GetComponent<Equipable>() != null)
actor.Inventory.EquipmentManager.AddEquipmentToSlots(actor.Inventory.GetItemByID(itemId));
}
actor.Inventory.ApparrelManager.CurrentlyActiveIDs = stats.ActiveInventoryItemIDs.ToArray();
actor.Inventory.ApparrelManager.UpdateApparrel();
actor.Stats.InstanceID = InstanceManager.GenerateInstanceID();
instance.gameObject.name = $"{actor.Stats.FirstName} {actor.Stats.LastName}";
InstanceManager.AddInstance(actor.Stats.InstanceID, instance);
if (stats.IsPlayer)
foreach (var worldObject in ActiveSaveFile.WorldObjects)
{
InstanceManager.CurrentPlayerInstanceID = actor.Stats.InstanceID;
RuntimeManager.PlayerInstance = instance;
}
InstanceManager.InstantiateWorldObject(worldObject);
}
RuntimeManager.Calendar.SetDateTime(ActiveSaveFile.Minute, ActiveSaveFile.Hour, ActiveSaveFile.Day, ActiveSaveFile.Year);
@ -202,27 +170,27 @@ namespace SiegeSong
{
ActiveSaveFile = new SaveFile();
var playerInstance = new GameObject();
GameObject playerActorInstance = null;
for (var i = 0; i < InstanceManager.SpeciesDefinitionsContainer.transform.childCount; i++)
{
var species = InstanceManager.SpeciesDefinitionsContainer.transform.GetChild(i);
if (species.gameObject.name == InstanceManager.HumanSpeciesKey)
playerInstance = GameObject.Instantiate(species).gameObject;
if (species.gameObject.name == defaultPlayerSpeciesKey)
playerActorInstance = GameObject.Instantiate(species).gameObject;
}
var actor = playerInstance.GetComponent<StatisticsManager>();
var actor = playerActorInstance.GetComponent<StatisticsManager>();
actor.Stats = new Statistics();
for (var i = 0; i < playerInstance.transform.childCount; i++)
for (var i = 0; i < playerActorInstance.transform.childCount; i++)
{
var child = playerInstance.transform.GetChild(i);
var child = playerActorInstance.transform.GetChild(i);
if (child.gameObject.name == "PlayerAgent")
{
child.gameObject.active = true;
PlayerTracker.transform.parent = playerInstance.transform;
//playerInstance.transform.eulerAngles = new Vector3(StartingRotationX, StartingRotationY, StartingRotationZ);
playerInstance.transform.position = new Vector3(StartingPositionX, StartingPositionY, StartingPositionZ);
PlayerTracker.transform.parent = playerActorInstance.transform;
//playerActorInstance.transform.eulerAngles = new Vector3(StartingRotationX, StartingRotationY, StartingRotationZ);
playerActorInstance.transform.position = new Vector3(StartingPositionX, StartingPositionY, StartingPositionZ);
}
}
@ -245,12 +213,14 @@ namespace SiegeSong
actor.Inventory.ApparrelManager.CurrentlyActiveIDs = StartingPlayerActiveInventoryItemIDs;
actor.Inventory.ApparrelManager.UpdateApparrel();
actor.Stats.InstanceID = InstanceManager.GenerateInstanceID();
playerInstance.gameObject.name = $"{actor.Stats.FirstName} {actor.Stats.LastName}";
InstanceManager.AddInstance(actor.Stats.InstanceID, playerInstance);
InstanceManager.CurrentPlayerInstanceID = actor.Stats.InstanceID;
RuntimeManager.PlayerInstance = playerInstance;
playerInstance.gameObject.active = true;
actor.Stats.ActorInstanceID = InstanceManager.GenerateActorInstanceID();
playerActorInstance.gameObject.name = $"{actor.Stats.FirstName} {actor.Stats.LastName}";
InstanceManager.ActorInstances.Add(playerActorInstance);
InstanceManager.ActorInstanceIDs.Add(actor.Stats.ActorInstanceID);
InstanceManager.CurrentPlayerActorInstanceID = actor.Stats.ActorInstanceID;
RuntimeManager.PlayerActorInstance = playerActorInstance;
playerActorInstance.transform.parent = InstanceManager.ActorInstanceContainer.transform;
playerActorInstance.gameObject.active = true;
RuntimeManager.PopulateReferences();
RuntimeManager.Calendar.SetDateTime(StartingMinute, StartingHour, StartingDay, StartingYear);
//ActorEditor.ChangeAppearance(actor);
@ -270,11 +240,11 @@ namespace SiegeSong
public IEnumerator TakeTemporaryScreenCapture()
{
var camera = RuntimeManager.PlayerInstance.GetComponentInChildren<CameraManager>().ActiveCamera.GetComponentInChildren<Camera>();
var camera = RuntimeManager.PlayerActorInstance.GetComponentInChildren<CameraManager>().ActiveCamera.GetComponentInChildren<Camera>();
var screenTexture = new RenderTexture(Screen.width, Screen.height, 16);
var oldTargetTexture = camera.targetTexture;
RuntimeManager.PlayerInstance.GetComponentInChildren<HUDManager>().UIWrapper.active = false;
RuntimeManager.PlayerActorInstance.GetComponentInChildren<HUDManager>().UIWrapper.active = false;
camera.targetTexture = screenTexture;
camera.Render();
@ -285,7 +255,7 @@ namespace SiegeSong
var byteArray = renderedTexture.EncodeToPNG();
RuntimeManager.PlayerInstance.GetComponentInChildren<HUDManager>().UIWrapper.active = true;
RuntimeManager.PlayerActorInstance.GetComponentInChildren<HUDManager>().UIWrapper.active = true;
System.IO.File.WriteAllBytes($"{Application.persistentDataPath.Replace("/", "\\")}\\{DirectoryName}\\_Temp.png", byteArray);

@ -9,48 +9,165 @@ namespace SiegeSong
{
public GameObject SpeciesDefinitionsContainer;
public GameObject ActorInstanceContainer;
public string CurrentPlayerInstanceID;
public GameObject[] Instances;
public string[] InstanceIDs;
public int[] ActorIDs;
public string CurrentPlayerActorInstanceID;
public List<GameObject> ActorInstances;
public List<string> ActorInstanceIDs;
public string HumanSpeciesKey = "_Human";
public GameObject DroppableDefinitionContainer;
public GameObject ArchitectureDefinitionContainer;
public GameObject StationDefinitionContainer;
public GameObject WorldObjectInstanceContainer;
public List<GameObject> WorldObjectInstances;
public List<string> WorldObjectInstanceIDs;
public int LastGeneratedInstanceIndex;
public string PlayerAgentKey = "PlayerAgent";
private int LastGeneratedWorldObjectInstanceIndex;
private int LastGeneratedActorInstanceIndex;
private int MaxActorInstanceIDLength = 5;
private int MaxWorldObjectInstanceIDLength = 6;
public int MaxInstanceIDLength = 5;
void Start() { }
void Start()
void Update() { }
public KeyValuePair<string, GameObject> InstantiateWorldObject(WorldObject worldObject)
{
var worldObjectKey = "";
GameObject definitionList;
GameObject instance = null;
var instanceID = GenerateWorldObjectInstanceID();
if (!string.IsNullOrEmpty(worldObject.StationKey))
{
definitionList = StationDefinitionContainer;
worldObjectKey = worldObject.StationKey;
}
else if (!string.IsNullOrEmpty(worldObject.ArchitectureKey))
{
definitionList = ArchitectureDefinitionContainer;
worldObjectKey = worldObject.ArchitectureKey;
}
else
{
definitionList = DroppableDefinitionContainer;
worldObjectKey = worldObject.DroppableKey;
}
for (var i = 0; i < definitionList.transform.childCount; i++)
{
var worldObjectDefinition = definitionList.transform.GetChild(i);
if (worldObjectDefinition.gameObject.name == worldObjectKey)
instance = GameObject.Instantiate(worldObjectDefinition).gameObject;
}
instance.transform.eulerAngles = new Vector3(worldObject.RotationX, worldObject.RotationY, worldObject.RotationZ);
instance.transform.position = new Vector3(worldObject.PositionX, worldObject.PositionY, worldObject.PositionZ);
instance.gameObject.name = $"{(string.IsNullOrEmpty(worldObject.FriendlyName) ? worldObjectKey : worldObject.FriendlyName)}_{instanceID}";
instance.transform.parent = WorldObjectInstanceContainer.transform;
instance.active = true;
instance.GetComponentInChildren<Selectable>().InstanceID = instanceID;
if (!string.IsNullOrEmpty(worldObject.StationKey))
instance.GetComponentInChildren<Selectable>().StationKey = worldObject.StationKey;
else if (!string.IsNullOrEmpty(worldObject.ArchitectureKey))
instance.GetComponentInChildren<Selectable>().ArchitectureKey = worldObject.ArchitectureKey;
else
instance.GetComponentInChildren<Selectable>().DroppableKey = worldObject.DroppableKey;
WorldObjectInstances.Add(instance);
WorldObjectInstanceIDs.Add(instanceID);
return new KeyValuePair<string, GameObject>(instanceID, instance);
}
public KeyValuePair<string, GameObject> InstantiateActor(Statistics stats)
{
GameObject instance = null;
for (var i = 0; i < SpeciesDefinitionsContainer.transform.childCount; i++)
{
var species = SpeciesDefinitionsContainer.transform.GetChild(i);
if (species.gameObject.name == stats.SpeciesKey)
instance = GameObject.Instantiate(species).gameObject;
}
if (instance.GetComponent<StatisticsManager>() == null)
instance.AddComponent<StatisticsManager>();
var actor = instance.GetComponent<StatisticsManager>();
if (actor.Stats == null)
actor.Stats = new Statistics();
if (!instance.active)
instance.active = true;
if (stats.IsPlayer)
{
for (var j = 0; j < instance.transform.childCount; j++)
{
if (instance.transform.GetChild(j).name == "PlayerAgent")
{
instance.transform.GetChild(j).gameObject.active = true;
}
}
}
actor.Stats = stats;
instance.transform.eulerAngles = new Vector3(stats.RotationX, stats.RotationY, stats.RotationZ);
instance.transform.position = new Vector3(stats.LocationX, stats.LocationY, stats.LocationZ);
instance.transform.parent = ActorInstanceContainer.transform;
void Update()
for (var i = 0; i < stats.InventoryItemIDs.Count; i++)
{
actor.Inventory.SelectedItemID = stats.InventoryItemIDs[i];
actor.Inventory.SelectedAmount = stats.InventoryItemQuantities[i];
actor.Inventory.AddItem();
actor.Inventory.SelectedItemID = 0;
actor.Inventory.SelectedAmount = 0;
actor.Inventory.SelectedItemIndex = 0;
}
foreach (var itemId in stats.ActiveInventoryItemIDs)
{
if (actor.Inventory.GetItemByID(itemId).GetComponent<Equipable>() != null)
actor.Inventory.EquipmentManager.AddEquipmentToSlots(actor.Inventory.GetItemByID(itemId));
}
actor.Inventory.ApparrelManager.CurrentlyActiveIDs = stats.ActiveInventoryItemIDs.ToArray();
actor.Inventory.ApparrelManager.UpdateApparrel();
actor.Stats.ActorInstanceID = GenerateActorInstanceID();
instance.gameObject.name = $"{actor.Stats.FirstName} {actor.Stats.LastName}";
ActorInstances.Add(instance);
ActorInstanceIDs.Add(actor.Stats.ActorInstanceID);
return new KeyValuePair<string, GameObject>(actor.Stats.ActorInstanceID, instance);
}
public void ClearAndUnload()
{
for (var i = 0; i < Instances.Length; i++)
for (var i = 0; i < ActorInstances.Count; i++)
{
Instances[i].active = false;
GameObject.Destroy(Instances[i]);
ActorInstances[i].active = false;
GameObject.Destroy(ActorInstances[i]);
}
for (var i = 0; i < WorldObjectInstances.Count; i++)
{
WorldObjectInstances[i].active = false;
GameObject.Destroy(ActorInstances[i]);
}
LastGeneratedInstanceIndex = 0;
CurrentPlayerInstanceID = "";
Instances = new GameObject[0];
InstanceIDs = new string[0];
ActorIDs = new int[0];
LastGeneratedActorInstanceIndex = 0;
CurrentPlayerActorInstanceID = "";
ActorInstances = new List<GameObject>();
ActorInstanceIDs = new List<string>();
}
public string GenerateInstanceID()
public string GenerateWorldObjectInstanceID()
{
LastGeneratedInstanceIndex++;
var instanceIndex = LastGeneratedInstanceIndex.ToString();
LastGeneratedWorldObjectInstanceIndex++;
var instanceIndex = LastGeneratedWorldObjectInstanceIndex.ToString();
var newInstanceID = "";
for (var i = 0; i < MaxInstanceIDLength; i++)
for (var i = 0; i < MaxWorldObjectInstanceIDLength; i++)
{
if (i >= instanceIndex.Length)
{
@ -64,56 +181,47 @@ namespace SiegeSong
return newInstanceID;
}
public GameObject GetInstanceByID(string instanceID)
public string GenerateActorInstanceID()
{
for(var i = 0; i < Instances.Length; i++)
LastGeneratedActorInstanceIndex++;
var instanceIndex = LastGeneratedActorInstanceIndex.ToString();
var newInstanceID = "";
for (var i = 0; i < MaxActorInstanceIDLength; i++)
{
if (InstanceIDs[i].ToLower() == instanceID.ToLower())
if (i >= instanceIndex.Length)
{
return Instances[i];
newInstanceID += "A";
}
else
{
newInstanceID += "BCDEFGHIJK"[int.Parse(instanceIndex[i].ToString())];
}
return new GameObject();
}
public void AddInstance(string instanceID, GameObject newInstance)
{
var newInstanceArray = new GameObject[Instances.Length + 1];
var newInstanceIDArray = new string[InstanceIDs.Length + 1];
Instances.CopyTo(newInstanceArray, 0);
InstanceIDs.CopyTo(newInstanceIDArray, 0);
newInstanceArray[newInstanceArray.Length - 1] = newInstance;
newInstanceIDArray[newInstanceIDArray.Length - 1] = instanceID;
Instances = newInstanceArray;
InstanceIDs = newInstanceIDArray;
newInstance.transform.parent = ActorInstanceContainer.transform;
return newInstanceID;
}
public void RemoveInstance(string instanceID)
public GameObject GetWorldObjectInstanceByID(string instanceID)
{
var newInstanceArray = new GameObject[Instances.Length - 1];
var newInstanceIDArray = new string[InstanceIDs.Length - 1];
Instances.CopyTo(newInstanceArray, 0);
InstanceIDs.CopyTo(newInstanceIDArray, 0);
var iterator = 0;
var index = 0;
foreach (var instance in Instances)
for (var i = 0; i < WorldObjectInstances.Count; i++)
{
iterator++;
if (InstanceIDs[iterator].ToLower() == instanceID.ToLower())
if (WorldObjectInstanceIDs[i].ToLower() == instanceID.ToLower())
{
var instanceObject = Instances[iterator];
GameObject.Destroy(instanceObject);
return WorldObjectInstances[i];
}
else
}
return null;
}
public GameObject GetActorInstanceByID(string instanceID)
{
for (var i = 0; i < ActorInstances.Count; i++)
{
if (ActorInstanceIDs[i].ToLower() == instanceID.ToLower())
{
index++;
newInstanceArray[index] = instance;
newInstanceIDArray[index] = InstanceIDs[iterator];
return ActorInstances[i];
}
}
Instances = newInstanceArray;
InstanceIDs = newInstanceIDArray;
return null;
}
}
}

@ -8,7 +8,7 @@ namespace SiegeSong
{
public class RuntimeManager : MonoBehaviour
{
public GameObject PlayerInstance;
public GameObject PlayerActorInstance;
public GaiaScenePlayer GaiaPlayer;
public GaiaGlobal GaiaGlobalSettings;
public Suimono.Core.SuimonoObject WaterSurface;
@ -20,33 +20,33 @@ namespace SiegeSong
{
if (EnviroSkyMgr.instance != null)
{
EnviroSkyMgr.instance.Player = PlayerInstance;
EnviroSkyMgr.instance.Player = PlayerActorInstance;
EnviroSkyMgr.instance.Camera = GetComponent<Camera>();
}
if (GaiaPlayer != null)
{
GaiaPlayer.transform.parent = PlayerInstance.transform;
GaiaPlayer.transform.parent = PlayerActorInstance.transform;
GaiaPlayer.transform.position = Vector3.zero;
}
if (PlayerInstance.GetComponentInChildren<CameraManager>() != null
&& PlayerInstance.GetComponentInChildren<CameraManager>().ActiveCamera != null
&& PlayerInstance.GetComponentInChildren<CameraManager>().ActiveCamera.transform.childCount > 0)
if (PlayerActorInstance.GetComponentInChildren<CameraManager>() != null
&& PlayerActorInstance.GetComponentInChildren<CameraManager>().ActiveCamera != null
&& PlayerActorInstance.GetComponentInChildren<CameraManager>().ActiveCamera.transform.childCount > 0)
{
var cameraGameObject = PlayerInstance.GetComponentInChildren<CameraManager>().ActiveCamera.transform.GetChild(0);
var camera = PlayerInstance.GetComponentInChildren<CameraManager>().ActiveCamera.GetComponentInChildren<Camera>();
var cameraGameObject = PlayerActorInstance.GetComponentInChildren<CameraManager>().ActiveCamera.transform.GetChild(0);
var camera = PlayerActorInstance.GetComponentInChildren<CameraManager>().ActiveCamera.GetComponentInChildren<Camera>();
if (WaterModule != null)
{
WaterModule.setCamera = PlayerInstance.GetComponentInChildren<CameraManager>().ActiveCamera.transform.GetChild(0);
WaterModule.mainCamera = PlayerInstance.GetComponentInChildren<CameraManager>().ActiveCamera.transform.GetChild(0);
WaterModule.manualCamera = PlayerInstance.GetComponentInChildren<CameraManager>().ActiveCamera.transform.GetChild(0);
WaterModule.setTrack = PlayerInstance.transform;
WaterModule.setCamera = PlayerActorInstance.GetComponentInChildren<CameraManager>().ActiveCamera.transform.GetChild(0);
WaterModule.mainCamera = PlayerActorInstance.GetComponentInChildren<CameraManager>().ActiveCamera.transform.GetChild(0);
WaterModule.manualCamera = PlayerActorInstance.GetComponentInChildren<CameraManager>().ActiveCamera.transform.GetChild(0);
WaterModule.setTrack = PlayerActorInstance.transform;
WaterModule.playSounds = true;
}
if (GaiaGlobalSettings != null)
GaiaGlobalSettings.m_mainCamera = PlayerInstance.GetComponentInChildren<CameraManager>().ActiveCamera.GetComponentInChildren<Camera>();
GaiaGlobalSettings.m_mainCamera = PlayerActorInstance.GetComponentInChildren<CameraManager>().ActiveCamera.GetComponentInChildren<Camera>();
}
}

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save