diff --git a/Project Undercover/Assets/Resources/ScriptableObjects/Actions/NPC/NpcApproachingTarget.asset b/Project Undercover/Assets/Resources/ScriptableObjects/Actions/NPC/NpcApproachingTarget.asset new file mode 100644 index 0000000..83508ec --- /dev/null +++ b/Project Undercover/Assets/Resources/ScriptableObjects/Actions/NPC/NpcApproachingTarget.asset @@ -0,0 +1,13 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a68114b6ee7c444a90e241327d93bdc, type: 3} + m_Name: NpcApproachingTarget + m_EditorClassIdentifier: diff --git a/Project Undercover/Assets/Resources/ScriptableObjects/Actions/NPC/NpcApproachingTarget.asset.meta b/Project Undercover/Assets/Resources/ScriptableObjects/Actions/NPC/NpcApproachingTarget.asset.meta new file mode 100644 index 0000000..0e0b6d4 --- /dev/null +++ b/Project Undercover/Assets/Resources/ScriptableObjects/Actions/NPC/NpcApproachingTarget.asset.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 9d5f7cb18596843449c520a3adde576a +timeCreated: 1507654071 +licenseType: Free +NativeFormatImporter: + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project Undercover/Assets/Resources/ScriptableObjects/Decisions/NPC.meta b/Project Undercover/Assets/Resources/ScriptableObjects/Decisions/NPC.meta index 8571924..8a4d924 100644 --- a/Project Undercover/Assets/Resources/ScriptableObjects/Decisions/NPC.meta +++ b/Project Undercover/Assets/Resources/ScriptableObjects/Decisions/NPC.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: aed8389bb6c1d4d49ad5bf1d04d7be17 folderAsset: yes -timeCreated: 1506987054 +timeCreated: 1507593469 licenseType: Free DefaultImporter: userData: diff --git a/Project Undercover/Assets/Resources/ScriptableObjects/Decisions/NPC/ObjectAlreadyHasInteractor.asset b/Project Undercover/Assets/Resources/ScriptableObjects/Decisions/NPC/ObjectAlreadyHasInteractor.asset new file mode 100644 index 0000000..b2bd2ac --- /dev/null +++ b/Project Undercover/Assets/Resources/ScriptableObjects/Decisions/NPC/ObjectAlreadyHasInteractor.asset @@ -0,0 +1,13 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5087e9722bba7ee478933f94f035b990, type: 3} + m_Name: ObjectAlreadyHasInteractor + m_EditorClassIdentifier: diff --git a/Project Undercover/Assets/Resources/ScriptableObjects/Decisions/NPC/ObjectAlreadyHasInteractor.asset.meta b/Project Undercover/Assets/Resources/ScriptableObjects/Decisions/NPC/ObjectAlreadyHasInteractor.asset.meta new file mode 100644 index 0000000..8c1a862 --- /dev/null +++ b/Project Undercover/Assets/Resources/ScriptableObjects/Decisions/NPC/ObjectAlreadyHasInteractor.asset.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4078502a092bd9a41be210395f51aef0 +timeCreated: 1507653787 +licenseType: Free +NativeFormatImporter: + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project Undercover/Assets/Resources/ScriptableObjects/Decisions/NPC/ObjectInRangeAndAvailable.asset b/Project Undercover/Assets/Resources/ScriptableObjects/Decisions/NPC/ObjectInRangeAndAvailable.asset new file mode 100644 index 0000000..42b5934 --- /dev/null +++ b/Project Undercover/Assets/Resources/ScriptableObjects/Decisions/NPC/ObjectInRangeAndAvailable.asset @@ -0,0 +1,13 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f3ee18a0ee4867f4980c76b7ceb7d74e, type: 3} + m_Name: ObjectInRangeAndAvailable + m_EditorClassIdentifier: diff --git a/Project Undercover/Assets/Resources/ScriptableObjects/Decisions/NPC/ObjectInRangeAndAvailable.asset.meta b/Project Undercover/Assets/Resources/ScriptableObjects/Decisions/NPC/ObjectInRangeAndAvailable.asset.meta new file mode 100644 index 0000000..843fb80 --- /dev/null +++ b/Project Undercover/Assets/Resources/ScriptableObjects/Decisions/NPC/ObjectInRangeAndAvailable.asset.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5b77ad8a89f818e47be8530f8148553b +timeCreated: 1507653546 +licenseType: Free +NativeFormatImporter: + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project Undercover/Assets/Resources/ScriptableObjects/States/NPC/NpcApproachingTarget.asset b/Project Undercover/Assets/Resources/ScriptableObjects/States/NPC/NpcApproachingTarget.asset new file mode 100644 index 0000000..6f70566 --- /dev/null +++ b/Project Undercover/Assets/Resources/ScriptableObjects/States/NPC/NpcApproachingTarget.asset @@ -0,0 +1,25 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5a6a367e35acd7e44a0a598eaa1d6700, type: 3} + m_Name: NpcApproachingTarget + m_EditorClassIdentifier: + actions: + - {fileID: 11400000, guid: 9d5f7cb18596843449c520a3adde576a, type: 2} + transitions: + - decision: {fileID: 11400000, guid: 5b77ad8a89f818e47be8530f8148553b, type: 2} + trueState: {fileID: 11400000, guid: a70ae0bc5f16c9648ab8c7b1963547ac, type: 2} + transitionValue: 1 + - decision: {fileID: 11400000, guid: 010846579b426744d84ebd4f5f2ce837, type: 2} + trueState: {fileID: 11400000, guid: 963f4d74f828ef94d85740708e8ce1d0, type: 2} + transitionValue: 1 + - decision: {fileID: 11400000, guid: 4078502a092bd9a41be210395f51aef0, type: 2} + trueState: {fileID: 11400000, guid: 78ec31c429ad5074bb50d001b1a49a77, type: 2} + transitionValue: 1 diff --git a/Project Undercover/Assets/Resources/ScriptableObjects/States/NPC/NpcApproachingTarget.asset.meta b/Project Undercover/Assets/Resources/ScriptableObjects/States/NPC/NpcApproachingTarget.asset.meta new file mode 100644 index 0000000..2391e72 --- /dev/null +++ b/Project Undercover/Assets/Resources/ScriptableObjects/States/NPC/NpcApproachingTarget.asset.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 67adff9f9e4c58941b86d56c6faaade4 +timeCreated: 1507653176 +licenseType: Free +NativeFormatImporter: + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project Undercover/Assets/Resources/ScriptableObjects/States/NPC/NpcRoam.asset b/Project Undercover/Assets/Resources/ScriptableObjects/States/NPC/NpcRoam.asset index 766324a..e88e3fb 100644 --- a/Project Undercover/Assets/Resources/ScriptableObjects/States/NPC/NpcRoam.asset +++ b/Project Undercover/Assets/Resources/ScriptableObjects/States/NPC/NpcRoam.asset @@ -18,5 +18,5 @@ MonoBehaviour: trueState: {fileID: 11400000, guid: 963f4d74f828ef94d85740708e8ce1d0, type: 2} transitionValue: 1 - decision: {fileID: 11400000, guid: c14d2053399388247b9cfde51ce5f57c, type: 2} - trueState: {fileID: 11400000, guid: a70ae0bc5f16c9648ab8c7b1963547ac, type: 2} + trueState: {fileID: 11400000, guid: 67adff9f9e4c58941b86d56c6faaade4, type: 2} transitionValue: 1 diff --git a/Project Undercover/Assets/Scenes/NewCharactersTest.unity b/Project Undercover/Assets/Scenes/NewCharactersTest.unity index f6ea0aa..30171ee 100644 --- a/Project Undercover/Assets/Scenes/NewCharactersTest.unity +++ b/Project Undercover/Assets/Scenes/NewCharactersTest.unity @@ -1598,7 +1598,7 @@ MonoBehaviour: NPCPrefab: {fileID: 1249949894527080, guid: ea4aade53c5c4714b8b9c335e8100cf0, type: 2} cameraRigPrefab: {fileID: 1009033979625728, guid: 1764211b5690c164d82aa46fa4ec707d, type: 2} - numNpcs: 5 + numNpcs: 10 spyMissionsComplete: 0 waitBetweenMissions: 5 onMissionCooldown: 0 diff --git a/Project Undercover/Assets/Scripts/CharacterStateMachine/ActionScripts/NpcApproachingTargetAction.cs b/Project Undercover/Assets/Scripts/CharacterStateMachine/ActionScripts/NpcApproachingTargetAction.cs new file mode 100644 index 0000000..a8be6a6 --- /dev/null +++ b/Project Undercover/Assets/Scripts/CharacterStateMachine/ActionScripts/NpcApproachingTargetAction.cs @@ -0,0 +1,21 @@ +using System; +using UnityEngine; + +[CreateAssetMenu(menuName = "CharacterStateMachine/Actions/NpcApproachingTarget")] +public class NpcApproachingTargetAction : Action +{ + public override void StartAct(StateController controller) + { + //Debug.Log("Approaching object"); + } + + public override void Act(StateController controller) + { + controller.Destination = controller.SelectedObject.transform.position; + } + + public override void EndAct(StateController controller) + { + //Debug.Log("No longer approaching object"); + } +} \ No newline at end of file diff --git a/Project Undercover/Assets/Scripts/CharacterStateMachine/ActionScripts/NpcApproachingTargetAction.cs.meta b/Project Undercover/Assets/Scripts/CharacterStateMachine/ActionScripts/NpcApproachingTargetAction.cs.meta new file mode 100644 index 0000000..a12ab42 --- /dev/null +++ b/Project Undercover/Assets/Scripts/CharacterStateMachine/ActionScripts/NpcApproachingTargetAction.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3a68114b6ee7c444a90e241327d93bdc +timeCreated: 1507654026 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project Undercover/Assets/Scripts/CharacterStateMachine/ActionScripts/NpcWaitForInteractionAcceptanceAction.cs b/Project Undercover/Assets/Scripts/CharacterStateMachine/ActionScripts/NpcWaitForInteractionAcceptanceAction.cs index 24fcc26..701fa0f 100644 --- a/Project Undercover/Assets/Scripts/CharacterStateMachine/ActionScripts/NpcWaitForInteractionAcceptanceAction.cs +++ b/Project Undercover/Assets/Scripts/CharacterStateMachine/ActionScripts/NpcWaitForInteractionAcceptanceAction.cs @@ -1,7 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using UnityEngine; [CreateAssetMenu(menuName = "CharacterStateMachine/Actions/NpcWaitForInteractionAcceptance")] @@ -11,7 +8,6 @@ public class NpcWaitForInteractionAcceptanceAction : Action public override void StartAct(StateController controller) { controller.InitiateInteractionWithSelectedObject(); - //controller.Destination = controller.SelectedObject.transform.position; } } diff --git a/Project Undercover/Assets/Scripts/CharacterStateMachine/ActionScripts/RoamAction.cs b/Project Undercover/Assets/Scripts/CharacterStateMachine/ActionScripts/RoamAction.cs index 7e89328..6d27910 100644 --- a/Project Undercover/Assets/Scripts/CharacterStateMachine/ActionScripts/RoamAction.cs +++ b/Project Undercover/Assets/Scripts/CharacterStateMachine/ActionScripts/RoamAction.cs @@ -7,9 +7,15 @@ public class RoamAction : Action { public override void StartAct(StateController controller) { - // Debug.Log("Started Roaming"); controller.StartRoaming(); controller.characterAnimator.SetBool(CharacterAnimator.Params.Interacting, false); + if (controller.SelectedObject) + { + controller.SelectedObject.IsInteracting = false; + controller.SelectedObject = null; + } + if (controller.IsInteracting) + controller.IsInteracting = false; } public override void Act(StateController controller) diff --git a/Project Undercover/Assets/Scripts/CharacterStateMachine/DecisionScripts/ObjectAlreadyHasInteractorDecision.cs b/Project Undercover/Assets/Scripts/CharacterStateMachine/DecisionScripts/ObjectAlreadyHasInteractorDecision.cs new file mode 100644 index 0000000..f0a96a2 --- /dev/null +++ b/Project Undercover/Assets/Scripts/CharacterStateMachine/DecisionScripts/ObjectAlreadyHasInteractorDecision.cs @@ -0,0 +1,12 @@ +using UnityEngine; + +[CreateAssetMenu(menuName = "CharacterStateMachine/Decisions/ObjectAlreadyHasInteractor")] +public class ObjectAlreadyHasInteractorDecision : Decision +{ + public override bool Decide(StateController controller) + { + if (controller.SelectedObject.Interactor != null) + return controller.SelectedObject.Interactor != controller; + return false; + } +} diff --git a/Project Undercover/Assets/Scripts/CharacterStateMachine/DecisionScripts/ObjectAlreadyHasInteractorDecision.cs.meta b/Project Undercover/Assets/Scripts/CharacterStateMachine/DecisionScripts/ObjectAlreadyHasInteractorDecision.cs.meta new file mode 100644 index 0000000..4773cce --- /dev/null +++ b/Project Undercover/Assets/Scripts/CharacterStateMachine/DecisionScripts/ObjectAlreadyHasInteractorDecision.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5087e9722bba7ee478933f94f035b990 +timeCreated: 1507653758 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project Undercover/Assets/Scripts/CharacterStateMachine/DecisionScripts/ObjectInRangeAndAvailableDecision.cs b/Project Undercover/Assets/Scripts/CharacterStateMachine/DecisionScripts/ObjectInRangeAndAvailableDecision.cs new file mode 100644 index 0000000..60a92fd --- /dev/null +++ b/Project Undercover/Assets/Scripts/CharacterStateMachine/DecisionScripts/ObjectInRangeAndAvailableDecision.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEngine; + +[CreateAssetMenu(menuName = "CharacterStateMachine/Decisions/ObjectInRangeAndAvailable")] +public class ObjectInRangeAndAvailableDecision : Decision +{ + public override bool Decide(StateController controller) + { + + return controller.InRangeOfSelectedObject() && controller.SelectedObject.Interactor == null; + } +} + diff --git a/Project Undercover/Assets/Scripts/CharacterStateMachine/DecisionScripts/ObjectInRangeAndAvailableDecision.cs.meta b/Project Undercover/Assets/Scripts/CharacterStateMachine/DecisionScripts/ObjectInRangeAndAvailableDecision.cs.meta new file mode 100644 index 0000000..081e737 --- /dev/null +++ b/Project Undercover/Assets/Scripts/CharacterStateMachine/DecisionScripts/ObjectInRangeAndAvailableDecision.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f3ee18a0ee4867f4980c76b7ceb7d74e +timeCreated: 1507653505 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Project Undercover/Assets/Scripts/CharacterStateMachine/Interfaces/Interaction.cs b/Project Undercover/Assets/Scripts/CharacterStateMachine/Interfaces/Interaction.cs index 34e3f41..b2da264 100644 --- a/Project Undercover/Assets/Scripts/CharacterStateMachine/Interfaces/Interaction.cs +++ b/Project Undercover/Assets/Scripts/CharacterStateMachine/Interfaces/Interaction.cs @@ -18,11 +18,16 @@ public class Interaction : ScriptableObject { Nothing, SpyMissionComplete } - /* - public override int GetHashCode() + + public int GetHash() { - return interactionDescription.GetHashCode() ^ (int)characterInteraction; - }*/ + return interactionDescription.Length + (int)initiatorAnimationTrigger + (int)objectAnimationTrigger; + } + + public bool CompareHash(int hash) + { + return hash == GetHash(); + } public void ExecuteResult(StateController controller) { diff --git a/Project Undercover/Assets/Scripts/CharacterStateMachine/Interfaces/SelectableObject.cs b/Project Undercover/Assets/Scripts/CharacterStateMachine/Interfaces/SelectableObject.cs index fd7d851..035522f 100644 --- a/Project Undercover/Assets/Scripts/CharacterStateMachine/Interfaces/SelectableObject.cs +++ b/Project Undercover/Assets/Scripts/CharacterStateMachine/Interfaces/SelectableObject.cs @@ -180,7 +180,6 @@ public abstract class SelectableObject : Photon.PunBehaviour, IEquatable 0.5f) + if (UnityEngine.Random.value < 0.2f) { SelectableObject randomObject = GetRandomAvailableSelectableObject(); if (randomObject != null) @@ -220,7 +220,6 @@ public class StateController : SelectableObject IsInteracting = true; Interaction randomInteraction = SelectedObject.GetRandomNpcInteraction(); SelectedInteraction = randomInteraction; - Debug.Log(SelectedObject.name); yield return null; } } @@ -291,4 +290,9 @@ public class StateController : SelectableObject navMeshAgent.stoppingDistance = 0.0f; Destination = newPos; } + + public bool InRangeOfSelectedObject() + { + return (SelectedObject.transform.position - transform.position).magnitude < INTERACT_RANGE; + } } diff --git a/Project Undercover/Assets/Scripts/UI/InteractionPanelController.cs b/Project Undercover/Assets/Scripts/UI/InteractionPanelController.cs index 0a4c1d3..4329a0e 100644 --- a/Project Undercover/Assets/Scripts/UI/InteractionPanelController.cs +++ b/Project Undercover/Assets/Scripts/UI/InteractionPanelController.cs @@ -48,17 +48,22 @@ public class InteractionPanelController : MonoBehaviour { if (mainPanel.activeInHierarchy) return; interactionsDropdown.ClearOptions(); + var optionsList = new List(); foreach (Interaction interaction in controller.SelectedObject.interactions) { var data = new InteractionData(interaction, false); optionsList.Add(data); } - foreach (Interaction interaction in controller.SelectedObject.spyInteractions) + if (controller.SelectedObject.CompareTag("Spy")) { - var data = new InteractionData(interaction, true); - optionsList.Add(data); + foreach (Interaction interaction in controller.SelectedObject.spyInteractions) + { + var data = new InteractionData(interaction, true); + optionsList.Add(data); + } } + interactionsDropdown.AddOptions(optionsList); _controller.SelectedInteraction = ((InteractionData)(interactionsDropdown.options[interactionsDropdown.value])).interaction; ActivePanel.mainPanel.SetActive(true);