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_Name: New Mission Dialogue
|
||||
m_EditorClassIdentifier:
|
||||
SpeakerName: Luberjack 2
|
||||
CurrentStep: 0
|
||||
SpeakerName: Lumberjack xd
|
||||
CurrentStep: 2
|
||||
DialogueSteps:
|
||||
- Header: Luberjack 2
|
||||
WasDisplayed: 0
|
||||
- Header: Lumberjack xd
|
||||
WasDisplayed: 1
|
||||
ListOfSentences:
|
||||
- Sentence: Could you help me?
|
||||
Buttons: []
|
||||
@ -56,14 +56,54 @@ MonoBehaviour:
|
||||
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 xd
|
||||
WasDisplayed: 1
|
||||
ListOfSentences:
|
||||
- Sentence: Thank you very much, now go!
|
||||
Buttons: []
|
||||
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_Calls:
|
||||
- m_Target: {fileID: 11400000}
|
||||
m_TargetAssemblyTypeName: Dialogue, Assembly-CSharp
|
||||
m_MethodName: ShowNextPanel
|
||||
m_TargetAssemblyTypeName: MissionDialogue, Assembly-CSharp
|
||||
m_MethodName: HandleCondition
|
||||
m_Mode: 1
|
||||
m_Arguments:
|
||||
m_ObjectArgument: {fileID: 0}
|
||||
@ -73,58 +113,27 @@ MonoBehaviour:
|
||||
m_StringArgument:
|
||||
m_BoolArgument: 0
|
||||
m_CallState: 2
|
||||
- Header: Luberjack 2
|
||||
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
|
||||
- Header: Luberjack 2
|
||||
- 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
|
||||
EndOfDialogueStepAction:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
- Header: Lumberjack xd
|
||||
WasDisplayed: 0
|
||||
ListOfSentences:
|
||||
- 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_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 0a3bcdd1e2dba0c4791bcb151c0df6c1, type: 3}
|
||||
m_Name: TestMission
|
||||
m_Name: TestCollectMission
|
||||
m_EditorClassIdentifier:
|
||||
MissionName: Test mission I
|
||||
PlayerTask:
|
||||
@ -18,13 +18,12 @@ MonoBehaviour:
|
||||
title:
|
||||
description:
|
||||
difficulty: 0
|
||||
SpeakerName:
|
||||
Status: 0
|
||||
SpeakerName: Lumberjack kill mission
|
||||
Status: 3
|
||||
CurrentStep: 0
|
||||
MissionStepsList:
|
||||
- SpeakerName:
|
||||
Status: 0
|
||||
DialogueStepTemplate: {fileID: 11400000, guid: fe2810d79ff17f74eab5cf9a916167b4, type: 2}
|
||||
- SpeakerName: Lumberjack kill mission
|
||||
Status: 2
|
||||
DialogueStep: {fileID: 11400000, guid: fe2810d79ff17f74eab5cf9a916167b4, type: 2}
|
||||
MissionConditions:
|
||||
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>().SaveShops();
|
||||
SaveController.GetComponent<SaveController>().SaveDialogues();
|
||||
SaveController.GetComponent<SaveController>().SaveMissions();
|
||||
|
||||
|
||||
// 2. Change scene
|
||||
SceneManager.LoadScene(gateway.nextMapName);
|
||||
|
@ -49,6 +49,7 @@ public class DoorBehaviour : MonoBehaviour
|
||||
SaveController.GetComponent<SaveController>().SaveChests();
|
||||
SaveController.GetComponent<SaveController>().SaveShops();
|
||||
SaveController.GetComponent<SaveController>().SaveDialogues();
|
||||
SaveController.GetComponent<SaveController>().SaveMissions();
|
||||
|
||||
// 2. Change scene
|
||||
SceneManager.LoadScene(gateway.nextMapName);
|
||||
|
@ -5,11 +5,13 @@ using UnityEngine;
|
||||
public class Enemy : MonoBehaviour
|
||||
{
|
||||
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 float health;
|
||||
public float baseAttack;
|
||||
|
||||
public string MinionName; // var used for multiplied name - for mission poroggress (kill condition)
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
health = maxHealth.initialValue;
|
||||
|
@ -222,7 +222,8 @@ public class FollowingEnemy : Enemy
|
||||
other.GetComponent<Player>().GetExp(expValue);
|
||||
|
||||
// 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);
|
||||
|
||||
// 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.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Events;
|
||||
@ -266,10 +267,12 @@ public class Dialogue : ScriptableObject, IDialogue
|
||||
/// </summary>
|
||||
public void ResetDialogue()
|
||||
{
|
||||
CurrentStep = 0;
|
||||
|
||||
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'
|
||||
|
||||
@ -283,9 +286,15 @@ public class Dialogue : ScriptableObject, IDialogue
|
||||
}
|
||||
#endregion
|
||||
|
||||
public DialogueStepModel GetCurrentStep()
|
||||
public DialogueStepModel? GetCurrentStep()
|
||||
{// 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()
|
||||
{
|
||||
var multiDialStatius = Dialogue.DialogueStepStatus();
|
||||
Debug.Log(multiDialStatius);
|
||||
|
||||
// parse result (dialoge no, step no)
|
||||
// dialogue not exist - finished
|
||||
// dialoge exists & step no > steps sum - finished
|
||||
|
@ -28,7 +28,8 @@ public class MissionDialogue : Dialogue
|
||||
Parent.GetOriginMission().Accept();
|
||||
|
||||
// show next panel if exists
|
||||
ShowNextPanel();
|
||||
//ShowNextPanel();
|
||||
// no we allow to decide programers which one use GoToNextSentence or ShowNextPanel
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -52,7 +53,6 @@ public class MissionDialogue : Dialogue
|
||||
Debug.Log("Handle Conditoion");
|
||||
var result = Parent.HanldeMissionStepCondition();
|
||||
|
||||
Debug.Log(CurrentStep);
|
||||
if (result) GoToNextSentence();
|
||||
else BreakDialogueStep();
|
||||
}
|
||||
@ -68,5 +68,19 @@ public class MissionDialogue : Dialogue
|
||||
Parent.GetOriginMission().FinishMission();
|
||||
}
|
||||
#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;
|
||||
|
||||
|
||||
class CollectMissionCondition : MissionCondition
|
||||
public class CollectMissionCondition : MissionCondition
|
||||
{
|
||||
public CollectMissionCondition()
|
||||
{
|
||||
Type = MissionTypeEnum.Collect;
|
||||
}
|
||||
public CollectMissionCondition() : base (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)
|
||||
RequiredElements.Clear();
|
||||
foreach (RequiredSubject requiredSubject in missionCondition.RequiredElements)
|
||||
|
@ -5,17 +5,12 @@ using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
|
||||
class KillMissionCondion : MissionCondition
|
||||
public class KillMissionCondition : MissionCondition
|
||||
{
|
||||
public KillMissionCondion()
|
||||
{
|
||||
Type = MissionTypeEnum.Kill;
|
||||
}
|
||||
public KillMissionCondition() : base(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)
|
||||
RequiredElements.Clear();
|
||||
foreach(RequiredSubject requiredSubject in missionCondition.RequiredElements)
|
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 65cb4fb8a7aa29641b4979c6ea2ad31f
|
||||
guid: 99f1bc87bda30e042be2b016a67537f4
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
@ -14,7 +14,7 @@ public class MissionCondition
|
||||
[SerializeField]
|
||||
public List<RequiredSubject> RequiredElements = new List<RequiredSubject>();
|
||||
|
||||
public MissionCondition() { }
|
||||
public MissionCondition(MissionTypeEnum type) { Type = type; }
|
||||
|
||||
public bool IsConditionMeeted()
|
||||
{
|
||||
@ -28,7 +28,7 @@ public class MissionCondition
|
||||
{
|
||||
case MissionTypeEnum.Kill:
|
||||
{
|
||||
return new KillMissionCondion(this);
|
||||
return new KillMissionCondition(this);
|
||||
}
|
||||
case MissionTypeEnum.Collect:
|
||||
{
|
||||
|
@ -1,8 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
|
||||
/// <summary>
|
||||
@ -13,6 +9,8 @@ public class CollectRequiredSubject : RequiredSubject
|
||||
{
|
||||
protected override string MODEL_LOCALIZATION => "Items/";
|
||||
|
||||
public CollectRequiredSubject(int requiredAmount) : base(requiredAmount) { }
|
||||
|
||||
public CollectRequiredSubject(RequiredSubject requiredSubject) : base(requiredSubject.RequiredAmount, requiredSubject.RequiredObject) { }
|
||||
|
||||
public CollectRequiredSubject(int requiredAmount, GameObject enemy) : base(requiredAmount, enemy) { }
|
||||
|
@ -6,7 +6,7 @@ using System.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
|
||||
[Serializable]
|
||||
class KillRequiredSubject : RequiredSubject // Enemy - WTF is this class...
|
||||
public class KillRequiredSubject : RequiredSubject // Enemy - WTF is this class...
|
||||
{
|
||||
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(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()
|
||||
{
|
||||
Debug.Log("IncreaseAmount");
|
||||
CurrentAmount += 1;
|
||||
Debug.Log("New Amount: " + CurrentAmount);
|
||||
}
|
||||
|
||||
public void IncreaseAmount(int amount)
|
||||
|
@ -16,6 +16,11 @@ public class RequiredSubject
|
||||
[SerializeField]
|
||||
public GameObject RequiredObject;
|
||||
|
||||
public RequiredSubject(int requiredAmount)
|
||||
{
|
||||
RequiredAmount = requiredAmount;
|
||||
}
|
||||
|
||||
public RequiredSubject(int requiredAmount, GameObject _object)
|
||||
{
|
||||
RequiredAmount = requiredAmount;
|
||||
@ -25,7 +30,7 @@ public class RequiredSubject
|
||||
public RequiredSubject(int requiredAmount, string objectName)
|
||||
{
|
||||
RequiredAmount = requiredAmount;
|
||||
RequiredObject = MonoBehaviour.Instantiate(FindObjectInResource(objectName));
|
||||
RequiredObject = FindObjectInResource(objectName);
|
||||
}
|
||||
|
||||
public GameObject FindObjectInResource(string modelName)
|
||||
@ -33,10 +38,11 @@ public class RequiredSubject
|
||||
var resource = Resources.Load<GameObject>(MODEL_LOCALIZATION + modelName);
|
||||
|
||||
if (!resource)
|
||||
throw new System.Exception($"Resource {modelName} not found!!");
|
||||
throw new System.Exception($"required Subject Resource {MODEL_LOCALIZATION + modelName} not found!!");
|
||||
|
||||
return resource;
|
||||
}
|
||||
|
||||
public virtual bool CheckCondition() { return false; }
|
||||
}
|
||||
|
||||
|
@ -41,6 +41,8 @@ class ConditionManager : MonoBehaviour
|
||||
{
|
||||
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");
|
||||
|
||||
return;
|
||||
@ -52,8 +54,6 @@ class ConditionManager : MonoBehaviour
|
||||
conditionsToContinue
|
||||
)
|
||||
);
|
||||
|
||||
Debug.Log("Condition registered :D");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -68,7 +68,7 @@ class ConditionManager : MonoBehaviour
|
||||
.Where(missionCondition => missionCondition.Type == MissionTypeEnum.Kill)
|
||||
.ToList()
|
||||
.ForEach(killCondition => killCondition.RequiredElements
|
||||
.Where(element => element.RequiredObject.name == objectName)
|
||||
.Where(element => element.RequiredObject.GetComponent<Enemy>().MinionName == objectName)
|
||||
.ToList()
|
||||
.ForEach(element => ((KillRequiredSubject)element).IncreaseAmount())
|
||||
);
|
||||
@ -87,7 +87,7 @@ class ConditionManager : MonoBehaviour
|
||||
if(!HasMissionActiveCondition(missionName))
|
||||
{
|
||||
Debug.LogError($"Data inconsistency!!! Mission dont have any registered condition to check");
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
int unmeetedConditions = Conditions
|
||||
|
@ -27,7 +27,7 @@ public class Mission : ScriptableObject
|
||||
public MissionStatusEnum Status = MissionStatusEnum.None;
|
||||
|
||||
[SerializeField]
|
||||
int CurrentStep = 0;
|
||||
public int CurrentStep = 0;
|
||||
|
||||
[SerializeField]
|
||||
public List<MissionStepModel> MissionStepsList;
|
||||
@ -54,7 +54,7 @@ public class Mission : ScriptableObject
|
||||
}*/
|
||||
|
||||
// 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)
|
||||
{
|
||||
// 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();
|
||||
|
||||
@ -267,6 +267,35 @@ public class Mission : ScriptableObject
|
||||
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()
|
||||
{
|
||||
|
@ -71,18 +71,13 @@ public class MissionStepModel
|
||||
|
||||
RegisterCondition();
|
||||
|
||||
|
||||
((MissionDataManager)MissionDataManager.Instance).RegisterMission(MissionOrigin); // save mission status aftre each activating partial mission
|
||||
}
|
||||
|
||||
#region Condition Mangment section
|
||||
public void RegisterCondition()
|
||||
{
|
||||
Debug.Log(MissionConditions);
|
||||
Debug.Log(MissionConditions.Value[0].Type);
|
||||
|
||||
|
||||
ConditionManager.Instance.RegisterCondition(MissionOrigin.MissionName, BuildConditionsList());
|
||||
Debug.Log("Condition registered");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -137,6 +132,24 @@ public class MissionStepModel
|
||||
return ConditionManager.Instance.CheckCondition(MissionOrigin.MissionName);
|
||||
}
|
||||
#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 void Start()
|
||||
public override void Start()
|
||||
{
|
||||
Mission = Instantiate(MissionTemplate);
|
||||
Mission.SetSpeakerName(gameObject.GetComponent<NPC>().Name);
|
||||
//Mission.BuildMission();
|
||||
base.Start();
|
||||
|
||||
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)
|
||||
FreeDialogue.Build();
|
||||
@ -45,8 +70,6 @@ public class NpcMissionManager : DialogueManager // ScriptableObject
|
||||
{
|
||||
CanBeOpened = true;
|
||||
|
||||
SpeakerName = collision.gameObject.name;
|
||||
|
||||
Mission.StartDialogue();
|
||||
}
|
||||
}
|
||||
@ -61,29 +84,56 @@ public class NpcMissionManager : DialogueManager // ScriptableObject
|
||||
{
|
||||
CanBeOpened = false;
|
||||
|
||||
if (GetCurrentDialoguePanelStatus())
|
||||
if (Mission != null && GetCurrentDialoguePanelStatus())
|
||||
{
|
||||
Debug.Log("BreakDialogueStep");
|
||||
Mission.BreakDialogueStep();
|
||||
/* Debug.Log("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)
|
||||
{
|
||||
// show free dialogue
|
||||
//if(FreeDialogue != null)
|
||||
//FreeDialogue.DialogueController.
|
||||
} else
|
||||
{
|
||||
// continue mission
|
||||
Mission.StartDialogue();
|
||||
Dialogue.Dialogues.Add(new IndexValuePair<int, Dialogue>(dial.Key, Instantiate(dial.Value)));
|
||||
}*/
|
||||
|
||||
Mission.SetSpeakerName(gameObject.GetComponent<NPC>().Name);
|
||||
|
||||
// update dial state - sync in order to prepare to save
|
||||
Mission.MissionStepsList.ForEach(dial => dial.DialogueStep.SetActionAfterEachDialogueStep(UpdateProggres));
|
||||
|
||||
// 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()
|
||||
{
|
||||
return !gameObject.GetComponent<NpcMissionManager>().enabled;
|
||||
@ -91,24 +141,11 @@ public class NpcMissionManager : DialogueManager // ScriptableObject
|
||||
|
||||
public override bool GetCurrentDialoguePanelStatus()
|
||||
{
|
||||
Debug.Log(Mission
|
||||
.GetCurrentStep()
|
||||
.DialogueStep.CurrentStep
|
||||
);
|
||||
|
||||
Debug.Log(Mission
|
||||
.GetCurrentStep()
|
||||
.DialogueStep
|
||||
.GetCurrentStep()
|
||||
.DialogueController
|
||||
.CurrentPanel
|
||||
);
|
||||
|
||||
return Mission
|
||||
.GetCurrentStep()
|
||||
.DialogueStep
|
||||
.GetCurrentStep() // ?
|
||||
.DialogueController
|
||||
.GetCurrentStep()
|
||||
?.DialogueController
|
||||
.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
|
||||
guid: 439e1e19b22afd4478b4c1151588c35b
|
||||
guid: 8d515fca317b6ce4882ed8be7036497a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
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;
|
||||
|
||||
|
||||
class SaveMissionManager : SaveModelSystem<Mission>
|
||||
class SaveMissionManager : SaveModelSystem<MissionData>
|
||||
{
|
||||
public override bool SaveModelItem(Mission model)
|
||||
public override bool SaveModelItem(MissionData model)
|
||||
{
|
||||
return base.SaveModelItem(model);
|
||||
}
|
||||
|
||||
public override bool SaveModelList(List<Mission> list)
|
||||
public override bool SaveModelList(List<MissionData> list)
|
||||
{
|
||||
BinaryFormatter formatter = new BinaryFormatter();
|
||||
|
||||
@ -20,7 +20,7 @@ class SaveMissionManager : SaveModelSystem<Mission>
|
||||
if (!Directory.Exists(Path)) Directory.CreateDirectory(Path);
|
||||
|
||||
/* Main logic of conversion data format */
|
||||
var data = ConvertObjectsListToListOfDataModels(list);
|
||||
var data = list; // ConvertObjectsListToListOfDataModels(list);
|
||||
|
||||
FileStream stream = new FileStream(
|
||||
Path + GetFileName(ObjectListName),
|
||||
@ -33,12 +33,12 @@ class SaveMissionManager : SaveModelSystem<Mission>
|
||||
return true;
|
||||
}
|
||||
|
||||
public override Mission LoadModelItem()
|
||||
public override MissionData LoadModelItem()
|
||||
{
|
||||
return base.LoadModelItem();
|
||||
}
|
||||
|
||||
public override List<Mission> LoadModelList()
|
||||
public override List<MissionData> LoadModelList()
|
||||
{
|
||||
string path = Path + GetFileName(ObjectListName);
|
||||
|
||||
@ -47,25 +47,27 @@ class SaveMissionManager : SaveModelSystem<Mission>
|
||||
BinaryFormatter formatter = new BinaryFormatter();
|
||||
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();
|
||||
|
||||
return ConvertListOfDataModelsToListOfObject(questsList);
|
||||
return missionsList; // ConvertListOfDataModelsToListOfObject(questsList);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Log("Save file not found in " + path);
|
||||
}
|
||||
|
||||
return new List<Mission>();
|
||||
return new List<MissionData>();
|
||||
}
|
||||
|
||||
// ----------------- USELLES IN THIS CLASS -----------------
|
||||
#region unused
|
||||
// Support function
|
||||
|
||||
// 1. From model to data format
|
||||
public static MissionData ConvertObjectToDataModel(Mission model)
|
||||
{
|
||||
return new MissionData(); //model
|
||||
return new MissionData(model);
|
||||
}
|
||||
|
||||
public static List<MissionData> ConvertObjectsListToListOfDataModels(List<Mission> modelsList)
|
||||
@ -97,4 +99,5 @@ class SaveMissionManager : SaveModelSystem<Mission>
|
||||
|
||||
return convertedList;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
@ -31,8 +31,10 @@ public class PlayerActions : MonoBehaviour
|
||||
Debug.Log($"Give reward - {reward.Cash}");
|
||||
|
||||
// 3. Save changes
|
||||
GameObject.FindObjectOfType<SaveController>().SavePlayerEquipmentItems();
|
||||
GameObject.FindObjectOfType<SaveController>().SavePlayerInventory();
|
||||
GameObject.FindObjectOfType<SaveController>().SaveAccountBalance();
|
||||
// TODO - sync saving process reward / mission proggress
|
||||
// currently its saving only after changing scene and saving manually by player
|
||||
//GameObject.FindObjectOfType<SaveController>().SavePlayerEquipmentItems();
|
||||
//GameObject.FindObjectOfType<SaveController>().SavePlayerInventory();
|
||||
//GameObject.FindObjectOfType<SaveController>().SaveAccountBalance();
|
||||
}
|
||||
}
|
||||
|
@ -154,7 +154,6 @@ public abstract class SceneBaseDataManager<T> : MonoBehaviour
|
||||
// approach:
|
||||
// 1. get from outside, update local list && us it
|
||||
// 2. Handle list synchronized all the time & pass local list
|
||||
Debug.Log(DynamicDataList.GetList());
|
||||
return SaveData(DynamicDataList.GetList(), SceneElementTypeEnum.Dynamic);
|
||||
}
|
||||
#endregion
|
||||
|
@ -86,9 +86,9 @@ public abstract class DraggablePanelController : PanelController<IndexValuePair<
|
||||
|
||||
// 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
|
||||
|
||||
UiManager.Add(new IndexValuePair<int, EquippableItem>(dropItemSlot.Number, tmpDraggedItem));
|
||||
|
||||
// !!! remember item from dropped position to future operation !!!
|
||||
|
@ -28,7 +28,6 @@ public abstract class WarehousePanelController : DraggablePanelController
|
||||
|
||||
public override void DoubleLeftMouseClick(ItemSlot itemSlot)
|
||||
{
|
||||
Debug.Log("Used item");
|
||||
if(AllowToUseItemInPanel)
|
||||
{
|
||||
ItemEffectsManager.Instance.UseItemEffect(itemSlot, Type);
|
||||
|
@ -219,7 +219,6 @@ public abstract class UIBaseManager<T> : MonoBehaviour, ManagerInterface<T>
|
||||
public void Add(T model)
|
||||
{
|
||||
// throw new System.NotImplementedException();
|
||||
|
||||
Elements.Add(model);
|
||||
|
||||
UpdateList();
|
||||
|
@ -59,7 +59,11 @@ public abstract class UIWarehouseManager : UISlotPanelManager<IndexValuePair<int
|
||||
public virtual void Add(EquippableItem item)
|
||||
{
|
||||
if(IsFull())
|
||||
throw new System.Exception($"Warehouse is full!!!");
|
||||
{
|
||||
Debug.Log($"Warehouse is full!");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// find first empty position / slot
|
||||
var max = 0;
|
||||
|
@ -1,5 +1,5 @@
|
||||
|
||||
interface IModelMapper<T>
|
||||
public interface IModelMapper<T>
|
||||
{
|
||||
public abstract T MapDataToObject(string prefarbAssetName);
|
||||
|
||||
|
@ -89,8 +89,8 @@ public class EquipmentUIManager : UIWarehouseManager
|
||||
if (!CheckIfSlotExists(keyPosition))
|
||||
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.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.Threading.Tasks;
|
||||
|
||||
class MissionDialogueData : DialogueData<MissionDialogue>
|
||||
[Serializable]
|
||||
public class MissionDialogueData : DialogueData<MissionDialogue>
|
||||
{
|
||||
/// <summary>
|
||||
/// build Data model based on Object
|
||||
@ -24,6 +25,5 @@ class MissionDialogueData : DialogueData<MissionDialogue>
|
||||
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;
|
||||
|
||||
[Serializable]
|
||||
class MissionData : ModelData<Mission>
|
||||
public class MissionData : IModelMapper<Mission>
|
||||
{
|
||||
[SerializeField]
|
||||
public string MissionName;
|
||||
|
||||
[SerializeField]
|
||||
public string SpeakerName;
|
||||
|
||||
[SerializeField]
|
||||
public MissionStatusEnum Status = MissionStatusEnum.None;
|
||||
|
||||
@ -17,18 +23,41 @@ class MissionData : ModelData<Mission>
|
||||
[SerializeField]
|
||||
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();
|
||||
}
|
||||
|
||||
public override Mission MapDataToObject()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
protected override Mission TryFindResource(string modelName)
|
||||
public Mission MapDataToObject()
|
||||
{
|
||||
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.Text;
|
||||
using System.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
|
||||
|
||||
class MissionStepData : IModelMapper<MissionStepModel>
|
||||
[Serializable]
|
||||
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)
|
||||
{
|
||||
|
@ -74,4 +74,13 @@ public class SaveController : MonoBehaviour
|
||||
if (MultiDialogueDataManager.Instance)
|
||||
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