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) public void AddItem(int itemID, int amount)
{ {
@ -37,32 +34,28 @@ namespace SiegeSong
Contents.Add(itemID, amount); 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)) if (Contents.ContainsKey(itemID))
{ {
var currentlyOwnedCount = Contents[itemID]; var currentlyOwnedCount = Contents[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>(); if (InventoryManager.EquipmentManager.LeftHandCurrentEquipIndex == itemID)
for (var i = 0; i < InventoryManager.ApparrelManager.CurrentlyActiveIDs.Length; i++) InventoryManager.EquipmentManager.LeftHandCurrentEquipIndex = 0;
if (InventoryManager.ApparrelManager.CurrentlyActiveIDs[i] != itemID) if (InventoryManager.EquipmentManager.AbilityCurrentEquipIndex == itemID)
newList.Add(InventoryManager.ApparrelManager.CurrentlyActiveIDs[i]); InventoryManager.EquipmentManager.AbilityCurrentEquipIndex = 0;
InventoryManager.ApparrelManager.CurrentlyActiveIDs = newList.ToArray(); if (InventoryManager.EquipmentManager.RightHandCurrentEquipIndex == itemID)
InventoryManager.ApparrelManager.UpdateApparrel(); InventoryManager.EquipmentManager.RightHandCurrentEquipIndex = 0;
if (InventoryManager.ApparrelManager.CurrentlyActiveIDs.Contains(itemID))
{
var newList = new List<int>();
for (var i = 0; i < InventoryManager.ApparrelManager.CurrentlyActiveIDs.Length; i++)
if (InventoryManager.ApparrelManager.CurrentlyActiveIDs[i] != itemID)
newList.Add(InventoryManager.ApparrelManager.CurrentlyActiveIDs[i]);
InventoryManager.ApparrelManager.CurrentlyActiveIDs = newList.ToArray();
InventoryManager.ApparrelManager.UpdateApparrel();
}
} }
if (currentlyOwnedCount - amount > 0) if (currentlyOwnedCount - amount > 0)

@ -12,6 +12,7 @@ namespace SiegeSong
{ {
public int ID; public int ID;
public string WardrobeKey; public string WardrobeKey;
public string DroppableKey;
public bool VisibleToPlayer; public bool VisibleToPlayer;
public int MonetaryValue; public int MonetaryValue;
public float PhysicalWeight; public float PhysicalWeight;
@ -21,9 +22,6 @@ namespace SiegeSong
public string FriendlyName; public string FriendlyName;
public string Description; public string Description;
public string[] Effects; public string[] Effects;
public GameObject DroppableItem;
public GameObject InventoryManager;
public GameObject ReadMenuManager;
public ItemType Type; public ItemType Type;
public EquipableType EquipableType; public EquipableType EquipableType;
public AparrelSlot AparrelSlot; public AparrelSlot AparrelSlot;
@ -31,7 +29,6 @@ namespace SiegeSong
public UnityEvent Use; public UnityEvent Use;
public UnityEvent UseStart; public UnityEvent UseStart;
public UnityEvent UseEnd; public UnityEvent UseEnd;
public Transform DroppedStartPosition;
public Dictionary<DamageWeight, Dictionary<DamageType, bool>> FullProtection; public Dictionary<DamageWeight, Dictionary<DamageType, bool>> FullProtection;
public Dictionary<DamageWeight, Dictionary<DamageType, bool>> PartialProtection; public Dictionary<DamageWeight, Dictionary<DamageType, bool>> PartialProtection;
@ -67,7 +64,7 @@ namespace SiegeSong
{ {
PhysicalCondition = 0; PhysicalCondition = 0;
Broken = true; Broken = true;
} }
} }
public void Activate(ApparrelManager apparrelManager) public void Activate(ApparrelManager apparrelManager)
@ -96,27 +93,21 @@ namespace SiegeSong
apparrelManager.InventoryManager.Actor.Stats.ActiveInventoryItemIDs = activeIdsList; apparrelManager.InventoryManager.Actor.Stats.ActiveInventoryItemIDs = activeIdsList;
apparrelManager.UpdateApparrel(); apparrelManager.UpdateApparrel();
} }
else if (EquipableType == EquipableType.Equipment)
{
}
break; break;
case ItemType.Readable: case ItemType.Readable:
var readMenu = ReadMenuManager.GetComponent<ReadMenuManager>(); //readMenu.SelectedBookID = ID;
readMenu.SelectedBookID = ID; //readMenu.Open();
readMenu.Open();
break; break;
case ItemType.Consumable: case ItemType.Consumable:
var inventory = InventoryManager.GetComponent<InventoryManager>(); apparrelManager.InventoryManager.SelectedItemID = ID;
inventory.SelectedItemID = ID; apparrelManager.InventoryManager.SelectedAmount = 1;
inventory.SelectedAmount = 1; apparrelManager.InventoryManager.RemoveItem();
inventory.RemoveItem();
if (Use != null) if (Use != null)
Use.Invoke(); Use.Invoke();
@ -147,12 +138,5 @@ namespace SiegeSong
break; 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 class InventoryManager : MonoBehaviour
{ {
public InstanceManager InstanceManager;
public EquipmentManager EquipmentManager; public EquipmentManager EquipmentManager;
public ApparrelManager ApparrelManager; public ApparrelManager ApparrelManager;
@ -26,7 +27,6 @@ namespace SiegeSong
public GameObject TransferScreen; public GameObject TransferScreen;
public GameObject InventoryScreen; public GameObject InventoryScreen;
public Text DescriptionLabel; public Text DescriptionLabel;
public Text EffectsLabel; public Text EffectsLabel;
//public SkinnedMesh PreviewMesh; //public SkinnedMesh PreviewMesh;
@ -55,16 +55,12 @@ namespace SiegeSong
public GameObject TransferOtherPointer; public GameObject TransferOtherPointer;
public GameObject TransferSelfPointer; public GameObject TransferSelfPointer;
public Container TransferOther; public Container TransferOther;
private List<GameObject> TransferRows;
public GameObject TransferRowArea; public GameObject TransferRowArea;
public GameObject TransferRowPrefab; public GameObject TransferRowPrefab;
public GameObject ItemDictionary; public GameObject ItemDictionary;
public int SelectedItemID; public int SelectedItemID;
public int SelectedAmount; public int SelectedAmount;
private List<GameObject> InventoryRows;
private Dictionary<int, GameObject> rows;
public GameObject InventoryRowArea; public GameObject InventoryRowArea;
public GameObject InventoryRowPrefab; public GameObject InventoryRowPrefab;
@ -76,6 +72,7 @@ namespace SiegeSong
public int SelectedItemIndex; public int SelectedItemIndex;
public Transform DroppedItemStartPosition;
private bool downArrowInputOldState; private bool downArrowInputOldState;
private bool upArrowInputOldState; private bool upArrowInputOldState;
@ -84,8 +81,6 @@ namespace SiegeSong
private bool activateInputOldState; private bool activateInputOldState;
private bool dropInputOldState; private bool dropInputOldState;
public Transform DroppedItemStartPosition;
private Color enabledTextColor; private Color enabledTextColor;
private Color disabledTextColor; private Color disabledTextColor;
@ -96,11 +91,16 @@ namespace SiegeSong
private float rowsXOffset = 0f; private float rowsXOffset = 0f;
private float rowsYOffset = 0f; private float rowsYOffset = 0f;
private List<GameObject> TransferRows;
private List<GameObject> InventoryRows;
private Dictionary<int, GameObject> rows;
void Start() void Start()
{ {
rows = new Dictionary<int, GameObject>(); rows = new Dictionary<int, GameObject>();
InventoryRows = new List<GameObject>(); InventoryRows = new List<GameObject>();
Inventory.InventoryManager = this; Inventory.InventoryManager = this;
SelectedAmount = 1;
} }
public void OnPointerClick(PointerEventData eventData) public void OnPointerClick(PointerEventData eventData)
@ -168,7 +168,6 @@ namespace SiegeSong
SelectedItemID = Inventory.GetIDByOwnedIndex(SelectedItemIndex); SelectedItemID = Inventory.GetIDByOwnedIndex(SelectedItemIndex);
if (TransferScreenOpen && !TransferTargetSelf) if (TransferScreenOpen && !TransferTargetSelf)
SelectedItemID = TransferOther.GetIDByOwnedIndex(SelectedItemIndex); SelectedItemID = TransferOther.GetIDByOwnedIndex(SelectedItemIndex);
SelectedAmount = 1;
if (DropInputNewState) if (DropInputNewState)
dropInputOldState = true; dropInputOldState = true;
if (ActivateInputNewState) if (ActivateInputNewState)
@ -424,15 +423,20 @@ namespace SiegeSong
MaxCarryWeightLabel.text = Actor.Stats.MaxCarryWeight.ToString(); MaxCarryWeightLabel.text = Actor.Stats.MaxCarryWeight.ToString();
CurrentGoldLabel.text = Actor.Stats.Gold.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++) 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 uiRow = rows != null && rows.ContainsKey(Inventory.GetIDByOwnedIndex(i)) ? rows[Inventory.GetIDByOwnedIndex(i)] : Instantiate(InventoryRowPrefab);
var uiRowProperties = uiRow.GetComponent<InventoryRow>(); var uiRowProperties = uiRow.GetComponent<InventoryRow>();
var uiRowRect = uiRow.GetComponent<RectTransform>();
uiRow.active = true;
uiRowProperties.InventoryManager = this; uiRowProperties.InventoryManager = this;
uiRowProperties.ItemID = Inventory.GetIDByOwnedIndex(i); uiRowProperties.ItemID = Inventory.GetIDByOwnedIndex(i);
var rowExists = false;
var uiRowRect = uiRow.GetComponent<RectTransform>();
uiRow.transform.parent = InventoryRowArea.transform; uiRow.transform.parent = InventoryRowArea.transform;
uiRow.transform.localScale = Vector3.one; uiRow.transform.localScale = Vector3.one;
uiRowRect.position = new Vector2(0, inventoryRowHeight * -(i + 1)); uiRowRect.position = new Vector2(0, inventoryRowHeight * -(i + 1));
@ -515,33 +519,39 @@ namespace SiegeSong
public void DropItem() public void DropItem()
{ {
RemoveItem();
for (var i = 0; i < SelectedAmount; i++) for (var i = 0; i < SelectedAmount; i++)
{ {
GetItemByID(SelectedItemID).GetComponent<InventoryItem>().DroppedStartPosition = DroppedItemStartPosition; var inventoryItem = GetItemByID(SelectedItemID).GetComponent<InventoryItem>();
GetItemByID(SelectedItemID).GetComponent<InventoryItem>().Drop(); 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() public void AddItem()
{ {
if (Inventory.Contents.ContainsKey(SelectedItemID)) Inventory.AddItem(SelectedItemID, SelectedAmount);
Inventory.Contents[SelectedItemID] += SelectedAmount; if (InventoryScreenOpen)
else UpdateInventoryScreen();
Inventory.Contents.Add(SelectedItemID, SelectedAmount); if (TransferScreenOpen)
UpdateTransferScreen();
} }
public void RemoveItem() public void RemoveItem()
{ {
var currentlyOwnedCount = Inventory.Contents.ContainsKey(SelectedItemID) ? Inventory.Contents[SelectedItemID] : 0; Inventory.RemoveItem(SelectedItemID, SelectedAmount, this);
if (currentlyOwnedCount - SelectedAmount > 0) if (InventoryScreenOpen)
{ UpdateInventoryScreen();
Inventory.Contents[SelectedItemID] = currentlyOwnedCount - SelectedAmount; if (TransferScreenOpen)
} UpdateTransferScreen();
else
{
Inventory.Contents.Remove(SelectedItemID);
}
} }
public void ActivateItem() public void ActivateItem()

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

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

@ -24,9 +24,9 @@ namespace SiegeSong
public AudioClip[] UseSounds; public AudioClip[] UseSounds;
public string UseLeftAnimatorField = "UseLeftEquipment"; private string useLeftAnimatorField = "UseLeftEquipment";
public string UseAbilityAnimatorField = "UseAbilityEquipment"; private string useAbilityAnimatorField = "UseAbilityEquipment";
public string UseRightAnimatorField = "UseRightEquipment"; private string useRightAnimatorField = "UseRightEquipment";
bool delayTimerActive; bool delayTimerActive;
float useEffectDelayTimer; float useEffectDelayTimer;
@ -69,13 +69,13 @@ namespace SiegeSong
switch (EquipSlots) switch (EquipSlots)
{ {
case EquipableArea.Left: case EquipableArea.Left:
CharacterAnimator.SetTrigger(UseLeftAnimatorField); CharacterAnimator.SetTrigger(useLeftAnimatorField);
break; break;
case EquipableArea.Ability: case EquipableArea.Ability:
CharacterAnimator.SetTrigger(UseAbilityAnimatorField); CharacterAnimator.SetTrigger(useAbilityAnimatorField);
break; break;
case EquipableArea.Right: case EquipableArea.Right:
CharacterAnimator.SetTrigger(UseRightAnimatorField); CharacterAnimator.SetTrigger(useRightAnimatorField);
break; break;
} }
Weapon.Actor.ExpendStamina(StaminaCost, Increment); 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; RaycastHit hit;
if (Input.GetMouseButtonDown(0)) if (Input.GetMouseButtonDown(0))
if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit, 25) && hit.transform.gameObject.GetComponent<Statistics>() != null) 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)) if (Input.GetKeyDown(EnterKey))
SubmitCurrentInput(); SubmitCurrentInput();
@ -95,13 +95,13 @@ namespace SiegeSong
void SubmitCurrentInput() void SubmitCurrentInput()
{ {
var targetInstanceId = ""; var targetActorInstanceId = "";
var targeted = false; var targeted = false;
var validCommand = false; var validCommand = false;
if (ConsoleInput.IndexOf(subWordDelimiter) != -1 && (ConsoleInput.IndexOf(subWordDelimiter) < ConsoleInput.IndexOf(wordDelimiter) || ConsoleInput.IndexOf(wordDelimiter) == -1)) 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; targeted = true;
} }
var words = ConsoleInput.Split(wordDelimiter); var words = ConsoleInput.Split(wordDelimiter);
@ -111,7 +111,7 @@ namespace SiegeSong
{ {
if (!targeted) if (!targeted)
{ {
targetInstanceId = words[1].ToLower(); targetActorInstanceId = words[1].ToLower();
if (words.Length == 3 && int.TryParse(words[2], out instanceCount)) if (words.Length == 3 && int.TryParse(words[2], out instanceCount))
instanceCount = int.Parse(words[2]); instanceCount = int.Parse(words[2]);
} }
@ -134,28 +134,28 @@ namespace SiegeSong
switch (commandWord) switch (commandWord)
{ {
case "kill": case "kill":
KillActor(targetInstanceId); KillActor(targetActorInstanceId);
break; break;
case "resurrect": case "resurrect":
RessurrectActor(targetInstanceId); RessurrectActor(targetActorInstanceId);
break; break;
case "spawn": case "spawn":
SpawnActor(targetInstanceId, instanceCount); SpawnActor(targetActorInstanceId, instanceCount);
break; break;
case "despawn": case "despawn":
DespawnActor(targetInstanceId); DespawnActor(targetActorInstanceId);
break; break;
case "respawn": case "respawn":
RespawnActor(targetInstanceId); RespawnActor(targetActorInstanceId);
break; break;
case "setplayer": case "setplayer":
SetActorToPlayer(targetInstanceId); SetActorToPlayer(targetActorInstanceId);
break; break;
case "drive": case "drive":
DriveMotor(targetInstanceId, parameter); DriveMotor(targetActorInstanceId, parameter);
break; break;
case "tgm": case "tgm":
ToggleActorGodMode(targetInstanceId); ToggleActorGodMode(targetActorInstanceId);
break; break;
} }
validCommand = true; validCommand = true;
@ -175,61 +175,61 @@ namespace SiegeSong
void KillActor(string instaceID) void KillActor(string instaceID)
{ {
var actor = InstanceManager.GetInstanceByID(instaceID).GetComponent<StatisticsManager>(); var actor = InstanceManager.GetActorInstanceByID(instaceID).GetComponent<StatisticsManager>();
actor.Stats.Alive = false; actor.Stats.Alive = false;
actor.Stats.Health = 0; actor.Stats.Health = 0;
} }
void RessurrectActor(string instaceID) void RessurrectActor(string instaceID)
{ {
var actor = InstanceManager.GetInstanceByID(instaceID).GetComponent<StatisticsManager>(); var actor = InstanceManager.GetActorInstanceByID(instaceID).GetComponent<StatisticsManager>();
actor.Stats.Alive = true; actor.Stats.Alive = true;
actor.Stats.Health = 1; actor.Stats.Health = 1;
} }
void SpawnActor(string instaceID, int? instanceCount = 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++) //for(var i = 0; i < instanceCount; i++)
// actor.ActorLoader.LoadActor(); // actor.ActorLoader.LoadActor();
} }
void RespawnActor(string instaceID) void RespawnActor(string instaceID)
{ {
var actor = InstanceManager.GetInstanceByID(instaceID).GetComponent<StatisticsManager>(); var actor = InstanceManager.GetActorInstanceByID(instaceID).GetComponent<StatisticsManager>();
//actor.ActorLoader.LoadActor(true); //actor.ActorLoader.LoadActor(true);
} }
void DespawnActor(string instaceID) void DespawnActor(string instaceID)
{ {
var actor = InstanceManager.GetInstanceByID(instaceID).GetComponent<StatisticsManager>(); var actor = InstanceManager.GetActorInstanceByID(instaceID).GetComponent<StatisticsManager>();
GameObject.Destroy(actor.gameObject); GameObject.Destroy(actor.gameObject);
} }
void SetActorToPlayer(string instaceID) void SetActorToPlayer(string instaceID)
{ {
var currentPlayerActor = InstanceManager.GetInstanceByID(InstanceManager.CurrentPlayerInstanceID); var currentPlayerActor = InstanceManager.GetActorInstanceByID(InstanceManager.CurrentPlayerActorInstanceID);
foreach (Transform childtransform in currentPlayerActor.transform) foreach (Transform childtransform in currentPlayerActor.transform)
{ {
if (childtransform.gameObject.name == "PlayerAgent") if (childtransform.gameObject.name == "PlayerAgent")
childtransform.gameObject.active = false; childtransform.gameObject.active = false;
} }
var actor = InstanceManager.GetInstanceByID(instaceID); var actor = InstanceManager.GetActorInstanceByID(instaceID);
foreach (Transform childtransform in actor.transform) foreach (Transform childtransform in actor.transform)
if (childtransform.gameObject.name == "PlayerAgent") if (childtransform.gameObject.name == "PlayerAgent")
childtransform.gameObject.active = true; childtransform.gameObject.active = true;
RuntimeManager.PlayerInstance = actor; RuntimeManager.PlayerActorInstance = actor;
} }
void ToggleActorGodMode(string instaceID) void ToggleActorGodMode(string instaceID)
{ {
var actorStats = InstanceManager.GetInstanceByID(instaceID).GetComponent<Statistics>(); var actorStats = InstanceManager.GetActorInstanceByID(instaceID).GetComponent<Statistics>();
} }
void DriveMotor(string instaceID, string direction) void DriveMotor(string instaceID, string direction)
{ {
var actorMotor = InstanceManager.GetInstanceByID(instaceID).GetComponent<Motor>(); var actorMotor = InstanceManager.GetActorInstanceByID(instaceID).GetComponent<Motor>();
switch (direction) switch (direction)
{ {
case "forward": case "forward":

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

@ -5,20 +5,12 @@ using SiegeSong;
namespace 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] [System.Serializable]
public class SaveFile public class SaveFile
{ {
public List<Statistics> Actors; public List<Statistics> Actors;
//public Dictionary<InventoryItem, Vector3> WorldObjectLocations; // To Do - convert to flat sub-object public List<WorldObject> WorldObjects;
//public TerrainDeformationList WorldObjectLocationList;
//public TerrainDeformationList TerrainDeformationList; //public TerrainDeformationList TerrainDeformationList;

@ -34,6 +34,8 @@ namespace SiegeSong
private int StartingYear = 1136; private int StartingYear = 1136;
private WaitForEndOfFrame waitForEndOfFrame = new WaitForEndOfFrame(); private WaitForEndOfFrame waitForEndOfFrame = new WaitForEndOfFrame();
private string defaultPlayerSpeciesKey = "_Human";
public string DirectoryName = "SaveGameData"; public string DirectoryName = "SaveGameData";
public MetaData[] GetSaveFilesMetaData() public MetaData[] GetSaveFilesMetaData()
@ -67,11 +69,11 @@ namespace SiegeSong
var playerFriendlyFullName = ""; var playerFriendlyFullName = "";
var actorList = new List<Statistics>(); 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 instance = InstanceManager.ActorInstances[i];
var instanceID = InstanceManager.InstanceIDs[i]; var instanceID = InstanceManager.ActorInstanceIDs[i];
if (instanceID == InstanceManager.CurrentPlayerInstanceID) if (instanceID == InstanceManager.CurrentPlayerActorInstanceID)
{ {
var actor = instance.GetComponent<StatisticsManager>(); var actor = instance.GetComponent<StatisticsManager>();
actorList.Add(actor.Stats); actorList.Add(actor.Stats);
@ -79,13 +81,31 @@ namespace SiegeSong
ActiveSaveFileMeta.PlayerFullName = playerFriendlyFullName; ActiveSaveFileMeta.PlayerFullName = playerFriendlyFullName;
ActiveSaveFileMeta.PlayerLevel = actor.Stats.Level; ActiveSaveFileMeta.PlayerLevel = actor.Stats.Level;
ActiveSaveFileMeta.PlayerActiveQuestFriendlyName = "None"; ActiveSaveFileMeta.PlayerActiveQuestFriendlyName = "None";
ActiveSaveFileMeta.ScreenWidth = Screen.width;
ActiveSaveFileMeta.ScreenHeight = Screen.height;
} }
} }
ActiveSaveFile.Actors = actorList; 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; 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}"; 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,74 +145,22 @@ namespace SiegeSong
{ {
RuntimeManager.DePopulateReferences(); RuntimeManager.DePopulateReferences();
InstanceManager.ClearAndUnload(); InstanceManager.ClearAndUnload();
//RuntimeManager.ClearAndUnload();
ActiveSaveFile = JsonUtility.FromJson<SaveFile>(System.IO.File.ReadAllText($"{ActiveSaveFileLocation.Replace("/", "\\")}.ssng")); ActiveSaveFile = JsonUtility.FromJson<SaveFile>(System.IO.File.ReadAllText($"{ActiveSaveFileLocation.Replace("/", "\\")}.ssng"));
GameObject instance = new GameObject();
foreach (var stats in ActiveSaveFile.Actors) foreach (var stats in ActiveSaveFile.Actors)
{ {
for(var i = 0; i < InstanceManager.SpeciesDefinitionsContainer.transform.childCount; i++) var instance = InstanceManager.InstantiateActor(stats);
{
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;
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;
}
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) if (stats.IsPlayer)
{ {
InstanceManager.CurrentPlayerInstanceID = actor.Stats.InstanceID; PlayerTracker.transform.parent = instance.Value.transform;
RuntimeManager.PlayerInstance = instance; RuntimeManager.PlayerActorInstance = instance.Value;
InstanceManager.CurrentPlayerActorInstanceID = instance.Key;
} }
} }
foreach (var worldObject in ActiveSaveFile.WorldObjects)
{
InstanceManager.InstantiateWorldObject(worldObject);
}
RuntimeManager.Calendar.SetDateTime(ActiveSaveFile.Minute, ActiveSaveFile.Hour, ActiveSaveFile.Day, ActiveSaveFile.Year); RuntimeManager.Calendar.SetDateTime(ActiveSaveFile.Minute, ActiveSaveFile.Hour, ActiveSaveFile.Day, ActiveSaveFile.Year);
RuntimeManager.PopulateReferences(); RuntimeManager.PopulateReferences();
@ -202,27 +170,27 @@ namespace SiegeSong
{ {
ActiveSaveFile = new SaveFile(); ActiveSaveFile = new SaveFile();
var playerInstance = new GameObject(); GameObject playerActorInstance = null;
for (var i = 0; i < InstanceManager.SpeciesDefinitionsContainer.transform.childCount; i++) for (var i = 0; i < InstanceManager.SpeciesDefinitionsContainer.transform.childCount; i++)
{ {
var species = InstanceManager.SpeciesDefinitionsContainer.transform.GetChild(i); var species = InstanceManager.SpeciesDefinitionsContainer.transform.GetChild(i);
if (species.gameObject.name == InstanceManager.HumanSpeciesKey) if (species.gameObject.name == defaultPlayerSpeciesKey)
playerInstance = GameObject.Instantiate(species).gameObject; playerActorInstance = GameObject.Instantiate(species).gameObject;
} }
var actor = playerInstance.GetComponent<StatisticsManager>(); var actor = playerActorInstance.GetComponent<StatisticsManager>();
actor.Stats = new Statistics(); 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") if (child.gameObject.name == "PlayerAgent")
{ {
child.gameObject.active = true; child.gameObject.active = true;
PlayerTracker.transform.parent = playerInstance.transform; PlayerTracker.transform.parent = playerActorInstance.transform;
//playerInstance.transform.eulerAngles = new Vector3(StartingRotationX, StartingRotationY, StartingRotationZ); //playerActorInstance.transform.eulerAngles = new Vector3(StartingRotationX, StartingRotationY, StartingRotationZ);
playerInstance.transform.position = new Vector3(StartingPositionX, StartingPositionY, StartingPositionZ); playerActorInstance.transform.position = new Vector3(StartingPositionX, StartingPositionY, StartingPositionZ);
} }
} }
@ -245,12 +213,14 @@ namespace SiegeSong
actor.Inventory.ApparrelManager.CurrentlyActiveIDs = StartingPlayerActiveInventoryItemIDs; actor.Inventory.ApparrelManager.CurrentlyActiveIDs = StartingPlayerActiveInventoryItemIDs;
actor.Inventory.ApparrelManager.UpdateApparrel(); actor.Inventory.ApparrelManager.UpdateApparrel();
actor.Stats.InstanceID = InstanceManager.GenerateInstanceID(); actor.Stats.ActorInstanceID = InstanceManager.GenerateActorInstanceID();
playerInstance.gameObject.name = $"{actor.Stats.FirstName} {actor.Stats.LastName}"; playerActorInstance.gameObject.name = $"{actor.Stats.FirstName} {actor.Stats.LastName}";
InstanceManager.AddInstance(actor.Stats.InstanceID, playerInstance); InstanceManager.ActorInstances.Add(playerActorInstance);
InstanceManager.CurrentPlayerInstanceID = actor.Stats.InstanceID; InstanceManager.ActorInstanceIDs.Add(actor.Stats.ActorInstanceID);
RuntimeManager.PlayerInstance = playerInstance; InstanceManager.CurrentPlayerActorInstanceID = actor.Stats.ActorInstanceID;
playerInstance.gameObject.active = true; RuntimeManager.PlayerActorInstance = playerActorInstance;
playerActorInstance.transform.parent = InstanceManager.ActorInstanceContainer.transform;
playerActorInstance.gameObject.active = true;
RuntimeManager.PopulateReferences(); RuntimeManager.PopulateReferences();
RuntimeManager.Calendar.SetDateTime(StartingMinute, StartingHour, StartingDay, StartingYear); RuntimeManager.Calendar.SetDateTime(StartingMinute, StartingHour, StartingDay, StartingYear);
//ActorEditor.ChangeAppearance(actor); //ActorEditor.ChangeAppearance(actor);
@ -270,11 +240,11 @@ namespace SiegeSong
public IEnumerator TakeTemporaryScreenCapture() 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 screenTexture = new RenderTexture(Screen.width, Screen.height, 16);
var oldTargetTexture = camera.targetTexture; var oldTargetTexture = camera.targetTexture;
RuntimeManager.PlayerInstance.GetComponentInChildren<HUDManager>().UIWrapper.active = false; RuntimeManager.PlayerActorInstance.GetComponentInChildren<HUDManager>().UIWrapper.active = false;
camera.targetTexture = screenTexture; camera.targetTexture = screenTexture;
camera.Render(); camera.Render();
@ -285,7 +255,7 @@ namespace SiegeSong
var byteArray = renderedTexture.EncodeToPNG(); 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); System.IO.File.WriteAllBytes($"{Application.persistentDataPath.Replace("/", "\\")}\\{DirectoryName}\\_Temp.png", byteArray);

@ -3,59 +3,176 @@ using System.Collections.Generic;
using UnityEngine; using UnityEngine;
using SiegeSong; using SiegeSong;
namespace SiegeSong namespace SiegeSong
{ {
public class InstanceManager : MonoBehaviour public class InstanceManager : MonoBehaviour
{ {
public GameObject SpeciesDefinitionsContainer; public GameObject SpeciesDefinitionsContainer;
public GameObject ActorInstanceContainer; public GameObject ActorInstanceContainer;
public string CurrentPlayerInstanceID; public string CurrentPlayerActorInstanceID;
public GameObject[] Instances; public List<GameObject> ActorInstances;
public string[] InstanceIDs; public List<string> ActorInstanceIDs;
public int[] ActorIDs;
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);
} }
void Update() 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;
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() public void ClearAndUnload()
{ {
for (var i = 0; i < Instances.Length; i++) for (var i = 0; i < ActorInstances.Count; i++)
{
ActorInstances[i].active = false;
GameObject.Destroy(ActorInstances[i]);
}
for (var i = 0; i < WorldObjectInstances.Count; i++)
{ {
Instances[i].active = false; WorldObjectInstances[i].active = false;
GameObject.Destroy(Instances[i]); GameObject.Destroy(ActorInstances[i]);
} }
LastGeneratedInstanceIndex = 0; LastGeneratedActorInstanceIndex = 0;
CurrentPlayerInstanceID = ""; CurrentPlayerActorInstanceID = "";
Instances = new GameObject[0]; ActorInstances = new List<GameObject>();
InstanceIDs = new string[0]; ActorInstanceIDs = new List<string>();
ActorIDs = new int[0];
} }
public string GenerateInstanceID() public string GenerateWorldObjectInstanceID()
{ {
LastGeneratedInstanceIndex++; LastGeneratedWorldObjectInstanceIndex++;
var instanceIndex = LastGeneratedInstanceIndex.ToString(); var instanceIndex = LastGeneratedWorldObjectInstanceIndex.ToString();
var newInstanceID = ""; var newInstanceID = "";
for (var i = 0; i < MaxInstanceIDLength; i++) for (var i = 0; i < MaxWorldObjectInstanceIDLength; i++)
{ {
if (i >= instanceIndex.Length) if (i >= instanceIndex.Length)
{ {
newInstanceID += "A"; newInstanceID += "A";
} }
else else
{ {
newInstanceID += "BCDEFGHIJK"[int.Parse(instanceIndex[i].ToString())]; newInstanceID += "BCDEFGHIJK"[int.Parse(instanceIndex[i].ToString())];
@ -64,56 +181,47 @@ namespace SiegeSong
return newInstanceID; 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(); return newInstanceID;
} }
public void AddInstance(string instanceID, GameObject newInstance) public GameObject GetWorldObjectInstanceByID(string instanceID)
{ {
var newInstanceArray = new GameObject[Instances.Length + 1]; for (var i = 0; i < WorldObjectInstances.Count; i++)
var newInstanceIDArray = new string[InstanceIDs.Length + 1]; {
Instances.CopyTo(newInstanceArray, 0); if (WorldObjectInstanceIDs[i].ToLower() == instanceID.ToLower())
InstanceIDs.CopyTo(newInstanceIDArray, 0); {
newInstanceArray[newInstanceArray.Length - 1] = newInstance; return WorldObjectInstances[i];
newInstanceIDArray[newInstanceIDArray.Length - 1] = instanceID; }
Instances = newInstanceArray; }
InstanceIDs = newInstanceIDArray; return null;
newInstance.transform.parent = ActorInstanceContainer.transform;
} }
public void RemoveInstance(string instanceID) public GameObject GetActorInstanceByID(string instanceID)
{ {
var newInstanceArray = new GameObject[Instances.Length - 1]; for (var i = 0; i < ActorInstances.Count; i++)
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)
{ {
iterator++; if (ActorInstanceIDs[i].ToLower() == instanceID.ToLower())
if (InstanceIDs[iterator].ToLower() == instanceID.ToLower())
{
var instanceObject = Instances[iterator];
GameObject.Destroy(instanceObject);
}
else
{ {
index++; return ActorInstances[i];
newInstanceArray[index] = instance;
newInstanceIDArray[index] = InstanceIDs[iterator];
} }
} }
Instances = newInstanceArray; return null;
InstanceIDs = newInstanceIDArray;
} }
} }
} }

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