public void SelectItem(InvItem item, SelectItemMode _mode) { if (selectedItem == item) { selectedItem = null; KickStarter.playerCursor.ResetSelectedCursor(); } else { SetSelectItemMode(_mode); selectedItem = item; } PlayerMenus.ResetInventoryBoxes(); }
/** * <summary>Deletes a set number of inventory item instances</summary> * <param name="itemID">The ID of the inventory item to delete</param> * <param name="amount">The amount to delete</param> */ public void Delete(int itemID, int amount) { if (KickStarter.inventoryManager == null) { return; } InvItem itemToRemove = KickStarter.inventoryManager.GetItem(itemID); if (itemToRemove == null) { return; } for (int i = 0; i < invInstances.Count; i++) { if (InvInstance.IsValid(invInstances[i]) && invInstances[i].ItemID == itemID) { // Count check if (itemToRemove.canCarryMultiple) { int diff = invInstances[i].Count - amount; if (diff >= 0) { invInstances[i].Clear(amount); amount = 0; } else { amount -= invInstances[i].Count; invInstances[i].Clear(); } } if (!itemToRemove.canCarryMultiple || invInstances[i].Count <= 0) { invInstances[i].Clear(); } if (!itemToRemove.canCarryMultiple || amount <= 0) { break; } } } Clean(); PlayerMenus.ResetInventoryBoxes(); }
override public float Run() { if (container == null) { return(0f); } if (!setAmount) { amount = 1; } if (containerAction == ContainerAction.Add) { container.Add(invID, amount); } else if (containerAction == ContainerAction.Remove) { if (transferToPlayer) { KickStarter.runtimeInventory.Add(invID, amount, false, -1); } container.Remove(invID, amount); } else if (containerAction == ContainerAction.RemoveAll) { if (transferToPlayer) { foreach (ContainerItem item in container.items) { KickStarter.runtimeInventory.Add(item.linkedID, item.count, false, -1); } } container.items.Clear(); } PlayerMenus.ResetInventoryBoxes(); return(0f); }
/** * <summary>Removes an inventory item from the Container's contents.</summary> * <param name = "_id">The ID number of the InvItem to remove</param> * <param name = "amount">How many instances of the inventory item to remove</param> */ public void Remove(int _id, int amount) { // Reduce "count" by 1 for appropriate ID foreach (ContainerItem item in items) { if (item.linkedID == _id) { if (item.count > 0) { item.count -= amount; } if (item.count < 1) { items.Remove(item); } PlayerMenus.ResetInventoryBoxes(); return; } } }
/** * <summary>Adds an inventory item to the Container's contents.</summary> * <param name = "_id">The ID number of the InvItem to add</param> * <param name = "amount">How many instances of the inventory item to add</param> * <returns>True if the addition was succesful</returns> */ public bool Add(int _id, int amount) { // Raise "count" by amount for appropriate ID foreach (ContainerItem containerItem in items) { if (containerItem.linkedID == _id) { InvItem linkedItem = KickStarter.inventoryManager.GetItem(_id); if (linkedItem != null && linkedItem.canCarryMultiple && !linkedItem.useSeparateSlots) { containerItem.count += amount; } PlayerMenus.ResetInventoryBoxes(); return(false); } } // Not already carrying the item InvItem itemToAdd = KickStarter.inventoryManager.GetItem(_id); if (itemToAdd != null) { if (limitToCategory && !categoryIDs.Contains(itemToAdd.binID)) { return(false); } if (!itemToAdd.canCarryMultiple) { amount = 1; } items.Add(new ContainerItem(_id, amount, GetIDArray())); PlayerMenus.ResetInventoryBoxes(); return(true); } PlayerMenus.ResetInventoryBoxes(); return(true); }
public void SelectItemByID(int _id, SelectItemMode _mode) { if (_id == -1) { SetNull(); return; } foreach (InvItem item in localItems) { if (item != null && item.id == _id) { SetSelectItemMode(_mode); selectedItem = item; PlayerMenus.ResetInventoryBoxes(); return; } } SetNull(); Debug.LogWarning("Want to select inventory item " + KickStarter.inventoryManager.GetLabel(_id) + " but player is not carrying it."); }
/** * <summary>Adds an inventory item to the Container's contents, at a particular index.</summary> * <param name = "_item">The InvItem to place within the Container</param> * <param name = "_index">The index number within the Container's current contents to insert the new item</param> * <param name = "count">If >0, the quantity of the item to be added. Otherwise, the same quantity as _item will be added</param> * <returns>The ContainerItem instance of the added item</returns> */ public ContainerItem InsertAt(InvItem _item, int _index, int count = 0) { if (limitToCategory && !categoryIDs.Contains(_item.binID)) { return(null); } ContainerItem newContainerItem = new ContainerItem(_item.id, GetIDArray()); if (count > 0) { newContainerItem.count = count; } else { newContainerItem.count = _item.count; } if (_index < items.Count) { if (items[_index] != null && items[_index].linkedID == _item.id) { // Same item in the slot, so just add instead newContainerItem.count += items[_index].count; items[_index] = newContainerItem; } else { items.Insert(_index, newContainerItem); } } else { items.Add(newContainerItem); } PlayerMenus.ResetInventoryBoxes(); return(newContainerItem); }
/** * <summary>Adds an inventory item to the Container's contents, at a particular index.</summary> * <param name = "_item">The InvItem to place within the Container</param> * <param name = "_index">The index number within the Container's current contents to insert the new item</param> * <returns>The ContainerItem instance of the added item</returns> */ public ContainerItem InsertAt(InvItem _item, int _index) { if (limitToCategory && !categoryIDs.Contains(_item.binID)) { return(null); } ContainerItem newContainerItem = new ContainerItem(_item.id, GetIDArray()); newContainerItem.count = _item.count; if (items.Count <= _index) { items.Add(newContainerItem); } else { items.Insert(_index, newContainerItem); } PlayerMenus.ResetInventoryBoxes(); return(newContainerItem); }
override public float Run() { if (KickStarter.runtimeInventory) { if (!setAmount) { amount = 1; } if (KickStarter.settingsManager.playerSwitching == PlayerSwitching.Allow && !KickStarter.settingsManager.shareInventory && setPlayer) { if (invAction == InvAction.Add) { KickStarter.runtimeInventory.Add(invID, amount, false, playerID); } else { KickStarter.runtimeInventory.Remove(invID, amount, setAmount, playerID); } } else { if (invAction == InvAction.Add) { KickStarter.runtimeInventory.Add(invID, amount, false, -1); } else { KickStarter.runtimeInventory.Remove(invID, amount, setAmount, -1); } } PlayerMenus.ResetInventoryBoxes(); } return(0f); }
/** * <summary>Removes all inventory items from the Container's contents.</summary> */ public void RemoveAll() { items.Clear(); PlayerMenus.ResetInventoryBoxes(); }
override public float Run() { if (KickStarter.settingsManager.playerSwitching == PlayerSwitching.Allow) { if (KickStarter.sceneChanger.GetSubScenes().Length > 0) { // ACDebug.LogWarning ("Cannot switch players while multiple scenes are open!"); // return 0f; } if (KickStarter.settingsManager.players.Count > 0 && KickStarter.settingsManager.players.Count > playerNumber && playerNumber > -1) { if (KickStarter.player != null && KickStarter.player.ID == playerID) { ACDebug.Log("Cannot switch player - already controlling the desired prefab."); return(0f); } if (KickStarter.settingsManager.players[playerNumber].playerOb != null) { KickStarter.saveSystem.SaveCurrentPlayerData(); Vector3 oldPlayerPosition = Vector3.zero; Quaternion oldPlayerRotation = new Quaternion(); Vector3 oldPlayerScale = Vector3.one; if (KickStarter.player != null) { oldPlayerPosition = KickStarter.player.transform.position; oldPlayerRotation = KickStarter.player.TransformRotation; oldPlayerScale = KickStarter.player.transform.localScale; } if (newPlayerPosition != NewPlayerPosition.ReplaceCurrentPlayer) { if (oldPlayer == OldPlayer.ReplaceWithAssociatedNPC && (oldPlayerNPC == null || !oldPlayerNPC.gameObject.activeInHierarchy) && KickStarter.player.associatedNPCPrefab != null) { GameObject newObject = (GameObject)Instantiate(KickStarter.player.associatedNPCPrefab.gameObject); newObject.name = KickStarter.player.associatedNPCPrefab.gameObject.name; oldPlayerNPC = newObject.GetComponent <NPC>(); } if ((oldPlayer == OldPlayer.ReplaceWithNPC || oldPlayer == OldPlayer.ReplaceWithAssociatedNPC) && oldPlayerNPC != null && oldPlayerNPC.gameObject.activeInHierarchy) { oldPlayerNPC.transform.position = oldPlayerPosition; oldPlayerNPC.TransformRotation = oldPlayerRotation; oldPlayerNPC.transform.localScale = oldPlayerScale; // Force the rotation / sprite child to update oldPlayerNPC._Update(); } } if (newPlayerNPC == null || newPlayerPosition == NewPlayerPosition.ReplaceAssociatedNPC) { // Try to find from associated NPC prefab if (KickStarter.settingsManager.players[playerNumber].playerOb.associatedNPCPrefab != null) { ConstantID prefabID = KickStarter.settingsManager.players[playerNumber].playerOb.associatedNPCPrefab.GetComponent <ConstantID>(); if (prefabID != null && prefabID.constantID != 0) { newPlayerNPC_ID = prefabID.constantID; newPlayerNPC = AssignFile <NPC> (prefabID.constantID, null); } } } Quaternion newRotation = Quaternion.identity; if (newPlayerPosition == NewPlayerPosition.ReplaceCurrentPlayer) { newRotation = oldPlayerRotation; } else if (newPlayerPosition == NewPlayerPosition.ReplaceNPC && newPlayerNPC) { newRotation = newPlayerNPC.TransformRotation; } else if (newPlayerPosition == NewPlayerPosition.AppearAtMarker && newPlayerMarker) { newRotation = newPlayerMarker.transform.rotation; } bool replacesOldPlayer = newPlayerPosition == NewPlayerPosition.ReplaceCurrentPlayer && (!restorePreviousData || !KickStarter.saveSystem.DoesPlayerDataExist(playerID, true)); KickStarter.ResetPlayer(KickStarter.settingsManager.players[playerNumber].playerOb, playerID, true, newRotation, keepInventory, false, replacesOldPlayer); Player newPlayer = KickStarter.player; PlayerMenus.ResetInventoryBoxes(); if (restorePreviousData && KickStarter.saveSystem.DoesPlayerDataExist(playerID, true)) { if (newPlayerNPC) { newPlayerNPC.transform.position += new Vector3(100f, -100f, 100f); } int sceneToLoad = KickStarter.saveSystem.GetPlayerScene(playerID); if (sceneToLoad >= 0 && sceneToLoad != UnityVersionHandler.GetCurrentSceneNumber()) { KickStarter.saveSystem.loadingGame = LoadingGame.JustSwitchingPlayer; KickStarter.sceneChanger.ChangeScene(new SceneInfo("", sceneToLoad), true, false, newPlayerNPC_ID); } else { string sceneToLoadName = KickStarter.saveSystem.GetPlayerSceneName(playerID); if (sceneToLoadName != "" && sceneToLoadName != UnityVersionHandler.GetCurrentSceneName()) { KickStarter.saveSystem.loadingGame = LoadingGame.JustSwitchingPlayer; KickStarter.sceneChanger.ChangeScene(new SceneInfo(sceneToLoadName, -1), true, false, newPlayerNPC_ID); } } } else { // No data to restore if (newPlayerPosition == NewPlayerPosition.ReplaceCurrentPlayer) { newPlayer.Teleport(oldPlayerPosition); newPlayer.SetRotation(oldPlayerRotation); newPlayer.transform.localScale = oldPlayerScale; } else if (newPlayerPosition == NewPlayerPosition.ReplaceNPC || newPlayerPosition == NewPlayerPosition.ReplaceAssociatedNPC) { if (newPlayerNPC) { newPlayer.Teleport(newPlayerNPC.transform.position); newPlayer.SetRotation(newPlayerNPC.TransformRotation); newPlayer.transform.localScale = newPlayerNPC.transform.localScale; newPlayerNPC.transform.position += new Vector3(100f, -100f, 100f); } } else if (newPlayerPosition == NewPlayerPosition.AppearAtMarker) { if (newPlayerMarker) { newPlayer.Teleport(newPlayerMarker.transform.position); newPlayer.SetRotation(newPlayerMarker.transform.rotation); newPlayer.transform.localScale = newPlayerMarker.transform.localScale; } } else if (newPlayerPosition == NewPlayerPosition.AppearInOtherScene) { if (chooseNewSceneBy == ChooseSceneBy.Name && newPlayerSceneName == UnityVersionHandler.GetCurrentSceneName() || (chooseNewSceneBy == ChooseSceneBy.Number && newPlayerScene == UnityVersionHandler.GetCurrentSceneNumber())) { // Already in correct scene if (newPlayerNPC && newPlayerNPC.gameObject.activeInHierarchy) { newPlayer.Teleport(newPlayerNPC.transform.position); newPlayer.SetRotation(newPlayerNPC.TransformRotation); newPlayer.transform.localScale = newPlayerNPC.transform.localScale; newPlayerNPC.transform.position += new Vector3(100f, -100f, 100f); } } else { if (newPlayerNPC && newPlayerNPC.gameObject.activeInHierarchy) { newPlayerNPC.transform.position += new Vector3(100f, -100f, 100f); } //KickStarter.saveSystem.loadingGame = LoadingGame.JustSwitchingPlayer; KickStarter.sceneChanger.ChangeScene(new SceneInfo(chooseNewSceneBy, newPlayerSceneName, newPlayerScene), true, false, newPlayerNPC_ID, true); } } } if (KickStarter.mainCamera.attachedCamera) { KickStarter.mainCamera.attachedCamera.MoveCameraInstant(); } AssetLoader.UnloadAssets(); } else { ACDebug.LogWarning("Cannot switch player - no player prefabs is defined."); } } } return(0f); }
/** * <summary>Removes all Documents from the Player's own collection</summary> */ public void ClearCollection() { collectedDocuments.Clear(); PlayerMenus.ResetInventoryBoxes(); }
/** * <summary>Inserts an inventory item instance into a specific index in the collection. If the item exists in another collection, it will be removed from there automatically.</summary> * <param name="addInstance">The inventory item instance to add</param> * <param name="index">The index to insert the item at</param> * <param name="occupiedSlotBehaviour">How to react if the intended index is already occupied by another item instance.</param> * <returns>The new instance of the added item</returns> */ public InvInstance Insert(InvInstance addInstance, int index, OccupiedSlotBehaviour occupiedSlotBehaviour = OccupiedSlotBehaviour.ShiftItems) { // Adds to a specific index, or the end/first empty slot if -1 if (!CanAccept(addInstance, index, occupiedSlotBehaviour)) { if (InvInstance.IsValid(addInstance)) { if (KickStarter.eventManager) { KickStarter.eventManager.Call_OnUseContainerFail(addInstance.GetSourceContainer(), addInstance); } } return(null); } InvInstance addedInstance = null; if (Contains(addInstance)) { if (!CanReorder()) { return(addInstance); } if (MaxSlots > 0 && index >= MaxSlots) { return(addInstance); } occupiedSlotBehaviour = OccupiedSlotBehaviour.SwapItems; } int numAdded = -1; InvCollection fromCollection = (Contains(addInstance)) ? this : addInstance.GetSource(); if (index >= 0 && index < invInstances.Count) { // Inside InvInstance existingInstance = invInstances[index]; if (!InvInstance.IsValid(existingInstance)) { // Empty slot addedInstance = addInstance.CreateTransferInstance(); if (InvInstance.IsValid(addedInstance)) { numAdded = addedInstance.Count; invInstances[index] = addedInstance; } } else { if (existingInstance == addInstance) { // Same return(existingInstance); } else if (existingInstance.InvItem == addInstance.InvItem && addInstance.InvItem.canCarryMultiple && existingInstance.Capacity > 0) { // Merge if (addInstance.TransferCount > existingInstance.Capacity) { addInstance.TransferCount = existingInstance.Capacity; } numAdded = Mathf.Min(addInstance.CreateTransferInstance().Count, existingInstance.Capacity); existingInstance.Count += numAdded; addedInstance = existingInstance; } else { switch (occupiedSlotBehaviour) { case OccupiedSlotBehaviour.ShiftItems: invInstances.Insert(index, addInstance.CreateTransferInstance()); addedInstance = invInstances[index]; break; case OccupiedSlotBehaviour.FailTransfer: if (InvInstance.IsValid(addInstance)) { if (KickStarter.eventManager) { KickStarter.eventManager.Call_OnUseContainerFail(addInstance.GetSourceContainer(), addInstance); } return(null); } break; case OccupiedSlotBehaviour.SwapItems: if (fromCollection != null) { if (addInstance.IsPartialTransform()) { if (KickStarter.eventManager) { KickStarter.eventManager.Call_OnUseContainerFail(addInstance.GetSourceContainer(), addInstance); } return(null); } fromCollection.invInstances[fromCollection.IndexOf(addInstance)] = existingInstance; invInstances[index] = addInstance; addedInstance = invInstances[index]; if (KickStarter.runtimeInventory.SelectedInstance == addInstance) { KickStarter.runtimeInventory.SelectItem(existingInstance); } } break; case OccupiedSlotBehaviour.Overwrite: if (KickStarter.eventManager) { KickStarter.eventManager.Call_OnChangeInventory(this, existingInstance, InventoryEventType.Remove); } invInstances[index] = addInstance.CreateTransferInstance(); addedInstance = invInstances[index]; break; default: break; } } } } else { // Add to first empty slot, or end bool addedInside = false; if (index < 0) { // Find first empty slot for (int i = 0; i < invInstances.Count; i++) { if (!InvInstance.IsValid(invInstances[i])) { invInstances[i] = addInstance.CreateTransferInstance(); addedInstance = invInstances[i]; index = i; addedInside = true; break; } else if (invInstances[i] == addInstance) { return(addInstance); } } } if (!addedInside) { if (maxSlots > 0 && invInstances.Count >= maxSlots) { return(null); } if (index > 0 && CanReorder()) { while (invInstances.Count < index) { invInstances.Add(null); } } invInstances.Add(addInstance.CreateTransferInstance()); addedInstance = invInstances[invInstances.Count - 1]; } } if (fromCollection != null && fromCollection != this) { fromCollection.Clean(); } Clean(); PlayerMenus.ResetInventoryBoxes(); if (KickStarter.eventManager) { if (numAdded >= 0) { KickStarter.eventManager.Call_OnChangeInventory(this, addedInstance, InventoryEventType.Add, numAdded); } else { KickStarter.eventManager.Call_OnChangeInventory(this, addedInstance, InventoryEventType.Add); } } return(addedInstance); }
public void SetNull() { selectedItem = null; highlightItem = null; PlayerMenus.ResetInventoryBoxes(); }
/** Deletes all item instances in the collection */ public void DeleteAll() { invInstances.Clear(); Clean(); PlayerMenus.ResetInventoryBoxes(); }
override public float Run() { if (KickStarter.settingsManager.playerSwitching == PlayerSwitching.Allow) { if (KickStarter.sceneChanger.GetSubScenes().Length > 0) { // ACDebug.LogWarning ("Cannot switch players while multiple scenes are open!"); // return 0f; } if (KickStarter.settingsManager.players.Count > 0 && KickStarter.settingsManager.players.Count > playerNumber && playerNumber > -1) { if (KickStarter.player != null && KickStarter.player.ID == playerID) { ACDebug.Log("Cannot switch player - already controlling the desired prefab."); return(0f); } if (KickStarter.settingsManager.players[playerNumber].playerOb != null) { KickStarter.saveSystem.SaveCurrentPlayerData(); Vector3 oldPlayerPosition = Vector3.zero; Quaternion oldPlayerRotation = new Quaternion(); Vector3 oldPlayerScale = Vector3.one; if (KickStarter.player != null) { oldPlayerPosition = KickStarter.player.transform.position; oldPlayerRotation = KickStarter.player.transform.rotation; oldPlayerScale = KickStarter.player.transform.localScale; } if (oldPlayer == OldPlayer.ReplaceWithNPC && oldPlayerNPC != null && (newPlayerPosition == NewPlayerPosition.ReplaceNPC || newPlayerPosition == NewPlayerPosition.AppearAtMarker)) { oldPlayerNPC.transform.position = oldPlayerPosition; oldPlayerNPC.transform.rotation = oldPlayerRotation; oldPlayerNPC.transform.localScale = oldPlayerScale; } Quaternion newRotation = Quaternion.identity; if (newPlayerPosition == NewPlayerPosition.ReplaceCurrentPlayer) { newRotation = oldPlayerRotation; } else if (newPlayerPosition == NewPlayerPosition.ReplaceNPC && newPlayerNPC) { newRotation = newPlayerNPC.transform.rotation; } else if (newPlayerPosition == NewPlayerPosition.AppearAtMarker && newPlayerMarker) { newRotation = newPlayerMarker.transform.rotation; } KickStarter.ResetPlayer(KickStarter.settingsManager.players[playerNumber].playerOb, playerID, true, newRotation, keepInventory); Player newPlayer = KickStarter.player; PlayerMenus.ResetInventoryBoxes(); int sceneToLoad = UnityVersionHandler.GetCurrentSceneNumber(); if (restorePreviousData && KickStarter.saveSystem.DoesPlayerDataExist(playerID, true)) { sceneToLoad = KickStarter.saveSystem.GetPlayerScene(playerID); if (sceneToLoad != UnityVersionHandler.GetCurrentSceneNumber()) { KickStarter.saveSystem.loadingGame = LoadingGame.JustSwitchingPlayer; KickStarter.sceneChanger.ChangeScene(new SceneInfo("", sceneToLoad), true); } } else { if (newPlayerPosition == NewPlayerPosition.ReplaceCurrentPlayer) { newPlayer.Teleport(oldPlayerPosition); newPlayer.SetRotation(oldPlayerRotation); newPlayer.transform.localScale = oldPlayerScale; } else if (newPlayerPosition == NewPlayerPosition.ReplaceNPC) { if (newPlayerNPC) { newPlayer.Teleport(newPlayerNPC.transform.position); newPlayer.SetRotation(newPlayerNPC.transform.rotation); newPlayer.transform.localScale = newPlayerNPC.transform.localScale; newPlayerNPC.transform.position += new Vector3(100f, -100f, 100f); } } else if (newPlayerPosition == NewPlayerPosition.AppearAtMarker) { if (newPlayerMarker) { newPlayer.Teleport(newPlayerMarker.transform.position); newPlayer.SetRotation(newPlayerMarker.transform.rotation); newPlayer.transform.localScale = newPlayerMarker.transform.localScale; } } else if (newPlayerPosition == NewPlayerPosition.AppearInOtherScene) { if (chooseNewSceneBy == ChooseSceneBy.Name && newPlayerSceneName == UnityVersionHandler.GetCurrentSceneName()) { } else if (chooseNewSceneBy == ChooseSceneBy.Number && newPlayerScene == UnityVersionHandler.GetCurrentSceneNumber()) { } else { KickStarter.sceneChanger.ChangeScene(new SceneInfo(chooseNewSceneBy, newPlayerSceneName, newPlayerScene), true); } } } if (KickStarter.mainCamera.attachedCamera) { KickStarter.mainCamera.attachedCamera.MoveCameraInstant(); } AssetLoader.UnloadAssets(); } else { ACDebug.LogWarning("Cannot switch player - no player prefabs is defined."); } } } return(0f); }
override public float Run() { if (KickStarter.settingsManager.playerSwitching == PlayerSwitching.Allow) { PlayerPrefab newPlayerPrefab = KickStarter.settingsManager.GetPlayerPrefab(playerID); if (newPlayerPrefab != null) { if (KickStarter.player != null && KickStarter.player.ID == playerID) { Log("Cannot switch player - already controlling the desired prefab."); return(0f); } if (newPlayerPrefab.playerOb != null) { KickStarter.saveSystem.SaveCurrentPlayerData(); Vector3 oldPlayerPosition = Vector3.zero; Quaternion oldPlayerRotation = new Quaternion(); Vector3 oldPlayerScale = Vector3.one; PlayerData oldPlayerData = new PlayerData(); NPCData oldNPCData = new NPCData(); bool recordedOldPlayerData = false; bool recordedOldNPCData = false; if (KickStarter.player != null) { oldPlayerPosition = KickStarter.player.transform.position; oldPlayerRotation = KickStarter.player.TransformRotation; oldPlayerScale = KickStarter.player.transform.localScale; oldPlayerData = KickStarter.player.SavePlayerData(oldPlayerData); recordedOldPlayerData = true; } if (newPlayerPosition != NewPlayerPosition.ReplaceCurrentPlayer) { if (oldPlayer == OldPlayer.ReplaceWithAssociatedNPC && (runtimeOldPlayerNPC == null || !runtimeOldPlayerNPC.gameObject.activeInHierarchy) && KickStarter.player.associatedNPCPrefab != null) { GameObject newObject = (GameObject)Instantiate(KickStarter.player.associatedNPCPrefab.gameObject); newObject.name = KickStarter.player.associatedNPCPrefab.gameObject.name; runtimeOldPlayerNPC = newObject.GetComponent <NPC>(); } if ((oldPlayer == OldPlayer.ReplaceWithNPC || oldPlayer == OldPlayer.ReplaceWithAssociatedNPC) && runtimeOldPlayerNPC != null && runtimeOldPlayerNPC.gameObject.activeInHierarchy) { runtimeOldPlayerNPC.Teleport(oldPlayerPosition); runtimeOldPlayerNPC.TransformRotation = oldPlayerRotation; runtimeOldPlayerNPC.transform.localScale = oldPlayerScale; if (recordedOldPlayerData) { ApplyRenderData(runtimeOldPlayerNPC, oldPlayerData); } // Force the rotation / sprite child to update runtimeOldPlayerNPC._Update(); } } if (runtimeNewPlayerNPC == null || newPlayerPosition == NewPlayerPosition.ReplaceAssociatedNPC) { // Try to find from associated NPC prefab if (newPlayerPrefab.playerOb.associatedNPCPrefab != null) { ConstantID prefabID = newPlayerPrefab.playerOb.associatedNPCPrefab.GetComponent <ConstantID>(); if (prefabID != null && prefabID.constantID != 0) { newPlayerNPC_ID = prefabID.constantID; runtimeNewPlayerNPC = AssignFile <NPC> (prefabID.constantID, null); } } } Quaternion newRotation = Quaternion.identity; if (newPlayerPosition == NewPlayerPosition.ReplaceCurrentPlayer) { newRotation = oldPlayerRotation; } else if (newPlayerPosition == NewPlayerPosition.ReplaceNPC && runtimeNewPlayerNPC != null) { newRotation = runtimeNewPlayerNPC.TransformRotation; } else if (newPlayerPosition == NewPlayerPosition.AppearAtMarker && runtimeNewPlayerMarker != null) { newRotation = runtimeNewPlayerMarker.transform.rotation; } if (runtimeNewPlayerNPC != null) { oldNPCData = runtimeNewPlayerNPC.SaveData(oldNPCData); } bool replacesOldPlayer = newPlayerPosition == NewPlayerPosition.ReplaceCurrentPlayer && (!restorePreviousData || !KickStarter.saveSystem.DoesPlayerDataExist(playerID, true)); KickStarter.ResetPlayer(newPlayerPrefab.playerOb, playerID, true, newRotation, keepInventory, false, replacesOldPlayer, alwaysSnapCamera); Player newPlayer = KickStarter.player; PlayerMenus.ResetInventoryBoxes(); if (replacesOldPlayer && recordedOldPlayerData) { ApplyRenderData(newPlayer, oldPlayerData); } if (restorePreviousData && KickStarter.saveSystem.DoesPlayerDataExist(playerID, true)) { int sceneToLoad = KickStarter.saveSystem.GetPlayerScene(playerID); string sceneToLoadName = KickStarter.saveSystem.GetPlayerSceneName(playerID); if (sceneToLoad >= 0 && sceneToLoad != UnityVersionHandler.GetCurrentSceneNumber()) { KickStarter.saveSystem.loadingGame = LoadingGame.JustSwitchingPlayer; KickStarter.sceneChanger.ChangeScene(new SceneInfo(string.Empty, sceneToLoad), true, false); } else if (!string.IsNullOrEmpty(sceneToLoadName) && sceneToLoadName != UnityVersionHandler.GetCurrentSceneName()) { KickStarter.saveSystem.loadingGame = LoadingGame.JustSwitchingPlayer; KickStarter.sceneChanger.ChangeScene(new SceneInfo(sceneToLoadName, -1), true, false); } else { // Same scene if (runtimeNewPlayerNPC != null) { newPlayer.RepositionToTransform(runtimeNewPlayerNPC.transform); runtimeNewPlayerNPC.HideFromView(newPlayer); } } } else { // No data to restore if (newPlayerPosition == NewPlayerPosition.ReplaceCurrentPlayer) { newPlayer.Teleport(oldPlayerPosition); newPlayer.SetRotation(oldPlayerRotation); newPlayer.transform.localScale = oldPlayerScale; } else if (newPlayerPosition == NewPlayerPosition.ReplaceNPC || newPlayerPosition == NewPlayerPosition.ReplaceAssociatedNPC) { if (runtimeNewPlayerNPC != null) { newPlayer.RepositionToTransform(runtimeNewPlayerNPC.transform); runtimeNewPlayerNPC.HideFromView(newPlayer); if (recordedOldNPCData) { ApplyRenderData(newPlayer, oldNPCData); } } } else if (newPlayerPosition == NewPlayerPosition.AppearAtMarker) { if (runtimeNewPlayerMarker) { newPlayer.RepositionToTransform(runtimeNewPlayerMarker.transform); } } else if (newPlayerPosition == NewPlayerPosition.AppearInOtherScene) { if (chooseNewSceneBy == ChooseSceneBy.Name && newPlayerSceneName == UnityVersionHandler.GetCurrentSceneName() || (chooseNewSceneBy == ChooseSceneBy.Number && newPlayerScene == UnityVersionHandler.GetCurrentSceneNumber())) { // Already in correct scene if (runtimeNewPlayerNPC && runtimeNewPlayerNPC.gameObject.activeInHierarchy) { newPlayer.RepositionToTransform(runtimeNewPlayerNPC.transform); runtimeNewPlayerNPC.HideFromView(newPlayer); } } else { KickStarter.sceneChanger.ChangeScene(new SceneInfo(chooseNewSceneBy, newPlayerSceneName, newPlayerScene), true, false, true); } } } if (KickStarter.mainCamera.attachedCamera && alwaysSnapCamera) { KickStarter.mainCamera.attachedCamera.MoveCameraInstant(); } AssetLoader.UnloadAssets(); } else { LogWarning("Cannot switch player - no player prefabs is defined."); } } } return(0f); }
/** * <summary>Adds an inventory item instance to the collection. If the item exists in another collection, it will be removed from there automatically.</summary> * <param name="addInstance">The inventory item instance to add</param> */ public void Add(InvInstance addInstance) { // Add to the first-available slot, or a filled slot if the same item if (!CanAccept(addInstance)) { if (InvInstance.IsValid(addInstance)) { if (KickStarter.eventManager) { KickStarter.eventManager.Call_OnUseContainerFail(addInstance.GetSourceContainer(), addInstance); } } return; } InvCollection fromCollection = addInstance.GetSource(); bool added = false; for (int i = 0; i < invInstances.Count; i++) { // Inside if (!InvInstance.IsValid(invInstances[i])) { // Empty slot invInstances[i] = addInstance.CreateTransferInstance(); if (KickStarter.eventManager) { KickStarter.eventManager.Call_OnChangeInventory(this, invInstances[i], InventoryEventType.Add); } added = true; break; } else if (invInstances[i] == addInstance) { // Same } else if (invInstances[i].InvItem == addInstance.InvItem && addInstance.InvItem.canCarryMultiple && invInstances[i].Capacity > 0) { // Merge if (addInstance.TransferCount > invInstances[i].Capacity) { addInstance.TransferCount = invInstances[i].Capacity; } int numAdded = Mathf.Min(addInstance.CreateTransferInstance().Count, invInstances[i].Capacity); invInstances[i].Count += numAdded; if (KickStarter.eventManager) { KickStarter.eventManager.Call_OnChangeInventory(this, invInstances[i], InventoryEventType.Add, numAdded); } added = true; break; } } if (!added) { AddToEnd(addInstance); return; } if (fromCollection != null) { fromCollection.Clean(); } Clean(); PlayerMenus.ResetInventoryBoxes(); }