Missions - saving
This commit is contained in:
parent
b72537003b
commit
db8589c61a
@ -12,11 +12,11 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: 67587597537a4344cad65ddbcebee119, type: 3}
|
m_Script: {fileID: 11500000, guid: 67587597537a4344cad65ddbcebee119, type: 3}
|
||||||
m_Name: New Mission Dialogue
|
m_Name: New Mission Dialogue
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
SpeakerName: Luberjack 2
|
SpeakerName: Lumberjack xd
|
||||||
CurrentStep: 0
|
CurrentStep: 2
|
||||||
DialogueSteps:
|
DialogueSteps:
|
||||||
- Header: Luberjack 2
|
- Header: Lumberjack xd
|
||||||
WasDisplayed: 0
|
WasDisplayed: 1
|
||||||
ListOfSentences:
|
ListOfSentences:
|
||||||
- Sentence: Could you help me?
|
- Sentence: Could you help me?
|
||||||
Buttons: []
|
Buttons: []
|
||||||
@ -56,14 +56,54 @@ MonoBehaviour:
|
|||||||
m_StringArgument:
|
m_StringArgument:
|
||||||
m_BoolArgument: 0
|
m_BoolArgument: 0
|
||||||
m_CallState: 2
|
m_CallState: 2
|
||||||
|
- m_Target: {fileID: 11400000}
|
||||||
|
m_TargetAssemblyTypeName: Dialogue, Assembly-CSharp
|
||||||
|
m_MethodName: FinishDialogue
|
||||||
|
m_Mode: 1
|
||||||
|
m_Arguments:
|
||||||
|
m_ObjectArgument: {fileID: 0}
|
||||||
|
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
|
||||||
|
m_IntArgument: 0
|
||||||
|
m_FloatArgument: 0
|
||||||
|
m_StringArgument:
|
||||||
|
m_BoolArgument: 0
|
||||||
|
m_CallState: 2
|
||||||
|
EndOfDialogueStepAction:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls:
|
||||||
|
- m_Target: {fileID: 11400000}
|
||||||
|
m_TargetAssemblyTypeName: Dialogue, Assembly-CSharp
|
||||||
|
m_MethodName: GoToNextSentence
|
||||||
|
m_Mode: 1
|
||||||
|
m_Arguments:
|
||||||
|
m_ObjectArgument: {fileID: 0}
|
||||||
|
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
|
||||||
|
m_IntArgument: 0
|
||||||
|
m_FloatArgument: 0
|
||||||
|
m_StringArgument:
|
||||||
|
m_BoolArgument: 0
|
||||||
|
m_CallState: 2
|
||||||
|
- Header: Lumberjack xd
|
||||||
|
WasDisplayed: 1
|
||||||
|
ListOfSentences:
|
||||||
- Sentence: Thank you very much, now go!
|
- Sentence: Thank you very much, now go!
|
||||||
Buttons: []
|
Buttons: []
|
||||||
EndOfDialogueStepAction:
|
EndOfDialogueStepAction:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
- Header: Lumberjack xd
|
||||||
|
WasDisplayed: 0
|
||||||
|
ListOfSentences:
|
||||||
|
- Sentence: Have you ound it?
|
||||||
|
Buttons:
|
||||||
|
- ButtonName: yes
|
||||||
|
Type: 1
|
||||||
|
ButtonActions:
|
||||||
m_PersistentCalls:
|
m_PersistentCalls:
|
||||||
m_Calls:
|
m_Calls:
|
||||||
- m_Target: {fileID: 11400000}
|
- m_Target: {fileID: 11400000}
|
||||||
m_TargetAssemblyTypeName: Dialogue, Assembly-CSharp
|
m_TargetAssemblyTypeName: MissionDialogue, Assembly-CSharp
|
||||||
m_MethodName: ShowNextPanel
|
m_MethodName: HandleCondition
|
||||||
m_Mode: 1
|
m_Mode: 1
|
||||||
m_Arguments:
|
m_Arguments:
|
||||||
m_ObjectArgument: {fileID: 0}
|
m_ObjectArgument: {fileID: 0}
|
||||||
@ -73,58 +113,27 @@ MonoBehaviour:
|
|||||||
m_StringArgument:
|
m_StringArgument:
|
||||||
m_BoolArgument: 0
|
m_BoolArgument: 0
|
||||||
m_CallState: 2
|
m_CallState: 2
|
||||||
- Header: Luberjack 2
|
- ButtonName: no
|
||||||
WasDisplayed: 0
|
Type: 1
|
||||||
ListOfSentences:
|
ButtonActions:
|
||||||
- Sentence: Fantastic!!
|
m_PersistentCalls:
|
||||||
Buttons: []
|
m_Calls:
|
||||||
- Sentence: Please take this reward
|
- m_Target: {fileID: 11400000}
|
||||||
Buttons:
|
m_TargetAssemblyTypeName: Dialogue, Assembly-CSharp
|
||||||
- ButtonName: Take
|
m_MethodName: BreakDialogueStep
|
||||||
Type: 1
|
m_Mode: 1
|
||||||
ButtonActions:
|
m_Arguments:
|
||||||
m_PersistentCalls:
|
m_ObjectArgument: {fileID: 0}
|
||||||
m_Calls:
|
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
|
||||||
- m_Target: {fileID: 11400000}
|
m_IntArgument: 0
|
||||||
m_TargetAssemblyTypeName: MissionDialogue, Assembly-CSharp
|
m_FloatArgument: 0
|
||||||
m_MethodName: GiveReward
|
m_StringArgument:
|
||||||
m_Mode: 1
|
m_BoolArgument: 0
|
||||||
m_Arguments:
|
m_CallState: 2
|
||||||
m_ObjectArgument: {fileID: 0}
|
EndOfDialogueStepAction:
|
||||||
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
|
m_PersistentCalls:
|
||||||
m_IntArgument: 0
|
m_Calls: []
|
||||||
m_FloatArgument: 0
|
- Header: Lumberjack xd
|
||||||
m_StringArgument:
|
|
||||||
m_BoolArgument: 0
|
|
||||||
m_CallState: 2
|
|
||||||
- m_Target: {fileID: 11400000}
|
|
||||||
m_TargetAssemblyTypeName: Dialogue, Assembly-CSharp
|
|
||||||
m_MethodName: GoToNextSentence
|
|
||||||
m_Mode: 1
|
|
||||||
m_Arguments:
|
|
||||||
m_ObjectArgument: {fileID: 0}
|
|
||||||
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
|
|
||||||
m_IntArgument: 0
|
|
||||||
m_FloatArgument: 0
|
|
||||||
m_StringArgument:
|
|
||||||
m_BoolArgument: 0
|
|
||||||
m_CallState: 2
|
|
||||||
EndOfDialogueStepAction:
|
|
||||||
m_PersistentCalls:
|
|
||||||
m_Calls:
|
|
||||||
- m_Target: {fileID: 11400000}
|
|
||||||
m_TargetAssemblyTypeName: MissionDialogue, Assembly-CSharp
|
|
||||||
m_MethodName: FinishMission
|
|
||||||
m_Mode: 1
|
|
||||||
m_Arguments:
|
|
||||||
m_ObjectArgument: {fileID: 0}
|
|
||||||
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
|
|
||||||
m_IntArgument: 0
|
|
||||||
m_FloatArgument: 0
|
|
||||||
m_StringArgument:
|
|
||||||
m_BoolArgument: 0
|
|
||||||
m_CallState: 2
|
|
||||||
- Header: Luberjack 2
|
|
||||||
WasDisplayed: 0
|
WasDisplayed: 0
|
||||||
ListOfSentences:
|
ListOfSentences:
|
||||||
- Sentence: Fantastic!!
|
- Sentence: Fantastic!!
|
||||||
|
184
Assets/Resources/Mission/New Mission Kill.asset
Normal file
184
Assets/Resources/Mission/New Mission Kill.asset
Normal file
@ -0,0 +1,184 @@
|
|||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!114 &11400000
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 0}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 67587597537a4344cad65ddbcebee119, type: 3}
|
||||||
|
m_Name: New Mission Kill
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
SpeakerName: Lumberjack kill mission
|
||||||
|
CurrentStep: 1
|
||||||
|
DialogueSteps:
|
||||||
|
- Header: Lumberjack kill mission
|
||||||
|
WasDisplayed: 1
|
||||||
|
ListOfSentences:
|
||||||
|
- Sentence: Please kill 2 bats for me
|
||||||
|
Buttons:
|
||||||
|
- ButtonName: I dont want to kill them
|
||||||
|
Type: 1
|
||||||
|
ButtonActions:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls:
|
||||||
|
- m_Target: {fileID: 11400000}
|
||||||
|
m_TargetAssemblyTypeName: MissionDialogue, Assembly-CSharp
|
||||||
|
m_MethodName: RejectMission
|
||||||
|
m_Mode: 1
|
||||||
|
m_Arguments:
|
||||||
|
m_ObjectArgument: {fileID: 0}
|
||||||
|
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
|
||||||
|
m_IntArgument: 0
|
||||||
|
m_FloatArgument: 0
|
||||||
|
m_StringArgument:
|
||||||
|
m_BoolArgument: 0
|
||||||
|
m_CallState: 2
|
||||||
|
- ButtonName: I will kill them
|
||||||
|
Type: 1
|
||||||
|
ButtonActions:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls:
|
||||||
|
- m_Target: {fileID: 11400000}
|
||||||
|
m_TargetAssemblyTypeName: MissionDialogue, Assembly-CSharp
|
||||||
|
m_MethodName: AcceptMission
|
||||||
|
m_Mode: 1
|
||||||
|
m_Arguments:
|
||||||
|
m_ObjectArgument: {fileID: 0}
|
||||||
|
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
|
||||||
|
m_IntArgument: 0
|
||||||
|
m_FloatArgument: 0
|
||||||
|
m_StringArgument:
|
||||||
|
m_BoolArgument: 0
|
||||||
|
m_CallState: 2
|
||||||
|
- m_Target: {fileID: 11400000}
|
||||||
|
m_TargetAssemblyTypeName: Dialogue, Assembly-CSharp
|
||||||
|
m_MethodName: FinishDialogue
|
||||||
|
m_Mode: 1
|
||||||
|
m_Arguments:
|
||||||
|
m_ObjectArgument: {fileID: 0}
|
||||||
|
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
|
||||||
|
m_IntArgument: 0
|
||||||
|
m_FloatArgument: 0
|
||||||
|
m_StringArgument:
|
||||||
|
m_BoolArgument: 0
|
||||||
|
m_CallState: 2
|
||||||
|
EndOfDialogueStepAction:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls:
|
||||||
|
- m_Target: {fileID: 11400000}
|
||||||
|
m_TargetAssemblyTypeName: Dialogue, Assembly-CSharp
|
||||||
|
m_MethodName: GoToNextSentence
|
||||||
|
m_Mode: 1
|
||||||
|
m_Arguments:
|
||||||
|
m_ObjectArgument: {fileID: 0}
|
||||||
|
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
|
||||||
|
m_IntArgument: 0
|
||||||
|
m_FloatArgument: 0
|
||||||
|
m_StringArgument:
|
||||||
|
m_BoolArgument: 0
|
||||||
|
m_CallState: 2
|
||||||
|
- Header: Lumberjack kill mission
|
||||||
|
WasDisplayed: 1
|
||||||
|
ListOfSentences:
|
||||||
|
- Sentence: Thank you very much, now go!
|
||||||
|
Buttons: []
|
||||||
|
EndOfDialogueStepAction:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
- Header: Lumberjack kill mission
|
||||||
|
WasDisplayed: 0
|
||||||
|
ListOfSentences:
|
||||||
|
- Sentence: Have you kill them?
|
||||||
|
Buttons:
|
||||||
|
- ButtonName: no
|
||||||
|
Type: 1
|
||||||
|
ButtonActions:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls:
|
||||||
|
- m_Target: {fileID: 11400000}
|
||||||
|
m_TargetAssemblyTypeName: Dialogue, Assembly-CSharp
|
||||||
|
m_MethodName: BreakDialogueStep
|
||||||
|
m_Mode: 1
|
||||||
|
m_Arguments:
|
||||||
|
m_ObjectArgument: {fileID: 0}
|
||||||
|
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
|
||||||
|
m_IntArgument: 0
|
||||||
|
m_FloatArgument: 0
|
||||||
|
m_StringArgument:
|
||||||
|
m_BoolArgument: 0
|
||||||
|
m_CallState: 2
|
||||||
|
- ButtonName: yes
|
||||||
|
Type: 1
|
||||||
|
ButtonActions:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls:
|
||||||
|
- m_Target: {fileID: 11400000}
|
||||||
|
m_TargetAssemblyTypeName: MissionDialogue, Assembly-CSharp
|
||||||
|
m_MethodName: HandleCondition
|
||||||
|
m_Mode: 1
|
||||||
|
m_Arguments:
|
||||||
|
m_ObjectArgument: {fileID: 0}
|
||||||
|
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
|
||||||
|
m_IntArgument: 0
|
||||||
|
m_FloatArgument: 0
|
||||||
|
m_StringArgument:
|
||||||
|
m_BoolArgument: 0
|
||||||
|
m_CallState: 2
|
||||||
|
EndOfDialogueStepAction:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
- Header: Lumberjack kill mission
|
||||||
|
WasDisplayed: 0
|
||||||
|
ListOfSentences:
|
||||||
|
- Sentence: Fantastic!!
|
||||||
|
Buttons: []
|
||||||
|
- Sentence: Please take this reward
|
||||||
|
Buttons:
|
||||||
|
- ButtonName: Take
|
||||||
|
Type: 1
|
||||||
|
ButtonActions:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls:
|
||||||
|
- m_Target: {fileID: 11400000}
|
||||||
|
m_TargetAssemblyTypeName: MissionDialogue, Assembly-CSharp
|
||||||
|
m_MethodName: GiveReward
|
||||||
|
m_Mode: 1
|
||||||
|
m_Arguments:
|
||||||
|
m_ObjectArgument: {fileID: 0}
|
||||||
|
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
|
||||||
|
m_IntArgument: 0
|
||||||
|
m_FloatArgument: 0
|
||||||
|
m_StringArgument:
|
||||||
|
m_BoolArgument: 0
|
||||||
|
m_CallState: 2
|
||||||
|
- m_Target: {fileID: 11400000}
|
||||||
|
m_TargetAssemblyTypeName: Dialogue, Assembly-CSharp
|
||||||
|
m_MethodName: GoToNextSentence
|
||||||
|
m_Mode: 1
|
||||||
|
m_Arguments:
|
||||||
|
m_ObjectArgument: {fileID: 0}
|
||||||
|
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
|
||||||
|
m_IntArgument: 0
|
||||||
|
m_FloatArgument: 0
|
||||||
|
m_StringArgument:
|
||||||
|
m_BoolArgument: 0
|
||||||
|
m_CallState: 2
|
||||||
|
EndOfDialogueStepAction:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls:
|
||||||
|
- m_Target: {fileID: 11400000}
|
||||||
|
m_TargetAssemblyTypeName: MissionDialogue, Assembly-CSharp
|
||||||
|
m_MethodName: FinishMission
|
||||||
|
m_Mode: 1
|
||||||
|
m_Arguments:
|
||||||
|
m_ObjectArgument: {fileID: 0}
|
||||||
|
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
|
||||||
|
m_IntArgument: 0
|
||||||
|
m_FloatArgument: 0
|
||||||
|
m_StringArgument:
|
||||||
|
m_BoolArgument: 0
|
||||||
|
m_CallState: 2
|
8
Assets/Resources/Mission/New Mission Kill.asset.meta
Normal file
8
Assets/Resources/Mission/New Mission Kill.asset.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: f78fd8078bd29a24dbe821cdde4c511b
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -10,7 +10,7 @@ MonoBehaviour:
|
|||||||
m_Enabled: 1
|
m_Enabled: 1
|
||||||
m_EditorHideFlags: 0
|
m_EditorHideFlags: 0
|
||||||
m_Script: {fileID: 11500000, guid: 0a3bcdd1e2dba0c4791bcb151c0df6c1, type: 3}
|
m_Script: {fileID: 11500000, guid: 0a3bcdd1e2dba0c4791bcb151c0df6c1, type: 3}
|
||||||
m_Name: TestMission
|
m_Name: TestCollectMission
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
MissionName: Test mission I
|
MissionName: Test mission I
|
||||||
PlayerTask:
|
PlayerTask:
|
||||||
@ -18,13 +18,12 @@ MonoBehaviour:
|
|||||||
title:
|
title:
|
||||||
description:
|
description:
|
||||||
difficulty: 0
|
difficulty: 0
|
||||||
SpeakerName:
|
SpeakerName: Lumberjack kill mission
|
||||||
Status: 0
|
Status: 3
|
||||||
CurrentStep: 0
|
CurrentStep: 0
|
||||||
MissionStepsList:
|
MissionStepsList:
|
||||||
- SpeakerName:
|
- SpeakerName: Lumberjack kill mission
|
||||||
Status: 0
|
Status: 2
|
||||||
DialogueStepTemplate: {fileID: 11400000, guid: fe2810d79ff17f74eab5cf9a916167b4, type: 2}
|
|
||||||
DialogueStep: {fileID: 11400000, guid: fe2810d79ff17f74eab5cf9a916167b4, type: 2}
|
DialogueStep: {fileID: 11400000, guid: fe2810d79ff17f74eab5cf9a916167b4, type: 2}
|
||||||
MissionConditions:
|
MissionConditions:
|
||||||
Key: 0
|
Key: 0
|
8
Assets/Resources/Mission/TestCollectMission.asset.meta
Normal file
8
Assets/Resources/Mission/TestCollectMission.asset.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 9e6ca23e6f35bc94891c0cdf2a450fae
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
39
Assets/Resources/Mission/TestKillMission.asset
Normal file
39
Assets/Resources/Mission/TestKillMission.asset
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!114 &11400000
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 0}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 0a3bcdd1e2dba0c4791bcb151c0df6c1, type: 3}
|
||||||
|
m_Name: TestKillMission
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
MissionName: mission kill test
|
||||||
|
PlayerTask:
|
||||||
|
id: 0
|
||||||
|
title:
|
||||||
|
description:
|
||||||
|
difficulty: 0
|
||||||
|
SpeakerName: Lumberjack kill mission
|
||||||
|
Status: 3
|
||||||
|
CurrentStep: 0
|
||||||
|
MissionStepsList:
|
||||||
|
- SpeakerName: Lumberjack kill mission
|
||||||
|
Status: 2
|
||||||
|
DialogueStep: {fileID: 11400000, guid: f78fd8078bd29a24dbe821cdde4c511b, type: 2}
|
||||||
|
MissionConditions:
|
||||||
|
Key: 0
|
||||||
|
Value:
|
||||||
|
- Type: 1
|
||||||
|
RequiredElements:
|
||||||
|
- RequiredAmount: 2
|
||||||
|
RequiredObject: {fileID: 8184504007427166059, guid: 90bf7de365b8fee4993aa2e50b64fe14, type: 3}
|
||||||
|
Reward:
|
||||||
|
Items:
|
||||||
|
- {fileID: 11400000, guid: dc7fdbc8450965344914371023ddb0c5, type: 2}
|
||||||
|
- {fileID: 11400000, guid: 5ca5ea8918f15904c8bad3fe9694e5a5, type: 2}
|
||||||
|
Cash: 300
|
@ -68,6 +68,8 @@ public class AnimatedDoorBehaviour : TriggerDoor
|
|||||||
SaveController.GetComponent<SaveController>().SaveChests();
|
SaveController.GetComponent<SaveController>().SaveChests();
|
||||||
SaveController.GetComponent<SaveController>().SaveShops();
|
SaveController.GetComponent<SaveController>().SaveShops();
|
||||||
SaveController.GetComponent<SaveController>().SaveDialogues();
|
SaveController.GetComponent<SaveController>().SaveDialogues();
|
||||||
|
SaveController.GetComponent<SaveController>().SaveMissions();
|
||||||
|
|
||||||
|
|
||||||
// 2. Change scene
|
// 2. Change scene
|
||||||
SceneManager.LoadScene(gateway.nextMapName);
|
SceneManager.LoadScene(gateway.nextMapName);
|
||||||
|
@ -49,6 +49,7 @@ public class DoorBehaviour : MonoBehaviour
|
|||||||
SaveController.GetComponent<SaveController>().SaveChests();
|
SaveController.GetComponent<SaveController>().SaveChests();
|
||||||
SaveController.GetComponent<SaveController>().SaveShops();
|
SaveController.GetComponent<SaveController>().SaveShops();
|
||||||
SaveController.GetComponent<SaveController>().SaveDialogues();
|
SaveController.GetComponent<SaveController>().SaveDialogues();
|
||||||
|
SaveController.GetComponent<SaveController>().SaveMissions();
|
||||||
|
|
||||||
// 2. Change scene
|
// 2. Change scene
|
||||||
SceneManager.LoadScene(gateway.nextMapName);
|
SceneManager.LoadScene(gateway.nextMapName);
|
||||||
|
@ -5,11 +5,13 @@ using UnityEngine;
|
|||||||
public class Enemy : MonoBehaviour
|
public class Enemy : MonoBehaviour
|
||||||
{
|
{
|
||||||
public float moveSpeed;
|
public float moveSpeed;
|
||||||
public string enemyName;
|
public string enemyName; // var for name (must be unique (playerPrefs.set/get string "enemyName - s")
|
||||||
public FloatValue maxHealth;
|
public FloatValue maxHealth;
|
||||||
public float health;
|
public float health;
|
||||||
public float baseAttack;
|
public float baseAttack;
|
||||||
|
|
||||||
|
public string MinionName; // var used for multiplied name - for mission poroggress (kill condition)
|
||||||
|
|
||||||
private void Awake()
|
private void Awake()
|
||||||
{
|
{
|
||||||
health = maxHealth.initialValue;
|
health = maxHealth.initialValue;
|
||||||
|
@ -222,7 +222,8 @@ public class FollowingEnemy : Enemy
|
|||||||
other.GetComponent<Player>().GetExp(expValue);
|
other.GetComponent<Player>().GetExp(expValue);
|
||||||
|
|
||||||
// pass info about killing assigned enemy to mission manager listener
|
// pass info about killing assigned enemy to mission manager listener
|
||||||
ConditionManager.Instance.UpdateKillCondition(gameObject.name);
|
// pass enemy name from script NOT object name (thats allow to have many different objects variantsa with this same aggregate key (private name - not preffab name) )
|
||||||
|
ConditionManager.Instance.UpdateKillCondition(gameObject.GetComponent<Enemy>().MinionName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -194,7 +194,8 @@ public class FollowingPatrollingEnemy : Enemy
|
|||||||
other.GetComponent<Player>().GetExp(expValue);
|
other.GetComponent<Player>().GetExp(expValue);
|
||||||
|
|
||||||
// pass info about killing assigned enemy to mission manager listener
|
// pass info about killing assigned enemy to mission manager listener
|
||||||
ConditionManager.Instance.UpdateKillCondition(gameObject.name);
|
// pass enemy name from script NOT object name (thats allow to have many different objects variantsa with this same aggregate key (private name - not preffab name) )
|
||||||
|
ConditionManager.Instance.UpdateKillCondition(gameObject.GetComponent<Enemy>().MinionName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using UnityEditor;
|
using UnityEditor;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.Events;
|
using UnityEngine.Events;
|
||||||
@ -266,10 +267,12 @@ public class Dialogue : ScriptableObject, IDialogue
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public void ResetDialogue()
|
public void ResetDialogue()
|
||||||
{
|
{
|
||||||
|
CurrentStep = 0;
|
||||||
|
|
||||||
DialogueSteps.ForEach(step => step.WasDisplayed = false);
|
DialogueSteps.ForEach(step => step.WasDisplayed = false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateDialogueState(DialogueData dialogueData)
|
public virtual void UpdateDialogueState(DialogueData dialogueData)
|
||||||
{
|
{
|
||||||
// 1 Rule - speaker name shouldnt change !!! its our 'key'
|
// 1 Rule - speaker name shouldnt change !!! its our 'key'
|
||||||
|
|
||||||
@ -283,9 +286,15 @@ public class Dialogue : ScriptableObject, IDialogue
|
|||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
public DialogueStepModel GetCurrentStep()
|
public DialogueStepModel? GetCurrentStep()
|
||||||
{// TODO - argument out of colection :/
|
{// TODO - argument out of colection :/
|
||||||
return DialogueSteps[CurrentStep];
|
|
||||||
|
var currentStep = DialogueSteps.ElementAtOrDefault(CurrentStep);
|
||||||
|
|
||||||
|
if (currentStep != null && currentStep.WasDisplayed && CurrentStep < DialogueSteps.Count)
|
||||||
|
CurrentStep++;
|
||||||
|
|
||||||
|
return DialogueSteps.Count > CurrentStep ? DialogueSteps[CurrentStep] : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -149,7 +149,7 @@ public class DialogueManager : MonoBehaviour
|
|||||||
public virtual bool GetCurrentDialoguePanelStatus()
|
public virtual bool GetCurrentDialoguePanelStatus()
|
||||||
{
|
{
|
||||||
var multiDialStatius = Dialogue.DialogueStepStatus();
|
var multiDialStatius = Dialogue.DialogueStepStatus();
|
||||||
Debug.Log(multiDialStatius);
|
|
||||||
// parse result (dialoge no, step no)
|
// parse result (dialoge no, step no)
|
||||||
// dialogue not exist - finished
|
// dialogue not exist - finished
|
||||||
// dialoge exists & step no > steps sum - finished
|
// dialoge exists & step no > steps sum - finished
|
||||||
|
@ -28,7 +28,8 @@ public class MissionDialogue : Dialogue
|
|||||||
Parent.GetOriginMission().Accept();
|
Parent.GetOriginMission().Accept();
|
||||||
|
|
||||||
// show next panel if exists
|
// show next panel if exists
|
||||||
ShowNextPanel();
|
//ShowNextPanel();
|
||||||
|
// no we allow to decide programers which one use GoToNextSentence or ShowNextPanel
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -52,7 +53,6 @@ public class MissionDialogue : Dialogue
|
|||||||
Debug.Log("Handle Conditoion");
|
Debug.Log("Handle Conditoion");
|
||||||
var result = Parent.HanldeMissionStepCondition();
|
var result = Parent.HanldeMissionStepCondition();
|
||||||
|
|
||||||
Debug.Log(CurrentStep);
|
|
||||||
if (result) GoToNextSentence();
|
if (result) GoToNextSentence();
|
||||||
else BreakDialogueStep();
|
else BreakDialogueStep();
|
||||||
}
|
}
|
||||||
@ -68,5 +68,19 @@ public class MissionDialogue : Dialogue
|
|||||||
Parent.GetOriginMission().FinishMission();
|
Parent.GetOriginMission().FinishMission();
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Dialogue Status API
|
||||||
|
|
||||||
|
|
||||||
|
public void UpdateDialogueState(MissionDialogueData dialogueData)
|
||||||
|
{
|
||||||
|
CurrentStep = dialogueData.CurrentStep;
|
||||||
|
|
||||||
|
for (int i = 0; i < dialogueData.DialogueStepModelDataList.Count; i++)
|
||||||
|
{
|
||||||
|
DialogueSteps[i].WasDisplayed = dialogueData.DialogueStepModelDataList[i].WasDisplayed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,17 +5,12 @@ using System.Text;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
|
||||||
class CollectMissionCondition : MissionCondition
|
public class CollectMissionCondition : MissionCondition
|
||||||
{
|
{
|
||||||
public CollectMissionCondition()
|
public CollectMissionCondition() : base (MissionTypeEnum.Collect) {}
|
||||||
{
|
|
||||||
Type = MissionTypeEnum.Collect;
|
|
||||||
}
|
|
||||||
|
|
||||||
public CollectMissionCondition(MissionCondition missionCondition)
|
public CollectMissionCondition(MissionCondition missionCondition) : base (MissionTypeEnum.Collect)
|
||||||
{
|
{
|
||||||
Type = MissionTypeEnum.Collect;
|
|
||||||
|
|
||||||
// Convert base type Subject on specified sub-class (with own functions)
|
// Convert base type Subject on specified sub-class (with own functions)
|
||||||
RequiredElements.Clear();
|
RequiredElements.Clear();
|
||||||
foreach (RequiredSubject requiredSubject in missionCondition.RequiredElements)
|
foreach (RequiredSubject requiredSubject in missionCondition.RequiredElements)
|
||||||
|
@ -5,17 +5,12 @@ using System.Text;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
class KillMissionCondion : MissionCondition
|
public class KillMissionCondition : MissionCondition
|
||||||
{
|
{
|
||||||
public KillMissionCondion()
|
public KillMissionCondition() : base(MissionTypeEnum.Kill) { }
|
||||||
{
|
|
||||||
Type = MissionTypeEnum.Kill;
|
|
||||||
}
|
|
||||||
|
|
||||||
public KillMissionCondion(MissionCondition missionCondition)
|
public KillMissionCondition(MissionCondition missionCondition) : base(MissionTypeEnum.Kill)
|
||||||
{
|
{
|
||||||
Type = MissionTypeEnum.Kill;
|
|
||||||
|
|
||||||
// Convert base type Subject on specified sub-class (with own functions)
|
// Convert base type Subject on specified sub-class (with own functions)
|
||||||
RequiredElements.Clear();
|
RequiredElements.Clear();
|
||||||
foreach(RequiredSubject requiredSubject in missionCondition.RequiredElements)
|
foreach(RequiredSubject requiredSubject in missionCondition.RequiredElements)
|
@ -1,5 +1,5 @@
|
|||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: 65cb4fb8a7aa29641b4979c6ea2ad31f
|
guid: 99f1bc87bda30e042be2b016a67537f4
|
||||||
MonoImporter:
|
MonoImporter:
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
@ -14,7 +14,7 @@ public class MissionCondition
|
|||||||
[SerializeField]
|
[SerializeField]
|
||||||
public List<RequiredSubject> RequiredElements = new List<RequiredSubject>();
|
public List<RequiredSubject> RequiredElements = new List<RequiredSubject>();
|
||||||
|
|
||||||
public MissionCondition() { }
|
public MissionCondition(MissionTypeEnum type) { Type = type; }
|
||||||
|
|
||||||
public bool IsConditionMeeted()
|
public bool IsConditionMeeted()
|
||||||
{
|
{
|
||||||
@ -28,7 +28,7 @@ public class MissionCondition
|
|||||||
{
|
{
|
||||||
case MissionTypeEnum.Kill:
|
case MissionTypeEnum.Kill:
|
||||||
{
|
{
|
||||||
return new KillMissionCondion(this);
|
return new KillMissionCondition(this);
|
||||||
}
|
}
|
||||||
case MissionTypeEnum.Collect:
|
case MissionTypeEnum.Collect:
|
||||||
{
|
{
|
||||||
|
@ -1,8 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -13,6 +9,8 @@ public class CollectRequiredSubject : RequiredSubject
|
|||||||
{
|
{
|
||||||
protected override string MODEL_LOCALIZATION => "Items/";
|
protected override string MODEL_LOCALIZATION => "Items/";
|
||||||
|
|
||||||
|
public CollectRequiredSubject(int requiredAmount) : base(requiredAmount) { }
|
||||||
|
|
||||||
public CollectRequiredSubject(RequiredSubject requiredSubject) : base(requiredSubject.RequiredAmount, requiredSubject.RequiredObject) { }
|
public CollectRequiredSubject(RequiredSubject requiredSubject) : base(requiredSubject.RequiredAmount, requiredSubject.RequiredObject) { }
|
||||||
|
|
||||||
public CollectRequiredSubject(int requiredAmount, GameObject enemy) : base(requiredAmount, enemy) { }
|
public CollectRequiredSubject(int requiredAmount, GameObject enemy) : base(requiredAmount, enemy) { }
|
||||||
|
@ -6,7 +6,7 @@ using System.Threading.Tasks;
|
|||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
[Serializable]
|
[Serializable]
|
||||||
class KillRequiredSubject : RequiredSubject // Enemy - WTF is this class...
|
public class KillRequiredSubject : RequiredSubject // Enemy - WTF is this class...
|
||||||
{
|
{
|
||||||
protected override string MODEL_LOCALIZATION => "Enemies/";
|
protected override string MODEL_LOCALIZATION => "Enemies/";
|
||||||
|
|
||||||
@ -15,15 +15,18 @@ class KillRequiredSubject : RequiredSubject // Enemy - WTF is this class...
|
|||||||
|
|
||||||
public KillRequiredSubject(RequiredSubject requiredSubject) : base(requiredSubject.RequiredAmount, requiredSubject.RequiredObject) { }
|
public KillRequiredSubject(RequiredSubject requiredSubject) : base(requiredSubject.RequiredAmount, requiredSubject.RequiredObject) { }
|
||||||
|
|
||||||
public KillRequiredSubject(int requiredAmount, GameObject enemy) : base(requiredAmount, enemy) { }
|
public KillRequiredSubject(int requiredAmount, GameObject enemy, int currentAmount) : base(requiredAmount, enemy) { CurrentAmount = currentAmount; }
|
||||||
|
|
||||||
public KillRequiredSubject(int requiredAmount, string enemyName) : base(requiredAmount, enemyName) { }
|
public KillRequiredSubject(int requiredAmount, string enemyName, int currentAmount) : base(requiredAmount, enemyName) { CurrentAmount = currentAmount; }
|
||||||
|
|
||||||
|
public KillRequiredSubject(int requiredAmount, int currentAmount) : base(requiredAmount) { CurrentAmount = currentAmount; }
|
||||||
|
|
||||||
|
|
||||||
public void IncreaseAmount()
|
public void IncreaseAmount()
|
||||||
{
|
{
|
||||||
Debug.Log("IncreaseAmount");
|
Debug.Log("IncreaseAmount");
|
||||||
CurrentAmount += 1;
|
CurrentAmount += 1;
|
||||||
|
Debug.Log("New Amount: " + CurrentAmount);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void IncreaseAmount(int amount)
|
public void IncreaseAmount(int amount)
|
||||||
|
@ -16,6 +16,11 @@ public class RequiredSubject
|
|||||||
[SerializeField]
|
[SerializeField]
|
||||||
public GameObject RequiredObject;
|
public GameObject RequiredObject;
|
||||||
|
|
||||||
|
public RequiredSubject(int requiredAmount)
|
||||||
|
{
|
||||||
|
RequiredAmount = requiredAmount;
|
||||||
|
}
|
||||||
|
|
||||||
public RequiredSubject(int requiredAmount, GameObject _object)
|
public RequiredSubject(int requiredAmount, GameObject _object)
|
||||||
{
|
{
|
||||||
RequiredAmount = requiredAmount;
|
RequiredAmount = requiredAmount;
|
||||||
@ -25,7 +30,7 @@ public class RequiredSubject
|
|||||||
public RequiredSubject(int requiredAmount, string objectName)
|
public RequiredSubject(int requiredAmount, string objectName)
|
||||||
{
|
{
|
||||||
RequiredAmount = requiredAmount;
|
RequiredAmount = requiredAmount;
|
||||||
RequiredObject = MonoBehaviour.Instantiate(FindObjectInResource(objectName));
|
RequiredObject = FindObjectInResource(objectName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public GameObject FindObjectInResource(string modelName)
|
public GameObject FindObjectInResource(string modelName)
|
||||||
@ -33,10 +38,11 @@ public class RequiredSubject
|
|||||||
var resource = Resources.Load<GameObject>(MODEL_LOCALIZATION + modelName);
|
var resource = Resources.Load<GameObject>(MODEL_LOCALIZATION + modelName);
|
||||||
|
|
||||||
if (!resource)
|
if (!resource)
|
||||||
throw new System.Exception($"Resource {modelName} not found!!");
|
throw new System.Exception($"required Subject Resource {MODEL_LOCALIZATION + modelName} not found!!");
|
||||||
|
|
||||||
return resource;
|
return resource;
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual bool CheckCondition() { return false; }
|
public virtual bool CheckCondition() { return false; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,6 +41,8 @@ class ConditionManager : MonoBehaviour
|
|||||||
{
|
{
|
||||||
if(HasMissionActiveCondition(missionName))
|
if(HasMissionActiveCondition(missionName))
|
||||||
{
|
{
|
||||||
|
// Npc mission manager may try to register current condition - but player may have registered and saved it ealier
|
||||||
|
// and after loiading game system will read this condition and pass to list from memory files
|
||||||
Debug.LogError($"Mission '{missionName}' has currently active Condition");
|
Debug.LogError($"Mission '{missionName}' has currently active Condition");
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@ -52,8 +54,6 @@ class ConditionManager : MonoBehaviour
|
|||||||
conditionsToContinue
|
conditionsToContinue
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
Debug.Log("Condition registered :D");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -68,7 +68,7 @@ class ConditionManager : MonoBehaviour
|
|||||||
.Where(missionCondition => missionCondition.Type == MissionTypeEnum.Kill)
|
.Where(missionCondition => missionCondition.Type == MissionTypeEnum.Kill)
|
||||||
.ToList()
|
.ToList()
|
||||||
.ForEach(killCondition => killCondition.RequiredElements
|
.ForEach(killCondition => killCondition.RequiredElements
|
||||||
.Where(element => element.RequiredObject.name == objectName)
|
.Where(element => element.RequiredObject.GetComponent<Enemy>().MinionName == objectName)
|
||||||
.ToList()
|
.ToList()
|
||||||
.ForEach(element => ((KillRequiredSubject)element).IncreaseAmount())
|
.ForEach(element => ((KillRequiredSubject)element).IncreaseAmount())
|
||||||
);
|
);
|
||||||
@ -87,7 +87,7 @@ class ConditionManager : MonoBehaviour
|
|||||||
if(!HasMissionActiveCondition(missionName))
|
if(!HasMissionActiveCondition(missionName))
|
||||||
{
|
{
|
||||||
Debug.LogError($"Data inconsistency!!! Mission dont have any registered condition to check");
|
Debug.LogError($"Data inconsistency!!! Mission dont have any registered condition to check");
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int unmeetedConditions = Conditions
|
int unmeetedConditions = Conditions
|
||||||
|
@ -27,7 +27,7 @@ public class Mission : ScriptableObject
|
|||||||
public MissionStatusEnum Status = MissionStatusEnum.None;
|
public MissionStatusEnum Status = MissionStatusEnum.None;
|
||||||
|
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
int CurrentStep = 0;
|
public int CurrentStep = 0;
|
||||||
|
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
public List<MissionStepModel> MissionStepsList;
|
public List<MissionStepModel> MissionStepsList;
|
||||||
@ -54,7 +54,7 @@ public class Mission : ScriptableObject
|
|||||||
}*/
|
}*/
|
||||||
|
|
||||||
// Set by hand as mission condition as final astion specyfic step
|
// Set by hand as mission condition as final astion specyfic step
|
||||||
public void CheckMissionrequirements()
|
public void CheckMissionRequirements()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -181,7 +181,7 @@ public class Mission : ScriptableObject
|
|||||||
foreach (var MissionStep in MissionStepsList)
|
foreach (var MissionStep in MissionStepsList)
|
||||||
{
|
{
|
||||||
// jesli krok jest aktywny & ma niewypowiedziane zdania
|
// jesli krok jest aktywny & ma niewypowiedziane zdania
|
||||||
if ((MissionStep.Status == MissionStepStatusEnum.Active || MissionStep.Status == MissionStepStatusEnum.AfterCondition) && MissionStep.DialogueStep.GetCurrentStep().DialogueController.listOfDialogue.Count != 0)
|
if ((MissionStep.Status == MissionStepStatusEnum.Active || MissionStep.Status == MissionStepStatusEnum.AfterCondition) && MissionStep.DialogueStep.GetCurrentStep()?.DialogueController.listOfDialogue.Count != 0)
|
||||||
{
|
{
|
||||||
MissionStep.DialogueStep.StartDialogue();
|
MissionStep.DialogueStep.StartDialogue();
|
||||||
|
|
||||||
@ -267,6 +267,35 @@ public class Mission : ScriptableObject
|
|||||||
MissionStepsList[CurrentStep].ActivateStep();
|
MissionStepsList[CurrentStep].ActivateStep();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region Dialogue Status API
|
||||||
|
/// <summary>
|
||||||
|
/// Function to reset rememebered dialogue status
|
||||||
|
///
|
||||||
|
/// (Scriptable objects clones are overwritten during clone modification)
|
||||||
|
/// </summary>
|
||||||
|
public void ResetMission()
|
||||||
|
{
|
||||||
|
Status = MissionStatusEnum.None;
|
||||||
|
|
||||||
|
CurrentStep = 0;
|
||||||
|
|
||||||
|
MissionStepsList.ForEach(step => step.ResetMissionStep());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void UpdateMissionState(MissionData missionData)
|
||||||
|
{
|
||||||
|
// 1 Rule - speaker name shouldnt change !!! its our 'key'
|
||||||
|
|
||||||
|
Status = missionData.Status;
|
||||||
|
|
||||||
|
CurrentStep = missionData.CurrentStep;
|
||||||
|
|
||||||
|
for (int i = 0; i < missionData.MissionStepsDataList.Count; i++)
|
||||||
|
{
|
||||||
|
MissionStepsList[i].UpdateMissionStepState(missionData.MissionStepsDataList[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
public MissionStepModel GetCurrentStep()
|
public MissionStepModel GetCurrentStep()
|
||||||
{
|
{
|
||||||
|
@ -71,18 +71,13 @@ public class MissionStepModel
|
|||||||
|
|
||||||
RegisterCondition();
|
RegisterCondition();
|
||||||
|
|
||||||
|
((MissionDataManager)MissionDataManager.Instance).RegisterMission(MissionOrigin); // save mission status aftre each activating partial mission
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Condition Mangment section
|
#region Condition Mangment section
|
||||||
public void RegisterCondition()
|
public void RegisterCondition()
|
||||||
{
|
{
|
||||||
Debug.Log(MissionConditions);
|
|
||||||
Debug.Log(MissionConditions.Value[0].Type);
|
|
||||||
|
|
||||||
|
|
||||||
ConditionManager.Instance.RegisterCondition(MissionOrigin.MissionName, BuildConditionsList());
|
ConditionManager.Instance.RegisterCondition(MissionOrigin.MissionName, BuildConditionsList());
|
||||||
Debug.Log("Condition registered");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -137,6 +132,24 @@ public class MissionStepModel
|
|||||||
return ConditionManager.Instance.CheckCondition(MissionOrigin.MissionName);
|
return ConditionManager.Instance.CheckCondition(MissionOrigin.MissionName);
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Mission Status API
|
||||||
|
|
||||||
|
public void ResetMissionStep()
|
||||||
|
{
|
||||||
|
Status = MissionStepStatusEnum.None;
|
||||||
|
|
||||||
|
DialogueStep.ResetDialogue();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void UpdateMissionStepState(MissionStepData dialogueData)
|
||||||
|
{
|
||||||
|
// 1 Rule - speaker name shouldnt change !!! its our 'key'
|
||||||
|
Status = dialogueData.Status;
|
||||||
|
|
||||||
|
DialogueStep.UpdateDialogueState(dialogueData.MissionDialogueData);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -23,11 +23,36 @@ public class NpcMissionManager : DialogueManager // ScriptableObject
|
|||||||
//public List<IndexValuePair<IndexValuePair<int, int>, MissionCondition>> EndactionEventList;
|
//public List<IndexValuePair<IndexValuePair<int, int>, MissionCondition>> EndactionEventList;
|
||||||
|
|
||||||
|
|
||||||
public void Start()
|
public override void Start()
|
||||||
{
|
{
|
||||||
Mission = Instantiate(MissionTemplate);
|
base.Start();
|
||||||
Mission.SetSpeakerName(gameObject.GetComponent<NPC>().Name);
|
|
||||||
//Mission.BuildMission();
|
CanBeOpened = false;
|
||||||
|
OpenInDefaultWay = false;
|
||||||
|
|
||||||
|
CreateInstanceBasedOnLanguage();
|
||||||
|
|
||||||
|
|
||||||
|
// UPDATE DIALOGUE
|
||||||
|
// search in scene manager list
|
||||||
|
if (Mission != null)
|
||||||
|
{
|
||||||
|
var machedDialogueData = ((MissionDataManager)MissionDataManager.Instance).GetMission(Mission);
|
||||||
|
|
||||||
|
if (machedDialogueData != null)
|
||||||
|
{
|
||||||
|
UpdateMissionState(machedDialogueData);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.Log("Start - UpdateProggres");
|
||||||
|
UpdateProggres();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Mission.BuildMission();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (FreeDialogue != null)
|
if (FreeDialogue != null)
|
||||||
FreeDialogue.Build();
|
FreeDialogue.Build();
|
||||||
@ -45,8 +70,6 @@ public class NpcMissionManager : DialogueManager // ScriptableObject
|
|||||||
{
|
{
|
||||||
CanBeOpened = true;
|
CanBeOpened = true;
|
||||||
|
|
||||||
SpeakerName = collision.gameObject.name;
|
|
||||||
|
|
||||||
Mission.StartDialogue();
|
Mission.StartDialogue();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -61,29 +84,56 @@ public class NpcMissionManager : DialogueManager // ScriptableObject
|
|||||||
{
|
{
|
||||||
CanBeOpened = false;
|
CanBeOpened = false;
|
||||||
|
|
||||||
if (GetCurrentDialoguePanelStatus())
|
if (Mission != null && GetCurrentDialoguePanelStatus())
|
||||||
{
|
{
|
||||||
Debug.Log("BreakDialogueStep");
|
/* Debug.Log("BreakDialogueStep");
|
||||||
Mission.BreakDialogueStep();
|
*/ Mission.BreakDialogueStep();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void CreateInstanceBasedOnLanguage()
|
||||||
|
{
|
||||||
|
// DONT CLONE TO HAVE CONSTANT DATA - init - deep copy - to prevent overwritting chil;dern :D
|
||||||
|
Mission = MissionTemplate;
|
||||||
|
|
||||||
/* public void Talk()
|
Mission.ResetMission();
|
||||||
|
/* var cloneDialogues = new List<IndexValuePair<int, Dialogue>>(Dialogue.Dialogues);
|
||||||
|
|
||||||
|
Dialogue.Dialogues.Clear();
|
||||||
|
foreach (var dial in cloneDialogues)
|
||||||
{
|
{
|
||||||
if (Mission == null || Mission.Status == MissionStatusEnum.Finished)
|
Dialogue.Dialogues.Add(new IndexValuePair<int, Dialogue>(dial.Key, Instantiate(dial.Value)));
|
||||||
{
|
}*/
|
||||||
// show free dialogue
|
|
||||||
//if(FreeDialogue != null)
|
Mission.SetSpeakerName(gameObject.GetComponent<NPC>().Name);
|
||||||
//FreeDialogue.DialogueController.
|
|
||||||
} else
|
// update dial state - sync in order to prepare to save
|
||||||
{
|
Mission.MissionStepsList.ForEach(dial => dial.DialogueStep.SetActionAfterEachDialogueStep(UpdateProggres));
|
||||||
// continue mission
|
|
||||||
Mission.StartDialogue();
|
// Add one more action - to reset proggress
|
||||||
|
//Dialogue.Dialogues.ForEach(dial => dial.Value.SetActionAfterEachDialogueStep(dial.Value.ResetDialogue)); // reset dial
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void UpdateMissionState(MissionData missionState)
|
||||||
|
{
|
||||||
|
// 1 Rule - speaker name shouldnt change !!! its our 'key'
|
||||||
|
|
||||||
|
Mission.UpdateMissionState(missionState);
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
/// <summary>
|
||||||
|
/// Function to sync local dialogue state with remote one
|
||||||
|
/// Handled in Scene Manager
|
||||||
|
/// </summary>
|
||||||
|
public void UpdateProggres()
|
||||||
|
{
|
||||||
|
((MissionDataManager)MissionDataManager.Instance).RegisterMission(Mission);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
protected override bool ComponentEnabledCondition()
|
protected override bool ComponentEnabledCondition()
|
||||||
{
|
{
|
||||||
return !gameObject.GetComponent<NpcMissionManager>().enabled;
|
return !gameObject.GetComponent<NpcMissionManager>().enabled;
|
||||||
@ -91,24 +141,11 @@ public class NpcMissionManager : DialogueManager // ScriptableObject
|
|||||||
|
|
||||||
public override bool GetCurrentDialoguePanelStatus()
|
public override bool GetCurrentDialoguePanelStatus()
|
||||||
{
|
{
|
||||||
Debug.Log(Mission
|
|
||||||
.GetCurrentStep()
|
|
||||||
.DialogueStep.CurrentStep
|
|
||||||
);
|
|
||||||
|
|
||||||
Debug.Log(Mission
|
|
||||||
.GetCurrentStep()
|
|
||||||
.DialogueStep
|
|
||||||
.GetCurrentStep()
|
|
||||||
.DialogueController
|
|
||||||
.CurrentPanel
|
|
||||||
);
|
|
||||||
|
|
||||||
return Mission
|
return Mission
|
||||||
.GetCurrentStep()
|
.GetCurrentStep()
|
||||||
.DialogueStep
|
.DialogueStep
|
||||||
.GetCurrentStep() // ?
|
.GetCurrentStep()
|
||||||
.DialogueController
|
?.DialogueController
|
||||||
.CurrentPanel != null;
|
.CurrentPanel != null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 980c28d408eb117438efae51b5d2a416
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,22 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
|
||||||
|
public class MissionConditionDataListManager : DataListManager<IndexValuePair<string, List<MissionConditionData>>>
|
||||||
|
{
|
||||||
|
// WE DONT NEED HERE UI MANAGER - because dialoges ane;t associated with ui panels in way like inventory / chest or shop
|
||||||
|
|
||||||
|
public override void AddElementToList(IndexValuePair<string, List<MissionConditionData>> newElement)
|
||||||
|
{
|
||||||
|
Elements.Add(newElement);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void RemoveElementFromList(IndexValuePair<string, List<MissionConditionData>> element)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,5 +1,5 @@
|
|||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: 439e1e19b22afd4478b4c1151588c35b
|
guid: 8d515fca317b6ce4882ed8be7036497a
|
||||||
MonoImporter:
|
MonoImporter:
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
@ -0,0 +1,42 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
|
||||||
|
class MissionConditionDataLoader : SceneBaseDataLoader<IndexValuePair<string, List<MissionConditionData>>>
|
||||||
|
{
|
||||||
|
public MissionConditionDataLoader(string _objectListName, string _objectFolderName)
|
||||||
|
{
|
||||||
|
SaveModelSystem = new SaveMissionConditionManager();
|
||||||
|
SaveModelSystem.ObjectFolderName = _objectFolderName;
|
||||||
|
SaveModelSystem.ObjectListName = _objectListName;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override List<IndexValuePair<string, List<MissionConditionData>>> LoadDynamicData()
|
||||||
|
{
|
||||||
|
SaveModelSystem.Path = PathBuilder.BuildSavePath().GetString();
|
||||||
|
|
||||||
|
return SaveModelSystem.LoadModelList();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override bool SaveDynamicData(List<IndexValuePair<string, List<MissionConditionData>>> _elements)
|
||||||
|
{
|
||||||
|
SaveModelSystem.Path = PathBuilder.BuildSavePath().GetString();
|
||||||
|
|
||||||
|
return base.SaveDynamicData(_elements);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override List<IndexValuePair<string, List<MissionConditionData>>> LoadGenericData()
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override bool SaveGenericData(List<IndexValuePair<string, List<MissionConditionData>>> _elements)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 51a727db7d9c63642b9eb8e111adcc29
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,114 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
[RequireComponent(typeof(ConditionManager))]
|
||||||
|
class MissionConditionDataManager : SceneBaseDataManager<IndexValuePair<string, List<MissionConditionData>>>
|
||||||
|
{
|
||||||
|
protected override string OBJECT_FOLDER_NAME { get { return "MissionCondition"; } }
|
||||||
|
|
||||||
|
protected override string OBJECT_LIST_NAME { get { return "MissionsConditionsList"; } }
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
public List<IndexValuePair<string, List<MissionConditionData>>> MissionConditionDataList;
|
||||||
|
|
||||||
|
public override void Awake()
|
||||||
|
{
|
||||||
|
if (Instance == null)
|
||||||
|
{
|
||||||
|
Instance = this;
|
||||||
|
|
||||||
|
// moved from start beacuse we need to prepare env before NpcMissionmanager start registering and uipdating mission model
|
||||||
|
Debug.Log("Start Mission manager");
|
||||||
|
|
||||||
|
DynamicDataList = new MissionConditionDataListManager();
|
||||||
|
|
||||||
|
DataLoader = new MissionConditionDataLoader(OBJECT_LIST_NAME, OBJECT_FOLDER_NAME);
|
||||||
|
|
||||||
|
base.Start(); // (afterStart invoking - to load saved data)
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Destroy(gameObject);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ZMIANA KONCEPCJI
|
||||||
|
// ZMIAST TRZYMAC SUROWE OBIEKTY TYM RAZEM ZAPISUJMY modele Datai updatujmy obiket w NPC Managerze
|
||||||
|
|
||||||
|
// nadpisujemy by nir duplikowac wywoałania i nadpisyuwanie MissionDataList z Awake
|
||||||
|
public override void Start()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected override void AfterStart()
|
||||||
|
{
|
||||||
|
if (OnMapAppearanceMethod.GameStatus == GameStatus.NewGame)
|
||||||
|
{
|
||||||
|
if (OnMapAppearanceMethod.Gateway != OnMapAppearanceMethodEnum.NewGame)
|
||||||
|
UseDynamicSettings(); // if there is nothing saved we will use UseDefaultSettings
|
||||||
|
else
|
||||||
|
UseDefaultSettings();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UseDynamicSettings();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
protected override void UseDefaultSettings()
|
||||||
|
{
|
||||||
|
DynamicDataList.SetList(new List<IndexValuePair<string, List<MissionConditionData>>>());
|
||||||
|
|
||||||
|
MissionConditionDataList = DynamicDataList.GetList();
|
||||||
|
|
||||||
|
gameObject.GetComponent<ConditionManager>().Conditions = SaveMissionConditionManager.ConvertListOfDataModelsToListOfObject(MissionConditionDataList);
|
||||||
|
// we dont need to convert anything
|
||||||
|
// Instead of build elements on scene we collect shops distracted on scene from npc's
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void UseDynamicSettings()
|
||||||
|
{
|
||||||
|
// when chest detect player in near arrea and player press "c"
|
||||||
|
// open panel -> chest controller handle Open panel in Scene Chest Manager passing info about what Chest Palyer want to open
|
||||||
|
// Manager Build panel and pass info about chest content
|
||||||
|
LoadDynamicData();
|
||||||
|
|
||||||
|
|
||||||
|
// VERy VERY provisional SOLUTION
|
||||||
|
if (DynamicDataList.GetList().Count == 0)
|
||||||
|
{
|
||||||
|
UseDefaultSettings();
|
||||||
|
}
|
||||||
|
|
||||||
|
MissionConditionDataList = DynamicDataList.GetList();
|
||||||
|
|
||||||
|
// map data to model
|
||||||
|
gameObject.GetComponent<ConditionManager>().Conditions = SaveMissionConditionManager.ConvertListOfDataModelsToListOfObject(MissionConditionDataList);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* public MissionConditionData? GetMissionCondition(MissionCondition newMission)
|
||||||
|
{
|
||||||
|
return DynamicDataList.GetList().Where(mission => mission.SpeakerName == newMission.SpeakerName && mission.MissionName == newMission.MissionName).FirstOrDefault();
|
||||||
|
}*/
|
||||||
|
|
||||||
|
public override bool SaveDynamicData()
|
||||||
|
{
|
||||||
|
// fill local list by elements from ConditionManager list
|
||||||
|
MissionConditionDataList.Clear();
|
||||||
|
|
||||||
|
MissionConditionDataList = SaveMissionConditionManager.ConvertObjectsListToListOfDataModels(ConditionManager.Instance.Conditions);
|
||||||
|
|
||||||
|
return SaveData(MissionConditionDataList, SceneElementTypeEnum.Dynamic);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: f16469a3a30fc8f43bec2fb2eeedd293
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,125 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Runtime.Serialization.Formatters.Binary;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
class SaveMissionConditionManager : SaveModelSystem<IndexValuePair<string, List<MissionConditionData>>> // TODO change MissionConditionData
|
||||||
|
{
|
||||||
|
public override bool SaveModelItem(IndexValuePair<string, List<MissionConditionData>> model)
|
||||||
|
{
|
||||||
|
return base.SaveModelItem(model);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool SaveModelList(List<IndexValuePair<string, List<MissionConditionData>>> list)
|
||||||
|
{
|
||||||
|
BinaryFormatter formatter = new BinaryFormatter();
|
||||||
|
|
||||||
|
Debug.Log("Saved Mision Condition list at " + Path);
|
||||||
|
|
||||||
|
if (!Directory.Exists(Path)) Directory.CreateDirectory(Path);
|
||||||
|
|
||||||
|
/* Main logic of conversion data format */
|
||||||
|
var data = list; // ConvertObjectsListToListOfDataModels(list);
|
||||||
|
|
||||||
|
FileStream stream = new FileStream(
|
||||||
|
Path + GetFileName(ObjectListName),
|
||||||
|
FileMode.Create
|
||||||
|
);
|
||||||
|
|
||||||
|
formatter.Serialize(stream, data);
|
||||||
|
stream.Close();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override IndexValuePair<string, List<MissionConditionData>> LoadModelItem()
|
||||||
|
{
|
||||||
|
return base.LoadModelItem();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override List<IndexValuePair<string, List<MissionConditionData>>> LoadModelList()
|
||||||
|
{
|
||||||
|
string path = Path + GetFileName(ObjectListName);
|
||||||
|
|
||||||
|
if (File.Exists(path))
|
||||||
|
{
|
||||||
|
BinaryFormatter formatter = new BinaryFormatter();
|
||||||
|
FileStream stream = new FileStream(path, FileMode.Open);
|
||||||
|
|
||||||
|
List<IndexValuePair<string, List<MissionConditionData>>> missionsList = formatter.Deserialize(stream) as List<IndexValuePair<string, List<MissionConditionData>>>;
|
||||||
|
stream.Close();
|
||||||
|
|
||||||
|
return missionsList; // ConvertListOfDataModelsToListOfObject(questsList);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.Log("Save file not found in " + path);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new List<IndexValuePair<string, List<MissionConditionData>>>();
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------- USELLES IN THIS CLASS -----------------
|
||||||
|
#region unused
|
||||||
|
// Support function
|
||||||
|
|
||||||
|
// 1. From model to data format
|
||||||
|
|
||||||
|
public static MissionConditionData ConvertObjectToDataModel(MissionCondition model)
|
||||||
|
{
|
||||||
|
return MissionConditionData.Build(model);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<IndexValuePair<string, List<MissionConditionData>>> ConvertObjectsListToListOfDataModels(List<IndexValuePair<string, List<MissionCondition>>> modelsList)
|
||||||
|
{
|
||||||
|
List<IndexValuePair<string, List<MissionConditionData>>> convertedList = new List<IndexValuePair<string, List<MissionConditionData>>>();
|
||||||
|
|
||||||
|
foreach (IndexValuePair<string, List<MissionCondition>> dataModel in modelsList)
|
||||||
|
{
|
||||||
|
IndexValuePair<string, List<MissionConditionData>> conditionsForMapList = new IndexValuePair<string, List<MissionConditionData>>(dataModel.Key, new List<MissionConditionData>());
|
||||||
|
|
||||||
|
foreach (MissionCondition condition in dataModel.Value)
|
||||||
|
{
|
||||||
|
conditionsForMapList.Value.Add(
|
||||||
|
ConvertObjectToDataModel(condition)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
convertedList.Add(conditionsForMapList);
|
||||||
|
}
|
||||||
|
|
||||||
|
return convertedList;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. From data to model format
|
||||||
|
public static MissionCondition ConvertDataModelToObject(MissionConditionData dataModel)
|
||||||
|
{
|
||||||
|
return dataModel.MapDataToObject();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<IndexValuePair<string, List<MissionCondition>>> ConvertListOfDataModelsToListOfObject(List<IndexValuePair<string, List<MissionConditionData>>> dataModelsList)
|
||||||
|
{
|
||||||
|
List<IndexValuePair<string, List<MissionCondition>>> conditioncConvertedList = new List<IndexValuePair<string, List<MissionCondition>>>();
|
||||||
|
|
||||||
|
foreach (IndexValuePair<string, List<MissionConditionData>> dataModel in dataModelsList)
|
||||||
|
{
|
||||||
|
IndexValuePair<string, List<MissionCondition>> conditionsForMapList = new IndexValuePair<string, List<MissionCondition>>(dataModel.Key, new List<MissionCondition>());
|
||||||
|
|
||||||
|
foreach (MissionConditionData condition in dataModel.Value)
|
||||||
|
{
|
||||||
|
conditionsForMapList.Value.Add(
|
||||||
|
ConvertDataModelToObject(condition)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
conditioncConvertedList.Add(conditionsForMapList);
|
||||||
|
}
|
||||||
|
|
||||||
|
return conditioncConvertedList;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: c2634054ce8ca494fb0c9a5363223117
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,21 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
class MissionDataListManager : DataListManager<MissionData>
|
||||||
|
{
|
||||||
|
// WE DONT NEED HERE UI MANAGER - because dialoges ane;t associated with ui panels in way like inventory / chest or shop
|
||||||
|
|
||||||
|
public override void AddElementToList(MissionData newElement)
|
||||||
|
{
|
||||||
|
Elements.Add(newElement);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void RemoveElementFromList(MissionData element)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 0869a13ed3dcbe94e9ea9ea5356913a1
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,39 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEditor;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
class MissionDataLoader : SceneBaseDataLoader<MissionData>
|
||||||
|
{
|
||||||
|
public MissionDataLoader(string _objectListName, string _objectFolderName)
|
||||||
|
{
|
||||||
|
SaveModelSystem = new SaveMissionManager();
|
||||||
|
SaveModelSystem.ObjectFolderName = _objectFolderName;
|
||||||
|
SaveModelSystem.ObjectListName = _objectListName;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override List<MissionData> LoadDynamicData()
|
||||||
|
{
|
||||||
|
SaveModelSystem.Path = PathBuilder.BuildSavePath().WithMap(CurrentMap).WithDataType(SceneElementTypeEnum.Dynamic).GetString();
|
||||||
|
|
||||||
|
return SaveModelSystem.LoadModelList();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override bool SaveDynamicData(List<MissionData> _elements)
|
||||||
|
{
|
||||||
|
SaveModelSystem.Path = PathBuilder.BuildSavePath().WithMap(CurrentMap).WithDataType(SceneElementTypeEnum.Dynamic).GetString();
|
||||||
|
|
||||||
|
return base.SaveDynamicData(_elements);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override List<MissionData> LoadGenericData()
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override bool SaveGenericData(List<MissionData> _elements)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 6f38b619116e96a4fb4f31949ad37365
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,146 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.SceneManagement;
|
||||||
|
|
||||||
|
class MissionDataManager : SceneBaseDataManager<MissionData>
|
||||||
|
{
|
||||||
|
protected override string OBJECT_FOLDER_NAME { get { return "Mission"; } }
|
||||||
|
protected override string OBJECT_LIST_NAME { get { return "MissionsList"; } }
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
public List<MissionData> MissionDataList;
|
||||||
|
|
||||||
|
public override void Awake()
|
||||||
|
{
|
||||||
|
if (Instance == null)
|
||||||
|
{
|
||||||
|
Instance = this;
|
||||||
|
|
||||||
|
// moved from start beacuse we need to prepare env before NpcMissionmanager start registering and uipdating mission model
|
||||||
|
Debug.Log("Start Mission manager");
|
||||||
|
|
||||||
|
DynamicDataList = new MissionDataListManager();
|
||||||
|
|
||||||
|
DataLoader = new MissionDataLoader(OBJECT_LIST_NAME, OBJECT_FOLDER_NAME);
|
||||||
|
|
||||||
|
base.Start(); // (afterStart invoking - to load saved data)
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Destroy(gameObject);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ZMIANA KONCEPCJI
|
||||||
|
// ZMIAST TRZYMAC SUROWE OBIEKTY TYM RAZEM ZAPISUJMY modele Datai updatujmy obiket w NPC Managerze
|
||||||
|
|
||||||
|
// nadpisujemy by nir duplikowac wywoałania i nadpisyuwanie MissionDataList z Awake
|
||||||
|
public override void Start()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected override void AfterStart()
|
||||||
|
{
|
||||||
|
if (OnMapAppearanceMethod.GameStatus == GameStatus.NewGame)
|
||||||
|
{
|
||||||
|
if (OnMapAppearanceMethod.Gateway != OnMapAppearanceMethodEnum.NewGame)
|
||||||
|
UseDynamicSettings(); // if there is nothing saved we will use UseDefaultSettings
|
||||||
|
else
|
||||||
|
UseDefaultSettings();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UseDynamicSettings();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected SceneBaseDataManager<MissionData> GetObjectType()
|
||||||
|
{
|
||||||
|
return GameObject.FindObjectOfType<MissionDataManager>();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected SceneBaseDataManager<MissionData> CreateInstance(ref GameObject managerGameObject)
|
||||||
|
{
|
||||||
|
return managerGameObject.AddComponent<MissionDataManager>();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
protected override void UseDefaultSettings()
|
||||||
|
{
|
||||||
|
DynamicDataList.SetList(new List<MissionData>());
|
||||||
|
|
||||||
|
MissionDataList = DynamicDataList.GetList();
|
||||||
|
|
||||||
|
// we dont need to convert anything
|
||||||
|
// Instead of build elements on scene we collect shops distracted on scene from npc's
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void UseDynamicSettings()
|
||||||
|
{
|
||||||
|
// when chest detect player in near arrea and player press "c"
|
||||||
|
// open panel -> chest controller handle Open panel in Scene Chest Manager passing info about what Chest Palyer want to open
|
||||||
|
// Manager Build panel and pass info about chest content
|
||||||
|
Debug.Log("UseDynamicSettings");
|
||||||
|
LoadDynamicData();
|
||||||
|
|
||||||
|
|
||||||
|
// VERy VERY provisional SOLUTION
|
||||||
|
if (DynamicDataList.GetList().Count == 0)
|
||||||
|
{
|
||||||
|
UseDefaultSettings();
|
||||||
|
}
|
||||||
|
|
||||||
|
MissionDataList = DynamicDataList.GetList();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void RegisterMission(Mission newMission)
|
||||||
|
{
|
||||||
|
if (DynamicDataList.GetList().Where(mission => mission.SpeakerName == newMission.SpeakerName && mission.MissionName == newMission.MissionName).Any())
|
||||||
|
{
|
||||||
|
// if dial is already registered - update it
|
||||||
|
UpdateMission(newMission);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var misssionData = SaveMissionManager.ConvertObjectToDataModel(newMission);
|
||||||
|
|
||||||
|
//DynamicDataList.AddElementToList(multiDialogueData); - nie dodwaca bo modyfikacja jednej duplikuje
|
||||||
|
MissionDataList.Add(misssionData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// update proggress in dialogue - BUT FUNCTION BELOW SYNCH THIS ALREADY righhr???
|
||||||
|
public void UpdateMission(Mission newMission)
|
||||||
|
{
|
||||||
|
if (!DynamicDataList.GetList().Where(mission => mission.SpeakerName == newMission.SpeakerName && mission.MissionName == newMission.MissionName).Any())
|
||||||
|
Debug.LogError($"There is no registered dialoge like {newMission.SpeakerName}");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var missionData = SaveMissionManager.ConvertObjectToDataModel(newMission);
|
||||||
|
|
||||||
|
|
||||||
|
MissionDataList.RemoveAll(mission => mission.SpeakerName == newMission.SpeakerName && mission.MissionName == newMission.MissionName);
|
||||||
|
|
||||||
|
// duplicated from registerDialogue
|
||||||
|
MissionDataList.Add(missionData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public MissionData? GetMission(Mission newMission)
|
||||||
|
{
|
||||||
|
return DynamicDataList.GetList().Where(mission => mission.SpeakerName == newMission.SpeakerName && mission.MissionName == newMission.MissionName).FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool SaveDynamicData()
|
||||||
|
{
|
||||||
|
return SaveData(MissionDataList, SceneElementTypeEnum.Dynamic);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: b1278ade00000f84ba28d4671ff3f7f9
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -4,14 +4,14 @@ using System.Runtime.Serialization.Formatters.Binary;
|
|||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
|
|
||||||
class SaveMissionManager : SaveModelSystem<Mission>
|
class SaveMissionManager : SaveModelSystem<MissionData>
|
||||||
{
|
{
|
||||||
public override bool SaveModelItem(Mission model)
|
public override bool SaveModelItem(MissionData model)
|
||||||
{
|
{
|
||||||
return base.SaveModelItem(model);
|
return base.SaveModelItem(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool SaveModelList(List<Mission> list)
|
public override bool SaveModelList(List<MissionData> list)
|
||||||
{
|
{
|
||||||
BinaryFormatter formatter = new BinaryFormatter();
|
BinaryFormatter formatter = new BinaryFormatter();
|
||||||
|
|
||||||
@ -20,7 +20,7 @@ class SaveMissionManager : SaveModelSystem<Mission>
|
|||||||
if (!Directory.Exists(Path)) Directory.CreateDirectory(Path);
|
if (!Directory.Exists(Path)) Directory.CreateDirectory(Path);
|
||||||
|
|
||||||
/* Main logic of conversion data format */
|
/* Main logic of conversion data format */
|
||||||
var data = ConvertObjectsListToListOfDataModels(list);
|
var data = list; // ConvertObjectsListToListOfDataModels(list);
|
||||||
|
|
||||||
FileStream stream = new FileStream(
|
FileStream stream = new FileStream(
|
||||||
Path + GetFileName(ObjectListName),
|
Path + GetFileName(ObjectListName),
|
||||||
@ -33,12 +33,12 @@ class SaveMissionManager : SaveModelSystem<Mission>
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override Mission LoadModelItem()
|
public override MissionData LoadModelItem()
|
||||||
{
|
{
|
||||||
return base.LoadModelItem();
|
return base.LoadModelItem();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override List<Mission> LoadModelList()
|
public override List<MissionData> LoadModelList()
|
||||||
{
|
{
|
||||||
string path = Path + GetFileName(ObjectListName);
|
string path = Path + GetFileName(ObjectListName);
|
||||||
|
|
||||||
@ -47,25 +47,27 @@ class SaveMissionManager : SaveModelSystem<Mission>
|
|||||||
BinaryFormatter formatter = new BinaryFormatter();
|
BinaryFormatter formatter = new BinaryFormatter();
|
||||||
FileStream stream = new FileStream(path, FileMode.Open);
|
FileStream stream = new FileStream(path, FileMode.Open);
|
||||||
|
|
||||||
List<MissionData> questsList = formatter.Deserialize(stream) as List<MissionData>;
|
List<MissionData> missionsList = formatter.Deserialize(stream) as List<MissionData>;
|
||||||
stream.Close();
|
stream.Close();
|
||||||
|
|
||||||
return ConvertListOfDataModelsToListOfObject(questsList);
|
return missionsList; // ConvertListOfDataModelsToListOfObject(questsList);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Debug.Log("Save file not found in " + path);
|
Debug.Log("Save file not found in " + path);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new List<Mission>();
|
return new List<MissionData>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ----------------- USELLES IN THIS CLASS -----------------
|
||||||
|
#region unused
|
||||||
// Support function
|
// Support function
|
||||||
|
|
||||||
// 1. From model to data format
|
// 1. From model to data format
|
||||||
public static MissionData ConvertObjectToDataModel(Mission model)
|
public static MissionData ConvertObjectToDataModel(Mission model)
|
||||||
{
|
{
|
||||||
return new MissionData(); //model
|
return new MissionData(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<MissionData> ConvertObjectsListToListOfDataModels(List<Mission> modelsList)
|
public static List<MissionData> ConvertObjectsListToListOfDataModels(List<Mission> modelsList)
|
||||||
@ -97,4 +99,5 @@ class SaveMissionManager : SaveModelSystem<Mission>
|
|||||||
|
|
||||||
return convertedList;
|
return convertedList;
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
|
@ -31,8 +31,10 @@ public class PlayerActions : MonoBehaviour
|
|||||||
Debug.Log($"Give reward - {reward.Cash}");
|
Debug.Log($"Give reward - {reward.Cash}");
|
||||||
|
|
||||||
// 3. Save changes
|
// 3. Save changes
|
||||||
GameObject.FindObjectOfType<SaveController>().SavePlayerEquipmentItems();
|
// TODO - sync saving process reward / mission proggress
|
||||||
GameObject.FindObjectOfType<SaveController>().SavePlayerInventory();
|
// currently its saving only after changing scene and saving manually by player
|
||||||
GameObject.FindObjectOfType<SaveController>().SaveAccountBalance();
|
//GameObject.FindObjectOfType<SaveController>().SavePlayerEquipmentItems();
|
||||||
|
//GameObject.FindObjectOfType<SaveController>().SavePlayerInventory();
|
||||||
|
//GameObject.FindObjectOfType<SaveController>().SaveAccountBalance();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -154,7 +154,6 @@ public abstract class SceneBaseDataManager<T> : MonoBehaviour
|
|||||||
// approach:
|
// approach:
|
||||||
// 1. get from outside, update local list && us it
|
// 1. get from outside, update local list && us it
|
||||||
// 2. Handle list synchronized all the time & pass local list
|
// 2. Handle list synchronized all the time & pass local list
|
||||||
Debug.Log(DynamicDataList.GetList());
|
|
||||||
return SaveData(DynamicDataList.GetList(), SceneElementTypeEnum.Dynamic);
|
return SaveData(DynamicDataList.GetList(), SceneElementTypeEnum.Dynamic);
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -86,9 +86,9 @@ public abstract class DraggablePanelController : PanelController<IndexValuePair<
|
|||||||
|
|
||||||
// TODO insert child criterials
|
// TODO insert child criterials
|
||||||
|
|
||||||
//draggedSlot.Item = (EquippableItem)new Item("test", "test desc", 1, null, null);
|
|
||||||
|
|
||||||
EquippableItem tmpDraggedItem = draggedSlot.Item == null ? null : new EquippableItem(draggedSlot.Item); // InventoryUIManager.Instance.DraggedSlot.Item; // remember temporary currently dragged item
|
EquippableItem tmpDraggedItem = draggedSlot.Item == null ? null : new EquippableItem(draggedSlot.Item); // InventoryUIManager.Instance.DraggedSlot.Item; // remember temporary currently dragged item
|
||||||
|
|
||||||
UiManager.Add(new IndexValuePair<int, EquippableItem>(dropItemSlot.Number, tmpDraggedItem));
|
UiManager.Add(new IndexValuePair<int, EquippableItem>(dropItemSlot.Number, tmpDraggedItem));
|
||||||
|
|
||||||
// !!! remember item from dropped position to future operation !!!
|
// !!! remember item from dropped position to future operation !!!
|
||||||
|
@ -28,7 +28,6 @@ public abstract class WarehousePanelController : DraggablePanelController
|
|||||||
|
|
||||||
public override void DoubleLeftMouseClick(ItemSlot itemSlot)
|
public override void DoubleLeftMouseClick(ItemSlot itemSlot)
|
||||||
{
|
{
|
||||||
Debug.Log("Used item");
|
|
||||||
if(AllowToUseItemInPanel)
|
if(AllowToUseItemInPanel)
|
||||||
{
|
{
|
||||||
ItemEffectsManager.Instance.UseItemEffect(itemSlot, Type);
|
ItemEffectsManager.Instance.UseItemEffect(itemSlot, Type);
|
||||||
|
@ -219,7 +219,6 @@ public abstract class UIBaseManager<T> : MonoBehaviour, ManagerInterface<T>
|
|||||||
public void Add(T model)
|
public void Add(T model)
|
||||||
{
|
{
|
||||||
// throw new System.NotImplementedException();
|
// throw new System.NotImplementedException();
|
||||||
|
|
||||||
Elements.Add(model);
|
Elements.Add(model);
|
||||||
|
|
||||||
UpdateList();
|
UpdateList();
|
||||||
|
@ -59,7 +59,11 @@ public abstract class UIWarehouseManager : UISlotPanelManager<IndexValuePair<int
|
|||||||
public virtual void Add(EquippableItem item)
|
public virtual void Add(EquippableItem item)
|
||||||
{
|
{
|
||||||
if(IsFull())
|
if(IsFull())
|
||||||
throw new System.Exception($"Warehouse is full!!!");
|
{
|
||||||
|
Debug.Log($"Warehouse is full!");
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// find first empty position / slot
|
// find first empty position / slot
|
||||||
var max = 0;
|
var max = 0;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
interface IModelMapper<T>
|
public interface IModelMapper<T>
|
||||||
{
|
{
|
||||||
public abstract T MapDataToObject(string prefarbAssetName);
|
public abstract T MapDataToObject(string prefarbAssetName);
|
||||||
|
|
||||||
|
@ -89,8 +89,8 @@ public class EquipmentUIManager : UIWarehouseManager
|
|||||||
if (!CheckIfSlotExists(keyPosition))
|
if (!CheckIfSlotExists(keyPosition))
|
||||||
return; // throw new System.Exception($"Slot with number: {keyPosition} don't exist");
|
return; // throw new System.Exception($"Slot with number: {keyPosition} don't exist");
|
||||||
|
|
||||||
Debug.Log($"Remove from position: {keyPosition}");
|
/* Debug.Log($"Remove from position: {keyPosition}");
|
||||||
|
*/
|
||||||
|
|
||||||
Elements.RemoveAll(equipment => equipment.Key == keyPosition);
|
Elements.RemoveAll(equipment => equipment.Key == keyPosition);
|
||||||
Elements.Add(new IndexValuePair<int, EquippableItem>(keyPosition, null));
|
Elements.Add(new IndexValuePair<int, EquippableItem>(keyPosition, null));
|
||||||
|
8
Assets/Scripts/REFACTORING/Models/Mission/Condition.meta
Normal file
8
Assets/Scripts/REFACTORING/Models/Mission/Condition.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 1da99894524baa749b93f9f38ff2acac
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,40 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Globalization;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
|
||||||
|
[Serializable]
|
||||||
|
public class CollectMissionConditionData : MissionConditionData
|
||||||
|
{
|
||||||
|
public CollectMissionConditionData(MissionCondition missionCondition) : base(missionCondition.Type)
|
||||||
|
{
|
||||||
|
RequiredElements.Clear();
|
||||||
|
|
||||||
|
foreach (RequiredSubject requiredSubject in missionCondition.RequiredElements)
|
||||||
|
{
|
||||||
|
RequiredElements.Add(new CollectRequiredSubjectData((CollectRequiredSubject)requiredSubject));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override MissionCondition MapDataToObject(string prefarbAssetName)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override MissionCondition MapDataToObject()
|
||||||
|
{
|
||||||
|
var mappedCondition = new MissionCondition(Type);
|
||||||
|
|
||||||
|
foreach(var requiredElement in RequiredElements)
|
||||||
|
{
|
||||||
|
mappedCondition.RequiredElements.Add(requiredElement.MapDataToObject());
|
||||||
|
}
|
||||||
|
|
||||||
|
return mappedCondition;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 81b8d315cf1ee3444b5630663cf64616
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,48 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
[Serializable]
|
||||||
|
public class KillMissionConditionData : MissionConditionData
|
||||||
|
{
|
||||||
|
public KillMissionConditionData(MissionCondition missionCondition) : base(missionCondition.Type)
|
||||||
|
{
|
||||||
|
RequiredElements.Clear();
|
||||||
|
|
||||||
|
foreach (RequiredSubject requiredSubject in missionCondition.RequiredElements)
|
||||||
|
{
|
||||||
|
/* var abc = new KillRequiredSubjectData((KillRequiredSubject)requiredSubject);
|
||||||
|
|
||||||
|
|
||||||
|
var converter = TypeDescriptor.GetConverter(typeof(KillRequiredSubjectData));
|
||||||
|
|
||||||
|
|
||||||
|
var def = converter.ConvertFrom(abc);
|
||||||
|
|
||||||
|
Debug.Log(def);*/
|
||||||
|
|
||||||
|
RequiredElements.Add(new KillRequiredSubjectData((KillRequiredSubject)requiredSubject));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override MissionCondition MapDataToObject(string prefarbAssetName)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override MissionCondition MapDataToObject()
|
||||||
|
{
|
||||||
|
var mappedCondition = new MissionCondition(Type);
|
||||||
|
|
||||||
|
foreach (var requiredElement in RequiredElements)
|
||||||
|
{
|
||||||
|
mappedCondition.RequiredElements.Add(requiredElement.MapDataToObject());
|
||||||
|
}
|
||||||
|
|
||||||
|
return mappedCondition;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 0fa8be7390fbc1a4dad8aee8ac024e06
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,63 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
[Serializable]
|
||||||
|
//abstract - changed for Unity Inspector visualisation requirements
|
||||||
|
public class MissionConditionData : IModelMapper<MissionCondition>
|
||||||
|
{
|
||||||
|
[SerializeField]
|
||||||
|
public MissionTypeEnum Type;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
public List<RequiredSubjectData> RequiredElements = new List<RequiredSubjectData>();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Constructor implemented to create object in children classes in main purpose
|
||||||
|
///
|
||||||
|
/// We DON'T implement 'RequiredElements' list here because its MUST be FILLED by objects in specific subtyped (not base one) !!!
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="type"></param>
|
||||||
|
protected MissionConditionData(MissionTypeEnum type)
|
||||||
|
{
|
||||||
|
Type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
// abstract
|
||||||
|
public virtual MissionCondition MapDataToObject(string prefarbAssetName) { return new MissionCondition(Type); }
|
||||||
|
|
||||||
|
// abstract
|
||||||
|
public virtual MissionCondition MapDataToObject() { return new MissionCondition(Type); }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Function copied from MissionCondition::Build()
|
||||||
|
/// </summary>
|
||||||
|
//public abstract MissionConditionData<T, V, E> Build(T missionCondition);
|
||||||
|
//
|
||||||
|
|
||||||
|
public static MissionConditionData Build(MissionCondition missionCondition)
|
||||||
|
{
|
||||||
|
switch (missionCondition.Type)
|
||||||
|
{
|
||||||
|
case MissionTypeEnum.Kill:
|
||||||
|
{
|
||||||
|
Debug.Log("Build - KillMissionCondionData");
|
||||||
|
|
||||||
|
return new KillMissionConditionData(missionCondition);
|
||||||
|
}
|
||||||
|
case MissionTypeEnum.Collect:
|
||||||
|
{
|
||||||
|
Debug.Log("Build - CollectMissionConditionData");
|
||||||
|
|
||||||
|
return new CollectMissionConditionData(missionCondition);
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
throw new NotImplementedException("Mission Collection data - constructor");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 572ebb9d86c6e3942bfb6c32249af4db
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -4,7 +4,8 @@ using System.Linq;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
class MissionDialogueData : DialogueData<MissionDialogue>
|
[Serializable]
|
||||||
|
public class MissionDialogueData : DialogueData<MissionDialogue>
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// build Data model based on Object
|
/// build Data model based on Object
|
||||||
@ -24,6 +25,5 @@ class MissionDialogueData : DialogueData<MissionDialogue>
|
|||||||
DialogueStepModelDataList.Add(new DialogueStepData(dialogueStepModelData.WasDisplayed));
|
DialogueStepModelDataList.Add(new DialogueStepData(dialogueStepModelData.WasDisplayed));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,11 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
class MissionDialogueStepData
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -6,8 +6,14 @@ using System.Threading.Tasks;
|
|||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
[Serializable]
|
[Serializable]
|
||||||
class MissionData : ModelData<Mission>
|
public class MissionData : IModelMapper<Mission>
|
||||||
{
|
{
|
||||||
|
[SerializeField]
|
||||||
|
public string MissionName;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
public string SpeakerName;
|
||||||
|
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
public MissionStatusEnum Status = MissionStatusEnum.None;
|
public MissionStatusEnum Status = MissionStatusEnum.None;
|
||||||
|
|
||||||
@ -17,18 +23,41 @@ class MissionData : ModelData<Mission>
|
|||||||
[SerializeField]
|
[SerializeField]
|
||||||
public List<MissionStepData> MissionStepsDataList = new List<MissionStepData>();
|
public List<MissionStepData> MissionStepsDataList = new List<MissionStepData>();
|
||||||
|
|
||||||
public override Mission MapDataToObject(string prefarbAssetName)
|
/// <summary>
|
||||||
|
/// build Data model based on Object
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="dialogue"></param>
|
||||||
|
public MissionData(Mission mission)
|
||||||
|
{
|
||||||
|
MissionName = mission.MissionName;
|
||||||
|
SpeakerName = mission.SpeakerName;
|
||||||
|
|
||||||
|
Status = mission.Status;
|
||||||
|
CurrentStep = mission.CurrentStep;
|
||||||
|
|
||||||
|
MissionStepsDataList.Clear();
|
||||||
|
|
||||||
|
foreach (MissionStepModel missionStepModelData in mission.MissionStepsList)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* pass WasDisplayed value from model to data representative class
|
||||||
|
*/
|
||||||
|
MissionStepsDataList.Add(new MissionStepData(missionStepModelData));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#region NotImplemented
|
||||||
|
/*
|
||||||
|
* we dont want to map it here, we will mark fields in NpcDialogfeManager after each loading and fetching dialogue
|
||||||
|
*/
|
||||||
|
public Mission MapDataToObject(string prefarbAssetName)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override Mission MapDataToObject()
|
public Mission MapDataToObject()
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override Mission TryFindResource(string modelName)
|
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 726174bbf90a7ed44808fa10277f88bd
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,34 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
[Serializable]
|
||||||
|
public class CollectRequiredSubjectData : RequiredSubjectData
|
||||||
|
{
|
||||||
|
protected override string MODEL_LOCALIZATION => "Items/";
|
||||||
|
|
||||||
|
public CollectRequiredSubjectData(int requiredAmount) : base(requiredAmount) { }
|
||||||
|
|
||||||
|
public CollectRequiredSubjectData(int requiredAmount, string requiredObjectName) : base(requiredAmount, requiredObjectName) { }
|
||||||
|
|
||||||
|
public CollectRequiredSubjectData(CollectRequiredSubject requiredSubject) : base(requiredSubject) { }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public override RequiredSubject MapDataToObject(string prefarbAssetName)
|
||||||
|
{
|
||||||
|
var newCollectRequirement = new CollectRequiredSubject(RequiredAmount);
|
||||||
|
|
||||||
|
newCollectRequirement.RequiredObject = newCollectRequirement.FindObjectInResource(prefarbAssetName);
|
||||||
|
|
||||||
|
return newCollectRequirement;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override RequiredSubject MapDataToObject()
|
||||||
|
{
|
||||||
|
return new CollectRequiredSubject(RequiredAmount, RequiredObjectName);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 2ed2e7fa34b0c2948aa8c87d1fafc0ff
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,77 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Globalization;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
[Serializable]
|
||||||
|
/*[TypeConverter(typeof(KillRequiredSubjectDataTypeConverter))]
|
||||||
|
*/public class KillRequiredSubjectData : RequiredSubjectData
|
||||||
|
{
|
||||||
|
protected override string MODEL_LOCALIZATION => "Enemies/";
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
public int CurrentAmount = 0;
|
||||||
|
|
||||||
|
|
||||||
|
public KillRequiredSubjectData(int requiredAmount, string requiredObjectName) : base(requiredAmount, requiredObjectName) { }
|
||||||
|
|
||||||
|
public KillRequiredSubjectData(int requiredAmount, string requiredObjectName, int currentAmount) : base(requiredAmount, requiredObjectName)
|
||||||
|
{
|
||||||
|
CurrentAmount = currentAmount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public KillRequiredSubjectData(int requiredAmount, int currentAmount) : base(requiredAmount) { CurrentAmount = currentAmount; }
|
||||||
|
|
||||||
|
|
||||||
|
public KillRequiredSubjectData(KillRequiredSubject requiredSubject) : base(requiredSubject) { CurrentAmount = requiredSubject.CurrentAmount; }
|
||||||
|
|
||||||
|
|
||||||
|
public override RequiredSubject MapDataToObject(string prefarbAssetName)
|
||||||
|
{
|
||||||
|
var newKillRequirement = new KillRequiredSubject(RequiredAmount, CurrentAmount);
|
||||||
|
|
||||||
|
newKillRequirement.RequiredObject = newKillRequirement.FindObjectInResource(prefarbAssetName);
|
||||||
|
|
||||||
|
return newKillRequirement;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override RequiredSubject MapDataToObject()
|
||||||
|
{
|
||||||
|
return new KillRequiredSubject(RequiredAmount, RequiredObjectName, CurrentAmount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*[TypeConverter(typeof(KillRequiredSubjectDataTypeConverter))]
|
||||||
|
public class KillRequiredSubjectDataTypeConverter : TypeConverter
|
||||||
|
{
|
||||||
|
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
|
||||||
|
{
|
||||||
|
return sourceType == typeof(RequiredSubjectData<RequiredSubject>) || base.CanConvertFrom(context, sourceType);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
|
||||||
|
{
|
||||||
|
var castedFrom = value as RequiredSubjectData<RequiredSubject>;
|
||||||
|
|
||||||
|
return castedFrom != null
|
||||||
|
? new KillRequiredSubjectData(castedFrom.RequiredAmount, castedFrom.RequiredObjectName)
|
||||||
|
: base.ConvertFrom(context, culture, value)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
|
||||||
|
{
|
||||||
|
var castedTo = value as KillRequiredSubjectData;
|
||||||
|
|
||||||
|
return destinationType == typeof(RequiredSubjectData<RequiredSubject>) && castedTo != null
|
||||||
|
? new RequiredSubjectData<RequiredSubject>(castedTo.RequiredAmount, castedTo.RequiredObjectName)
|
||||||
|
: base.ConvertTo(context, culture, value, destinationType)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
|
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: f1f1d299662039c4eaf78d604b8c76bd
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,45 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
[Serializable]
|
||||||
|
//abstract - changed for Unity Inspector visualisation requirements
|
||||||
|
public class RequiredSubjectData : IModelMapper<RequiredSubject>
|
||||||
|
{
|
||||||
|
protected virtual string SPRITE_LOCALIZATION => "Sprites/Object Sprites/";
|
||||||
|
protected virtual string MODEL_LOCALIZATION => "";
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
public int RequiredAmount;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
public string RequiredObjectName;
|
||||||
|
|
||||||
|
public RequiredSubjectData(int requiredAmount)
|
||||||
|
{
|
||||||
|
RequiredAmount = requiredAmount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RequiredSubjectData(int requiredAmount, string requiredObjectName)
|
||||||
|
{
|
||||||
|
RequiredAmount = requiredAmount;
|
||||||
|
|
||||||
|
RequiredObjectName = requiredObjectName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RequiredSubjectData(RequiredSubject requiredSubject)
|
||||||
|
{
|
||||||
|
RequiredAmount = requiredSubject.RequiredAmount;
|
||||||
|
|
||||||
|
RequiredObjectName = requiredSubject.RequiredObject.name; // NAME of the PREFAB
|
||||||
|
}
|
||||||
|
|
||||||
|
// abstract
|
||||||
|
public virtual RequiredSubject MapDataToObject(string prefarbAssetName) { return new RequiredSubject(0); } // { return new RequiredSubject(RequiredAmount, RequiredObjectName); }
|
||||||
|
|
||||||
|
// abstarct
|
||||||
|
public virtual RequiredSubject MapDataToObject() { return new RequiredSubject(0); } // { return new RequiredSubject(RequiredAmount, RequiredObjectName); }
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 3af6b21b3495e5742ab61a3a61e8854f
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -3,13 +3,23 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
[Serializable]
|
||||||
class MissionStepData : IModelMapper<MissionStepModel>
|
public class MissionStepData : IModelMapper<MissionStepModel>
|
||||||
{
|
{
|
||||||
MissionStepStatusEnum Status;
|
[SerializeField]
|
||||||
|
public MissionStepStatusEnum Status;
|
||||||
|
|
||||||
MissionDialogueData MissionDialogueData;
|
[SerializeField]
|
||||||
|
public MissionDialogueData MissionDialogueData;
|
||||||
|
|
||||||
|
public MissionStepData(MissionStepModel missionStepModel)
|
||||||
|
{
|
||||||
|
Status = missionStepModel.Status;
|
||||||
|
|
||||||
|
MissionDialogueData = new MissionDialogueData(missionStepModel.DialogueStep);
|
||||||
|
}
|
||||||
|
|
||||||
public MissionStepModel MapDataToObject(string prefarbAssetName)
|
public MissionStepModel MapDataToObject(string prefarbAssetName)
|
||||||
{
|
{
|
||||||
|
@ -74,4 +74,13 @@ public class SaveController : MonoBehaviour
|
|||||||
if (MultiDialogueDataManager.Instance)
|
if (MultiDialogueDataManager.Instance)
|
||||||
MultiDialogueDataManager.Instance.SaveDynamicData();
|
MultiDialogueDataManager.Instance.SaveDynamicData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SaveMissions()
|
||||||
|
{
|
||||||
|
if (MissionDataManager.Instance ) //&& MissionConditionDataManager.Instance
|
||||||
|
{
|
||||||
|
MissionDataManager.Instance.SaveDynamicData();
|
||||||
|
MissionConditionDataManager.Instance.SaveDynamicData();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user