Linking the octo localization system to the dialogue system
This commit is contained in:
@@ -179,7 +179,7 @@ MonoBehaviour:
|
|||||||
UseName: 1
|
UseName: 1
|
||||||
Sprite: {fileID: 0}
|
Sprite: {fileID: 0}
|
||||||
Languages:
|
Languages:
|
||||||
Default: 1
|
Default: 0
|
||||||
SaveWritten: {fileID: 11400000, guid: 70ce020f0ed1ad24a94c854da5d6538e, type: 2}
|
SaveWritten: {fileID: 11400000, guid: 70ce020f0ed1ad24a94c854da5d6538e, type: 2}
|
||||||
SaveAudio: {fileID: 11400000, guid: a186262be747dae448e59cbe43ebe286, type: 2}
|
SaveAudio: {fileID: 11400000, guid: a186262be747dae448e59cbe43ebe286, type: 2}
|
||||||
Overrides: []
|
Overrides: []
|
||||||
|
|||||||
+1
-2
@@ -12,11 +12,10 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: 83cc2feccc2da50418d37dfef21a2e99, type: 3}
|
m_Script: {fileID: 11500000, guid: 83cc2feccc2da50418d37dfef21a2e99, type: 3}
|
||||||
m_Name: ConversationDemoNPC
|
m_Name: ConversationDemoNPC
|
||||||
m_EditorClassIdentifier: Assembly-CSharp::DialogueConversation
|
m_EditorClassIdentifier: Assembly-CSharp::DialogueConversation
|
||||||
SpeakerName: Interlocuteur
|
SpeakerName: {fileID: 11400000, guid: 5b3e91cb62ce53f4381e3308311e5c88, type: 2}
|
||||||
DisplayMode: 0
|
DisplayMode: 0
|
||||||
DialogueNodes:
|
DialogueNodes:
|
||||||
- {fileID: 11400000, guid: e6358f99b82fd39408e3272866b51c49, type: 2}
|
- {fileID: 11400000, guid: e6358f99b82fd39408e3272866b51c49, type: 2}
|
||||||
- {fileID: 11400000, guid: f40a3fc5fb3ead644af358428fc5dc54, type: 2}
|
- {fileID: 11400000, guid: f40a3fc5fb3ead644af358428fc5dc54, type: 2}
|
||||||
- {fileID: 11400000, guid: d28cec9f78d67484bb27b480eac9e98b, type: 2}
|
- {fileID: 11400000, guid: d28cec9f78d67484bb27b480eac9e98b, type: 2}
|
||||||
- {fileID: 11400000, guid: 70f9438f6d9f7644abbcf6b47231cc4c, type: 2}
|
- {fileID: 11400000, guid: 70f9438f6d9f7644abbcf6b47231cc4c, type: 2}
|
||||||
SpeakerNameLocalizationKey:
|
|
||||||
|
|||||||
@@ -12,14 +12,12 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: c5adec41ffe2e0f4d83e2e75e31781d6, type: 3}
|
m_Script: {fileID: 11500000, guid: c5adec41ffe2e0f4d83e2e75e31781d6, type: 3}
|
||||||
m_Name: Node_1
|
m_Name: Node_1
|
||||||
m_EditorClassIdentifier: Assembly-CSharp::DialogueNode
|
m_EditorClassIdentifier: Assembly-CSharp::DialogueNode
|
||||||
DialogueText: 'Bonjour ! Comment allez vous ? '
|
DialogueText: {fileID: 11400000, guid: 8bf652ae89a618a4fa2f7abe47985305, type: 2}
|
||||||
DialogueTextLocalizationKey:
|
|
||||||
Choices:
|
Choices:
|
||||||
- ChoiceText: Bien :)
|
- ChoiceText: {fileID: 11400000, guid: 99d107baf0e85d24db4d3fd67422d483, type: 2}
|
||||||
ChoiceTextLocalizationKey:
|
|
||||||
NextNode: {fileID: 11400000, guid: f40a3fc5fb3ead644af358428fc5dc54, type: 2}
|
NextNode: {fileID: 11400000, guid: f40a3fc5fb3ead644af358428fc5dc54, type: 2}
|
||||||
RequiredCondition:
|
RequiredCondition:
|
||||||
- ChoiceText: Mal :/
|
- ChoiceText: {fileID: 11400000, guid: 4ab7f22f17fdf4a4fa4ade7b2c8f8096, type: 2}
|
||||||
ChoiceTextLocalizationKey:
|
|
||||||
NextNode: {fileID: 11400000, guid: d28cec9f78d67484bb27b480eac9e98b, type: 2}
|
NextNode: {fileID: 11400000, guid: d28cec9f78d67484bb27b480eac9e98b, type: 2}
|
||||||
RequiredCondition:
|
RequiredCondition:
|
||||||
|
AutoCloseDelay: 3
|
||||||
|
|||||||
@@ -12,10 +12,9 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: c5adec41ffe2e0f4d83e2e75e31781d6, type: 3}
|
m_Script: {fileID: 11500000, guid: c5adec41ffe2e0f4d83e2e75e31781d6, type: 3}
|
||||||
m_Name: Node_2
|
m_Name: Node_2
|
||||||
m_EditorClassIdentifier: Assembly-CSharp::DialogueNode
|
m_EditorClassIdentifier: Assembly-CSharp::DialogueNode
|
||||||
DialogueText: 'Content de l''apprendre ! '
|
DialogueText: {fileID: 11400000, guid: d362058a28da8054b8e892b7b2eee83c, type: 2}
|
||||||
DialogueTextLocalizationKey:
|
|
||||||
Choices:
|
Choices:
|
||||||
- ChoiceText: 'Merci ! '
|
- ChoiceText: {fileID: 11400000, guid: a98697dd1f18a4d42928740c1181f3a4, type: 2}
|
||||||
ChoiceTextLocalizationKey:
|
|
||||||
NextNode: {fileID: 11400000, guid: 70f9438f6d9f7644abbcf6b47231cc4c, type: 2}
|
NextNode: {fileID: 11400000, guid: 70f9438f6d9f7644abbcf6b47231cc4c, type: 2}
|
||||||
RequiredCondition:
|
RequiredCondition:
|
||||||
|
AutoCloseDelay: 3
|
||||||
|
|||||||
@@ -12,10 +12,9 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: c5adec41ffe2e0f4d83e2e75e31781d6, type: 3}
|
m_Script: {fileID: 11500000, guid: c5adec41ffe2e0f4d83e2e75e31781d6, type: 3}
|
||||||
m_Name: Node_3
|
m_Name: Node_3
|
||||||
m_EditorClassIdentifier: Assembly-CSharp::DialogueNode
|
m_EditorClassIdentifier: Assembly-CSharp::DialogueNode
|
||||||
DialogueText: Ha mince :/
|
DialogueText: {fileID: 11400000, guid: 925b409778e50894a84dcdcb083de562, type: 2}
|
||||||
DialogueTextLocalizationKey:
|
|
||||||
Choices:
|
Choices:
|
||||||
- ChoiceText: Hmmm...
|
- ChoiceText: {fileID: 11400000, guid: a2f6c9bc969b33b41b2ec55d11b50b18, type: 2}
|
||||||
ChoiceTextLocalizationKey:
|
|
||||||
NextNode: {fileID: 11400000, guid: 70f9438f6d9f7644abbcf6b47231cc4c, type: 2}
|
NextNode: {fileID: 11400000, guid: 70f9438f6d9f7644abbcf6b47231cc4c, type: 2}
|
||||||
RequiredCondition:
|
RequiredCondition:
|
||||||
|
AutoCloseDelay: 3
|
||||||
|
|||||||
@@ -12,6 +12,6 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: c5adec41ffe2e0f4d83e2e75e31781d6, type: 3}
|
m_Script: {fileID: 11500000, guid: c5adec41ffe2e0f4d83e2e75e31781d6, type: 3}
|
||||||
m_Name: Node_4
|
m_Name: Node_4
|
||||||
m_EditorClassIdentifier: Assembly-CSharp::DialogueNode
|
m_EditorClassIdentifier: Assembly-CSharp::DialogueNode
|
||||||
DialogueText: "Passez une bonne journ\xE9e ! "
|
DialogueText: {fileID: 11400000, guid: 9732573067a577b49bd61c6f62f7341e, type: 2}
|
||||||
DialogueTextLocalizationKey:
|
|
||||||
Choices: []
|
Choices: []
|
||||||
|
AutoCloseDelay: 3
|
||||||
|
|||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
%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: cbde7b14ca8fbf24c917c47aa3c51676, type: 3}
|
||||||
|
m_Name: text_ConversationDemoNPC_SpeakerName
|
||||||
|
m_EditorClassIdentifier: OctoCore.Runtime::OctoCore.Localization.OctoLocalizedTextData
|
||||||
|
Languages:
|
||||||
|
_keys:
|
||||||
|
- English
|
||||||
|
- French
|
||||||
|
_values:
|
||||||
|
- Speaker
|
||||||
|
- Interlocuteur
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 5b3e91cb62ce53f4381e3308311e5c88
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
%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: cbde7b14ca8fbf24c917c47aa3c51676, type: 3}
|
||||||
|
m_Name: text_Node_1_Choices_Array_data[0]_ChoiceText
|
||||||
|
m_EditorClassIdentifier: OctoCore.Runtime::OctoCore.Localization.OctoLocalizedTextData
|
||||||
|
Languages:
|
||||||
|
_keys:
|
||||||
|
- English
|
||||||
|
- French
|
||||||
|
_values:
|
||||||
|
- 'Good ! '
|
||||||
|
- 'Bien ! '
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 99d107baf0e85d24db4d3fd67422d483
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
%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: cbde7b14ca8fbf24c917c47aa3c51676, type: 3}
|
||||||
|
m_Name: text_Node_1_Choices_Array_data[1]_ChoiceText
|
||||||
|
m_EditorClassIdentifier: OctoCore.Runtime::OctoCore.Localization.OctoLocalizedTextData
|
||||||
|
Languages:
|
||||||
|
_keys:
|
||||||
|
- English
|
||||||
|
- French
|
||||||
|
_values:
|
||||||
|
- Bad :/
|
||||||
|
- Mal :/
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 4ab7f22f17fdf4a4fa4ade7b2c8f8096
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
%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: cbde7b14ca8fbf24c917c47aa3c51676, type: 3}
|
||||||
|
m_Name: text_Node_1_DialogueText
|
||||||
|
m_EditorClassIdentifier: OctoCore.Runtime::OctoCore.Localization.OctoLocalizedTextData
|
||||||
|
Languages:
|
||||||
|
_keys:
|
||||||
|
- English
|
||||||
|
- French
|
||||||
|
_values:
|
||||||
|
- 'Hello ! How are you ? '
|
||||||
|
- 'Bonjour comment allez vous ? '
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 8bf652ae89a618a4fa2f7abe47985305
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
%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: cbde7b14ca8fbf24c917c47aa3c51676, type: 3}
|
||||||
|
m_Name: text_Node_2_Choices_Array_data[0]_ChoiceText
|
||||||
|
m_EditorClassIdentifier: OctoCore.Runtime::OctoCore.Localization.OctoLocalizedTextData
|
||||||
|
Languages:
|
||||||
|
_keys:
|
||||||
|
- English
|
||||||
|
- French
|
||||||
|
_values:
|
||||||
|
- 'Goodbye ! '
|
||||||
|
- 'Au revoir ! '
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: a98697dd1f18a4d42928740c1181f3a4
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
%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: cbde7b14ca8fbf24c917c47aa3c51676, type: 3}
|
||||||
|
m_Name: text_Node_2_DialogueText
|
||||||
|
m_EditorClassIdentifier: OctoCore.Runtime::OctoCore.Localization.OctoLocalizedTextData
|
||||||
|
Languages:
|
||||||
|
_keys:
|
||||||
|
- English
|
||||||
|
- French
|
||||||
|
_values:
|
||||||
|
- Glad to hear it !
|
||||||
|
- 'Content de l''apprendre ! '
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: d362058a28da8054b8e892b7b2eee83c
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
%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: cbde7b14ca8fbf24c917c47aa3c51676, type: 3}
|
||||||
|
m_Name: text_Node_3_Choices_Array_data[0]_ChoiceText
|
||||||
|
m_EditorClassIdentifier: OctoCore.Runtime::OctoCore.Localization.OctoLocalizedTextData
|
||||||
|
Languages:
|
||||||
|
_keys:
|
||||||
|
- English
|
||||||
|
- French
|
||||||
|
_values:
|
||||||
|
- Goodbye...
|
||||||
|
- 'Au revoir ! '
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: a2f6c9bc969b33b41b2ec55d11b50b18
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
%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: cbde7b14ca8fbf24c917c47aa3c51676, type: 3}
|
||||||
|
m_Name: text_Node_3_DialogueText
|
||||||
|
m_EditorClassIdentifier: OctoCore.Runtime::OctoCore.Localization.OctoLocalizedTextData
|
||||||
|
Languages:
|
||||||
|
_keys:
|
||||||
|
- English
|
||||||
|
- French
|
||||||
|
_values:
|
||||||
|
- Hmmmm...
|
||||||
|
- Hmmmm...
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 925b409778e50894a84dcdcb083de562
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
%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: cbde7b14ca8fbf24c917c47aa3c51676, type: 3}
|
||||||
|
m_Name: text_Node_4_DialogueText
|
||||||
|
m_EditorClassIdentifier: OctoCore.Runtime::OctoCore.Localization.OctoLocalizedTextData
|
||||||
|
Languages:
|
||||||
|
_keys:
|
||||||
|
- English
|
||||||
|
- French
|
||||||
|
_values:
|
||||||
|
- Have a nice one !
|
||||||
|
- "Bonne journ\xE9e ! "
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 9732573067a577b49bd61c6f62f7341e
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
+1
-2
@@ -12,10 +12,9 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: 83cc2feccc2da50418d37dfef21a2e99, type: 3}
|
m_Script: {fileID: 11500000, guid: 83cc2feccc2da50418d37dfef21a2e99, type: 3}
|
||||||
m_Name: ConversationDemoTriggerZone
|
m_Name: ConversationDemoTriggerZone
|
||||||
m_EditorClassIdentifier: Assembly-CSharp::DialogueConversation
|
m_EditorClassIdentifier: Assembly-CSharp::DialogueConversation
|
||||||
SpeakerName: Interlocuteur
|
SpeakerName: {fileID: 11400000, guid: df5eb6609786d414a82c280055895b25, type: 2}
|
||||||
DisplayMode: 0
|
DisplayMode: 0
|
||||||
DialogueNodes:
|
DialogueNodes:
|
||||||
- {fileID: 11400000, guid: bf52fd5b87260974883a757bc1cc7867, type: 2}
|
- {fileID: 11400000, guid: bf52fd5b87260974883a757bc1cc7867, type: 2}
|
||||||
- {fileID: 11400000, guid: 63d965499deabf64db562d40b63717a8, type: 2}
|
- {fileID: 11400000, guid: 63d965499deabf64db562d40b63717a8, type: 2}
|
||||||
- {fileID: 11400000, guid: 219b8c46683c5024b91c248ee524b66d, type: 2}
|
- {fileID: 11400000, guid: 219b8c46683c5024b91c248ee524b66d, type: 2}
|
||||||
SpeakerNameLocalizationKey:
|
|
||||||
|
|||||||
@@ -12,14 +12,12 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: c5adec41ffe2e0f4d83e2e75e31781d6, type: 3}
|
m_Script: {fileID: 11500000, guid: c5adec41ffe2e0f4d83e2e75e31781d6, type: 3}
|
||||||
m_Name: Node_1
|
m_Name: Node_1
|
||||||
m_EditorClassIdentifier: Assembly-CSharp::DialogueNode
|
m_EditorClassIdentifier: Assembly-CSharp::DialogueNode
|
||||||
DialogueText: Bonjour ! Vous vennez d'entrer dans une salle !
|
DialogueText: {fileID: 11400000, guid: 665845092da27214a831ca4f2eca8046, type: 2}
|
||||||
DialogueTextLocalizationKey:
|
|
||||||
Choices:
|
Choices:
|
||||||
- ChoiceText: "Elle sert \xE0 quoi ? "
|
- ChoiceText: {fileID: 11400000, guid: 794507204e4362b40ab88980398ef5a6, type: 2}
|
||||||
ChoiceTextLocalizationKey:
|
|
||||||
NextNode: {fileID: 11400000, guid: 63d965499deabf64db562d40b63717a8, type: 2}
|
NextNode: {fileID: 11400000, guid: 63d965499deabf64db562d40b63717a8, type: 2}
|
||||||
RequiredCondition:
|
RequiredCondition:
|
||||||
- ChoiceText: 'Je peux regarder ? '
|
- ChoiceText: {fileID: 11400000, guid: 78f6e91902cf1e14388b346e554852e6, type: 2}
|
||||||
ChoiceTextLocalizationKey:
|
|
||||||
NextNode: {fileID: 11400000, guid: 219b8c46683c5024b91c248ee524b66d, type: 2}
|
NextNode: {fileID: 11400000, guid: 219b8c46683c5024b91c248ee524b66d, type: 2}
|
||||||
RequiredCondition:
|
RequiredCondition:
|
||||||
|
AutoCloseDelay: 3
|
||||||
|
|||||||
@@ -12,10 +12,9 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: c5adec41ffe2e0f4d83e2e75e31781d6, type: 3}
|
m_Script: {fileID: 11500000, guid: c5adec41ffe2e0f4d83e2e75e31781d6, type: 3}
|
||||||
m_Name: Node_2
|
m_Name: Node_2
|
||||||
m_EditorClassIdentifier: Assembly-CSharp::DialogueNode
|
m_EditorClassIdentifier: Assembly-CSharp::DialogueNode
|
||||||
DialogueText: Pour le moment elle est vide..
|
DialogueText: {fileID: 11400000, guid: f4ed22b6806ca4d43aabaf7973bb9c74, type: 2}
|
||||||
DialogueTextLocalizationKey:
|
|
||||||
Choices:
|
Choices:
|
||||||
- ChoiceText: Ha d'accord... Je vais regarder
|
- ChoiceText: {fileID: 11400000, guid: 935dd4f8d132d934aa60052c7011cc94, type: 2}
|
||||||
ChoiceTextLocalizationKey:
|
|
||||||
NextNode: {fileID: 11400000, guid: 219b8c46683c5024b91c248ee524b66d, type: 2}
|
NextNode: {fileID: 11400000, guid: 219b8c46683c5024b91c248ee524b66d, type: 2}
|
||||||
RequiredCondition:
|
RequiredCondition:
|
||||||
|
AutoCloseDelay: 3
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: c5adec41ffe2e0f4d83e2e75e31781d6, type: 3}
|
m_Script: {fileID: 11500000, guid: c5adec41ffe2e0f4d83e2e75e31781d6, type: 3}
|
||||||
m_Name: Node_3
|
m_Name: Node_3
|
||||||
m_EditorClassIdentifier: Assembly-CSharp::DialogueNode
|
m_EditorClassIdentifier: Assembly-CSharp::DialogueNode
|
||||||
DialogueText: "Pas de soucis ! \xE0 la prochaine"
|
DialogueText: {fileID: 11400000, guid: 1ada249df3b95464bb55781f142b9933, type: 2}
|
||||||
DialogueTextLocalizationKey:
|
|
||||||
Choices: []
|
Choices: []
|
||||||
AutoCloseDelay: 3
|
AutoCloseDelay: 3
|
||||||
|
|||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
%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: cbde7b14ca8fbf24c917c47aa3c51676, type: 3}
|
||||||
|
m_Name: text_ConversationDemoTriggerZone_SpeakerName
|
||||||
|
m_EditorClassIdentifier: OctoCore.Runtime::OctoCore.Localization.OctoLocalizedTextData
|
||||||
|
Languages:
|
||||||
|
_keys:
|
||||||
|
- English
|
||||||
|
- French
|
||||||
|
_values:
|
||||||
|
-
|
||||||
|
-
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: df5eb6609786d414a82c280055895b25
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
%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: cbde7b14ca8fbf24c917c47aa3c51676, type: 3}
|
||||||
|
m_Name: text_Node_1_Choices_Array_data[0]_ChoiceText
|
||||||
|
m_EditorClassIdentifier: OctoCore.Runtime::OctoCore.Localization.OctoLocalizedTextData
|
||||||
|
Languages:
|
||||||
|
_keys:
|
||||||
|
- English
|
||||||
|
- French
|
||||||
|
_values:
|
||||||
|
-
|
||||||
|
-
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 794507204e4362b40ab88980398ef5a6
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
%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: cbde7b14ca8fbf24c917c47aa3c51676, type: 3}
|
||||||
|
m_Name: text_Node_1_Choices_Array_data[1]_ChoiceText
|
||||||
|
m_EditorClassIdentifier: OctoCore.Runtime::OctoCore.Localization.OctoLocalizedTextData
|
||||||
|
Languages:
|
||||||
|
_keys:
|
||||||
|
- English
|
||||||
|
- French
|
||||||
|
_values:
|
||||||
|
-
|
||||||
|
-
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 78f6e91902cf1e14388b346e554852e6
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
%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: cbde7b14ca8fbf24c917c47aa3c51676, type: 3}
|
||||||
|
m_Name: text_Node_1_DialogueText
|
||||||
|
m_EditorClassIdentifier: OctoCore.Runtime::OctoCore.Localization.OctoLocalizedTextData
|
||||||
|
Languages:
|
||||||
|
_keys:
|
||||||
|
- English
|
||||||
|
- French
|
||||||
|
_values:
|
||||||
|
-
|
||||||
|
-
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 665845092da27214a831ca4f2eca8046
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
%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: cbde7b14ca8fbf24c917c47aa3c51676, type: 3}
|
||||||
|
m_Name: text_Node_2_Choices_Array_data[0]_ChoiceText
|
||||||
|
m_EditorClassIdentifier: OctoCore.Runtime::OctoCore.Localization.OctoLocalizedTextData
|
||||||
|
Languages:
|
||||||
|
_keys:
|
||||||
|
- English
|
||||||
|
- French
|
||||||
|
_values:
|
||||||
|
-
|
||||||
|
-
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 935dd4f8d132d934aa60052c7011cc94
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
%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: cbde7b14ca8fbf24c917c47aa3c51676, type: 3}
|
||||||
|
m_Name: text_Node_2_DialogueText
|
||||||
|
m_EditorClassIdentifier: OctoCore.Runtime::OctoCore.Localization.OctoLocalizedTextData
|
||||||
|
Languages:
|
||||||
|
_keys:
|
||||||
|
- English
|
||||||
|
- French
|
||||||
|
_values:
|
||||||
|
-
|
||||||
|
-
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: f4ed22b6806ca4d43aabaf7973bb9c74
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
%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: cbde7b14ca8fbf24c917c47aa3c51676, type: 3}
|
||||||
|
m_Name: text_Node_3_DialogueText
|
||||||
|
m_EditorClassIdentifier: OctoCore.Runtime::OctoCore.Localization.OctoLocalizedTextData
|
||||||
|
Languages:
|
||||||
|
_keys:
|
||||||
|
- English
|
||||||
|
- French
|
||||||
|
_values:
|
||||||
|
-
|
||||||
|
-
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 1ada249df3b95464bb55781f142b9933
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -152,6 +152,7 @@ Transform:
|
|||||||
- {fileID: 1475986548}
|
- {fileID: 1475986548}
|
||||||
- {fileID: 2128643702}
|
- {fileID: 2128643702}
|
||||||
- {fileID: 1128483291}
|
- {fileID: 1128483291}
|
||||||
|
- {fileID: 864122655}
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!114 &37800871
|
--- !u!114 &37800871
|
||||||
@@ -1793,6 +1794,51 @@ Transform:
|
|||||||
- {fileID: 1296540339}
|
- {fileID: 1296540339}
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
--- !u!1 &864122654
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 864122655}
|
||||||
|
- component: {fileID: 864122656}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: LangageSwitcher
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!4 &864122655
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 864122654}
|
||||||
|
serializedVersion: 2
|
||||||
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 26219555}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
--- !u!114 &864122656
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 864122654}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: 86180434dad93e344b4a5229575d4757, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: Assembly-CSharp::Unheimlich.Tools.LanguageSwitcher
|
||||||
|
_currentLanguage: 1
|
||||||
--- !u!4 &916843296 stripped
|
--- !u!4 &916843296 stripped
|
||||||
Transform:
|
Transform:
|
||||||
m_CorrespondingSourceObject: {fileID: 3379767859340007146, guid: 524ca0dabcf93844ea5f981410f44310, type: 3}
|
m_CorrespondingSourceObject: {fileID: 3379767859340007146, guid: 524ca0dabcf93844ea5f981410f44310, type: 3}
|
||||||
@@ -3074,7 +3120,7 @@ PrefabInstance:
|
|||||||
objectReference: {fileID: 1895858033}
|
objectReference: {fileID: 1895858033}
|
||||||
- target: {fileID: 8209576767969738346, guid: 488e1a9d28c26ff4fbd783ca2843ceb4, type: 3}
|
- target: {fileID: 8209576767969738346, guid: 488e1a9d28c26ff4fbd783ca2843ceb4, type: 3}
|
||||||
propertyPath: m_VersionIndex
|
propertyPath: m_VersionIndex
|
||||||
value: 5833
|
value: 5836
|
||||||
objectReference: {fileID: 0}
|
objectReference: {fileID: 0}
|
||||||
m_RemovedComponents: []
|
m_RemovedComponents: []
|
||||||
m_RemovedGameObjects: []
|
m_RemovedGameObjects: []
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
using OctoCore.Localization;
|
||||||
|
|
||||||
namespace Unheimlich.Data.Dialogues
|
namespace Unheimlich.Data.Dialogues
|
||||||
{
|
{
|
||||||
@@ -6,13 +7,8 @@ namespace Unheimlich.Data.Dialogues
|
|||||||
public class DialogueChoiceData
|
public class DialogueChoiceData
|
||||||
{
|
{
|
||||||
[Header("Choice Content")]
|
[Header("Choice Content")]
|
||||||
[TextArea(2, 5)]
|
[Tooltip("Localized text displayed on the choice button")]
|
||||||
[Tooltip("Text displayed on the choice button")]
|
public OctoLocalizedTextData ChoiceText;
|
||||||
public string ChoiceText;
|
|
||||||
|
|
||||||
[Header("Localization")]
|
|
||||||
[Tooltip("Localization key for the choice text")]
|
|
||||||
public string ChoiceTextLocalizationKey;
|
|
||||||
|
|
||||||
[Header("Flow")]
|
[Header("Flow")]
|
||||||
[Tooltip("Direct reference to the next DialogueNode")]
|
[Tooltip("Direct reference to the next DialogueNode")]
|
||||||
@@ -21,10 +17,18 @@ namespace Unheimlich.Data.Dialogues
|
|||||||
[Header("Conditions (Optional)")]
|
[Header("Conditions (Optional)")]
|
||||||
[Tooltip("Required condition to display this choice (optional, for future use)")]
|
[Tooltip("Required condition to display this choice (optional, for future use)")]
|
||||||
public string RequiredCondition;
|
public string RequiredCondition;
|
||||||
|
|
||||||
|
public string GetLocalizedChoiceText()
|
||||||
|
{
|
||||||
|
if (ChoiceText != null)
|
||||||
|
return OctoLocalization.GetLocalizedText(ChoiceText);
|
||||||
|
|
||||||
|
return string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
public bool IsValid()
|
public bool IsValid()
|
||||||
{
|
{
|
||||||
return !string.IsNullOrEmpty(ChoiceText) && NextNode != null;
|
return ChoiceText != null && NextNode != null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
using OctoCore.Localization;
|
||||||
|
|
||||||
namespace Unheimlich.Data.Dialogues
|
namespace Unheimlich.Data.Dialogues
|
||||||
{
|
{
|
||||||
@@ -7,8 +8,8 @@ namespace Unheimlich.Data.Dialogues
|
|||||||
public class DialogueConversation : ScriptableObject
|
public class DialogueConversation : ScriptableObject
|
||||||
{
|
{
|
||||||
[Header("Speaker Information")]
|
[Header("Speaker Information")]
|
||||||
[Tooltip("Name of the speaker (common to all texts in this conversation)")]
|
[Tooltip("Localized name of the speaker (common to all texts in this conversation)")]
|
||||||
public string SpeakerName;
|
public OctoLocalizedTextData SpeakerName;
|
||||||
|
|
||||||
[Header("Display Mode")]
|
[Header("Display Mode")]
|
||||||
[Tooltip("Choose how to display dialogue text: World (3D space) or Screen (Canvas UI)")]
|
[Tooltip("Choose how to display dialogue text: World (3D space) or Screen (Canvas UI)")]
|
||||||
@@ -17,10 +18,14 @@ namespace Unheimlich.Data.Dialogues
|
|||||||
[Header("Dialogue Flow")]
|
[Header("Dialogue Flow")]
|
||||||
[Tooltip("Ordered list of dialogue nodes for this conversation")]
|
[Tooltip("Ordered list of dialogue nodes for this conversation")]
|
||||||
public List<DialogueNode> DialogueNodes = new List<DialogueNode>();
|
public List<DialogueNode> DialogueNodes = new List<DialogueNode>();
|
||||||
|
|
||||||
[Header("Localization")]
|
public string GetLocalizedSpeakerName()
|
||||||
[Tooltip("Localization ID for speaker name (optional)")]
|
{
|
||||||
public string SpeakerNameLocalizationKey;
|
if (SpeakerName != null)
|
||||||
|
return OctoLocalization.GetLocalizedText(SpeakerName);
|
||||||
|
|
||||||
|
return string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
public DialogueNode GetFirstNode()
|
public DialogueNode GetFirstNode()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,55 +1,19 @@
|
|||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using OctoCore.Localization;
|
||||||
|
|
||||||
#if UNITY_EDITOR
|
#if UNITY_EDITOR
|
||||||
using UnityEditor;
|
using UnityEditor;
|
||||||
|
using System.IO;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace Unheimlich.Data.Dialogues
|
namespace Unheimlich.Data.Dialogues
|
||||||
{
|
{
|
||||||
public static class DialogueConversationBuilder
|
public static class DialogueConversationBuilder
|
||||||
{
|
|
||||||
public static DialogueNode CreateSimpleNode(string dialogueText, params (string choiceText, DialogueNode nextNode)[] choices)
|
|
||||||
{
|
{
|
||||||
#if UNITY_EDITOR
|
// Helper methods kept for compatibility but now create localized text data
|
||||||
DialogueNode node = ScriptableObject.CreateInstance<DialogueNode>();
|
|
||||||
node.DialogueText = dialogueText;
|
|
||||||
|
|
||||||
foreach (var choice in choices)
|
|
||||||
{
|
|
||||||
DialogueChoiceData choiceData = new DialogueChoiceData
|
|
||||||
{
|
|
||||||
ChoiceText = choice.choiceText,
|
|
||||||
NextNode = choice.nextNode
|
|
||||||
};
|
|
||||||
node.Choices.Add(choiceData);
|
|
||||||
}
|
|
||||||
|
|
||||||
return node;
|
|
||||||
#else
|
|
||||||
return null;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static DialogueConversation CreateConversation(string speakerName, params DialogueNode[] nodes)
|
|
||||||
{
|
|
||||||
#if UNITY_EDITOR
|
|
||||||
DialogueConversation conversation = ScriptableObject.CreateInstance<DialogueConversation>();
|
|
||||||
conversation.SpeakerName = speakerName;
|
|
||||||
|
|
||||||
foreach (var node in nodes)
|
|
||||||
{
|
|
||||||
if (node != null)
|
|
||||||
conversation.DialogueNodes.Add(node);
|
|
||||||
}
|
|
||||||
|
|
||||||
return conversation;
|
|
||||||
#else
|
|
||||||
return null;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#if UNITY_EDITOR
|
#if UNITY_EDITOR
|
||||||
public class DialogueCreatorWindow : EditorWindow
|
public class DialogueCreatorWindow : EditorWindow
|
||||||
{
|
{
|
||||||
@@ -108,7 +72,7 @@ public class DialogueCreatorWindow : EditorWindow
|
|||||||
{
|
{
|
||||||
EditorGUILayout.Space(10);
|
EditorGUILayout.Space(10);
|
||||||
EditorGUILayout.LabelField("Dialogue Creator", EditorStyles.boldLabel);
|
EditorGUILayout.LabelField("Dialogue Creator", EditorStyles.boldLabel);
|
||||||
EditorGUILayout.HelpBox("Quickly create a complete conversation with all nodes pre-linked!", MessageType.Info);
|
EditorGUILayout.HelpBox("Quickly create a complete conversation with all nodes pre-linked!\nTexts will be created as localized assets (you can edit FR/EN later in Inspector).", MessageType.Info);
|
||||||
|
|
||||||
EditorGUILayout.Space(10);
|
EditorGUILayout.Space(10);
|
||||||
|
|
||||||
@@ -290,6 +254,21 @@ public class DialogueCreatorWindow : EditorWindow
|
|||||||
EditorGUILayout.Space(5);
|
EditorGUILayout.Space(5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private OctoLocalizedTextData CreateLocalizedTextData(string text, string basePath, string suffix)
|
||||||
|
{
|
||||||
|
OctoLocalizedTextData textData = ScriptableObject.CreateInstance<OctoLocalizedTextData>();
|
||||||
|
textData.Init();
|
||||||
|
|
||||||
|
// Set English text by default
|
||||||
|
textData.Languages.Dictionary["English"] = text;
|
||||||
|
textData.Languages.Dictionary["French"] = ""; // Empty, user will fill later
|
||||||
|
|
||||||
|
string textDataPath = AssetDatabase.GenerateUniqueAssetPath($"{basePath}/text_{suffix}.asset");
|
||||||
|
AssetDatabase.CreateAsset(textData, textDataPath);
|
||||||
|
|
||||||
|
return textData;
|
||||||
|
}
|
||||||
|
|
||||||
private void CreateDialogue()
|
private void CreateDialogue()
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(_speakerName) || string.IsNullOrEmpty(_conversationName))
|
if (string.IsNullOrEmpty(_speakerName) || string.IsNullOrEmpty(_conversationName))
|
||||||
@@ -311,20 +290,27 @@ public class DialogueCreatorWindow : EditorWindow
|
|||||||
AssetDatabase.CreateFolder(parentFolder, _conversationName);
|
AssetDatabase.CreateFolder(parentFolder, _conversationName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Create speaker name localized text
|
||||||
|
OctoLocalizedTextData speakerNameData = CreateLocalizedTextData(_speakerName, folderPath, "SpeakerName");
|
||||||
|
|
||||||
List<DialogueNode> createdNodes = new List<DialogueNode>();
|
List<DialogueNode> createdNodes = new List<DialogueNode>();
|
||||||
|
|
||||||
|
// Create nodes
|
||||||
for (int i = 0; i < _nodes.Count; i++)
|
for (int i = 0; i < _nodes.Count; i++)
|
||||||
{
|
{
|
||||||
NodeTemplate template = _nodes[i];
|
NodeTemplate template = _nodes[i];
|
||||||
DialogueNode node = CreateInstance<DialogueNode>();
|
DialogueNode node = CreateInstance<DialogueNode>();
|
||||||
node.DialogueText = template.NodeText;
|
|
||||||
node.name = $"Node_{i + 1}";
|
node.name = $"Node_{i + 1}";
|
||||||
|
|
||||||
|
// Create localized text for dialogue
|
||||||
|
node.DialogueText = CreateLocalizedTextData(template.NodeText, folderPath, $"Node{i + 1}_Text");
|
||||||
|
|
||||||
string nodePath = $"{folderPath}/{node.name}.asset";
|
string nodePath = $"{folderPath}/{node.name}.asset";
|
||||||
AssetDatabase.CreateAsset(node, nodePath);
|
AssetDatabase.CreateAsset(node, nodePath);
|
||||||
createdNodes.Add(node);
|
createdNodes.Add(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Link choices
|
||||||
for (int i = 0; i < _nodes.Count; i++)
|
for (int i = 0; i < _nodes.Count; i++)
|
||||||
{
|
{
|
||||||
NodeTemplate template = _nodes[i];
|
NodeTemplate template = _nodes[i];
|
||||||
@@ -334,9 +320,16 @@ public class DialogueCreatorWindow : EditorWindow
|
|||||||
{
|
{
|
||||||
int targetIndex = Mathf.Clamp(choiceTemplate.TargetNodeIndex, 0, createdNodes.Count - 1);
|
int targetIndex = Mathf.Clamp(choiceTemplate.TargetNodeIndex, 0, createdNodes.Count - 1);
|
||||||
|
|
||||||
|
// Create localized text for choice
|
||||||
|
OctoLocalizedTextData choiceTextData = CreateLocalizedTextData(
|
||||||
|
choiceTemplate.Text,
|
||||||
|
folderPath,
|
||||||
|
$"Node{i + 1}_Choice{template.Choices.IndexOf(choiceTemplate)}"
|
||||||
|
);
|
||||||
|
|
||||||
DialogueChoiceData choice = new DialogueChoiceData
|
DialogueChoiceData choice = new DialogueChoiceData
|
||||||
{
|
{
|
||||||
ChoiceText = choiceTemplate.Text,
|
ChoiceText = choiceTextData,
|
||||||
NextNode = createdNodes[targetIndex]
|
NextNode = createdNodes[targetIndex]
|
||||||
};
|
};
|
||||||
currentNode.Choices.Add(choice);
|
currentNode.Choices.Add(choice);
|
||||||
@@ -345,8 +338,9 @@ public class DialogueCreatorWindow : EditorWindow
|
|||||||
EditorUtility.SetDirty(currentNode);
|
EditorUtility.SetDirty(currentNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Create conversation
|
||||||
DialogueConversation conversation = CreateInstance<DialogueConversation>();
|
DialogueConversation conversation = CreateInstance<DialogueConversation>();
|
||||||
conversation.SpeakerName = _speakerName;
|
conversation.SpeakerName = speakerNameData;
|
||||||
conversation.name = _conversationName;
|
conversation.name = _conversationName;
|
||||||
conversation.DialogueNodes = createdNodes;
|
conversation.DialogueNodes = createdNodes;
|
||||||
|
|
||||||
@@ -359,7 +353,14 @@ public class DialogueCreatorWindow : EditorWindow
|
|||||||
EditorGUIUtility.PingObject(conversation);
|
EditorGUIUtility.PingObject(conversation);
|
||||||
Selection.activeObject = conversation;
|
Selection.activeObject = conversation;
|
||||||
|
|
||||||
EditorUtility.DisplayDialog("Success", $"Conversation '{_conversationName}' created with {_nodes.Count} nodes!\n\nPath: {folderPath}", "OK");
|
EditorUtility.DisplayDialog(
|
||||||
|
"Success",
|
||||||
|
$"Conversation '{_conversationName}' created with {_nodes.Count} nodes!\n\n" +
|
||||||
|
$"Path: {folderPath}\n\n" +
|
||||||
|
$"📝 Note: All texts are in English by default.\n" +
|
||||||
|
$"Open each DialogueNode in the Inspector to add French translations!",
|
||||||
|
"OK"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
using OctoCore.Localization;
|
||||||
|
|
||||||
namespace Unheimlich.Data.Dialogues
|
namespace Unheimlich.Data.Dialogues
|
||||||
{
|
{
|
||||||
@@ -7,13 +8,8 @@ namespace Unheimlich.Data.Dialogues
|
|||||||
public class DialogueNode : ScriptableObject
|
public class DialogueNode : ScriptableObject
|
||||||
{
|
{
|
||||||
[Header("Content")]
|
[Header("Content")]
|
||||||
[TextArea(3, 10)]
|
[Tooltip("Localized text displayed for this dialogue node")]
|
||||||
[Tooltip("Text displayed for this dialogue node")]
|
public OctoLocalizedTextData DialogueText;
|
||||||
public string DialogueText;
|
|
||||||
|
|
||||||
[Header("Localization")]
|
|
||||||
[Tooltip("Localization key for the dialogue text")]
|
|
||||||
public string DialogueTextLocalizationKey;
|
|
||||||
|
|
||||||
[Header("Choices")]
|
[Header("Choices")]
|
||||||
[Tooltip("List of available choices for this dialogue. If empty, this is an end node")]
|
[Tooltip("List of available choices for this dialogue. If empty, this is an end node")]
|
||||||
@@ -22,6 +18,14 @@ namespace Unheimlich.Data.Dialogues
|
|||||||
[Header("End Node Settings")]
|
[Header("End Node Settings")]
|
||||||
[Tooltip("For end nodes (no choices), delay in seconds before automatic close. 0 = requires player interaction to close")]
|
[Tooltip("For end nodes (no choices), delay in seconds before automatic close. 0 = requires player interaction to close")]
|
||||||
public float AutoCloseDelay = 3f;
|
public float AutoCloseDelay = 3f;
|
||||||
|
|
||||||
|
public string GetLocalizedDialogueText()
|
||||||
|
{
|
||||||
|
if (DialogueText != null)
|
||||||
|
return OctoLocalization.GetLocalizedText(DialogueText);
|
||||||
|
|
||||||
|
return string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
public bool IsEndNode()
|
public bool IsEndNode()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: c07f3bd13606c2c4aa5fbbc6c175809e
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
using OctoCore.Localization;
|
||||||
|
using UnityEngine.InputSystem;
|
||||||
|
|
||||||
|
namespace Unheimlich.Tools
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Simple debug script to switch language at runtime.
|
||||||
|
/// Attach to any GameObject and press keys to change language.
|
||||||
|
/// </summary>
|
||||||
|
public class LanguageSwitcher : MonoBehaviour
|
||||||
|
{
|
||||||
|
[Header("Info")]
|
||||||
|
[Tooltip("Current language")]
|
||||||
|
[SerializeField] private OctoLanguages _currentLanguage;
|
||||||
|
|
||||||
|
void Start()
|
||||||
|
{
|
||||||
|
if (OctoCore.OctoCore.Instance != null && OctoCore.OctoCore.Instance.Localization != null)
|
||||||
|
{
|
||||||
|
_currentLanguage = OctoCore.OctoCore.Instance.Localization.WrittenLanguage;
|
||||||
|
UnityEngine.Debug.Log($"[LanguageSwitcher] Current language: {_currentLanguage}");
|
||||||
|
UnityEngine.Debug.Log($"[LanguageSwitcher] Press F1 for English, F2 for French");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Update()
|
||||||
|
{
|
||||||
|
if (OctoCore.OctoCore.Instance == null || OctoCore.OctoCore.Instance.Localization == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (Keyboard.current == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (Keyboard.current.f1Key.wasPressedThisFrame)
|
||||||
|
{
|
||||||
|
SetLanguage(OctoLanguages.English);
|
||||||
|
}
|
||||||
|
else if (Keyboard.current.f2Key.wasPressedThisFrame)
|
||||||
|
{
|
||||||
|
SetLanguage(OctoLanguages.French);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetLanguage(OctoLanguages language)
|
||||||
|
{
|
||||||
|
OctoCore.OctoCore.Instance.Localization.SetLanguageWritten(language);
|
||||||
|
_currentLanguage = language;
|
||||||
|
|
||||||
|
UnityEngine.Debug.Log($"<color=green>[LanguageSwitcher]</color> Language changed to: <color=yellow>{language}</color>");
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnGUI()
|
||||||
|
{
|
||||||
|
// Display current language in top-left corner
|
||||||
|
if (OctoCore.OctoCore.Instance != null && OctoCore.OctoCore.Instance.Localization != null)
|
||||||
|
{
|
||||||
|
GUI.color = Color.yellow;
|
||||||
|
GUI.Label(new Rect(10, 10, 300, 30), $"Language: {_currentLanguage}");
|
||||||
|
GUI.Label(new Rect(10, 30, 300, 30), $"[F1] EN | [F2] FR");
|
||||||
|
GUI.color = Color.white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 86180434dad93e344b4a5229575d4757
|
||||||
@@ -6,7 +6,6 @@ using Unheimlich.Data.Dialogues;
|
|||||||
public class DialogueConversationEditor : Editor
|
public class DialogueConversationEditor : Editor
|
||||||
{
|
{
|
||||||
private SerializedProperty _speakerNameProp;
|
private SerializedProperty _speakerNameProp;
|
||||||
private SerializedProperty _speakerNameLocalizationKeyProp;
|
|
||||||
private SerializedProperty _displayModeProp;
|
private SerializedProperty _displayModeProp;
|
||||||
private SerializedProperty _dialogueNodesProp;
|
private SerializedProperty _dialogueNodesProp;
|
||||||
|
|
||||||
@@ -37,7 +36,6 @@ public class DialogueConversationEditor : Editor
|
|||||||
private void OnEnable()
|
private void OnEnable()
|
||||||
{
|
{
|
||||||
_speakerNameProp = serializedObject.FindProperty("SpeakerName");
|
_speakerNameProp = serializedObject.FindProperty("SpeakerName");
|
||||||
_speakerNameLocalizationKeyProp = serializedObject.FindProperty("SpeakerNameLocalizationKey");
|
|
||||||
_displayModeProp = serializedObject.FindProperty("DisplayMode");
|
_displayModeProp = serializedObject.FindProperty("DisplayMode");
|
||||||
_dialogueNodesProp = serializedObject.FindProperty("DialogueNodes");
|
_dialogueNodesProp = serializedObject.FindProperty("DialogueNodes");
|
||||||
}
|
}
|
||||||
@@ -50,7 +48,6 @@ public class DialogueConversationEditor : Editor
|
|||||||
|
|
||||||
EditorGUILayout.LabelField("Conversation Setup", EditorStyles.boldLabel);
|
EditorGUILayout.LabelField("Conversation Setup", EditorStyles.boldLabel);
|
||||||
EditorGUILayout.PropertyField(_speakerNameProp);
|
EditorGUILayout.PropertyField(_speakerNameProp);
|
||||||
EditorGUILayout.PropertyField(_speakerNameLocalizationKeyProp, new GUIContent("Localization Key (Optional)"));
|
|
||||||
|
|
||||||
EditorGUILayout.Space(5);
|
EditorGUILayout.Space(5);
|
||||||
|
|
||||||
|
|||||||
@@ -6,14 +6,12 @@ using Unheimlich.Data.Dialogues;
|
|||||||
public class DialogueNodeEditor : Editor
|
public class DialogueNodeEditor : Editor
|
||||||
{
|
{
|
||||||
private SerializedProperty _dialogueTextProp;
|
private SerializedProperty _dialogueTextProp;
|
||||||
private SerializedProperty _dialogueTextLocalizationKeyProp;
|
|
||||||
private SerializedProperty _choicesProp;
|
private SerializedProperty _choicesProp;
|
||||||
private SerializedProperty _autoCloseDelayProp;
|
private SerializedProperty _autoCloseDelayProp;
|
||||||
|
|
||||||
private void OnEnable()
|
private void OnEnable()
|
||||||
{
|
{
|
||||||
_dialogueTextProp = serializedObject.FindProperty("DialogueText");
|
_dialogueTextProp = serializedObject.FindProperty("DialogueText");
|
||||||
_dialogueTextLocalizationKeyProp = serializedObject.FindProperty("DialogueTextLocalizationKey");
|
|
||||||
_choicesProp = serializedObject.FindProperty("Choices");
|
_choicesProp = serializedObject.FindProperty("Choices");
|
||||||
_autoCloseDelayProp = serializedObject.FindProperty("AutoCloseDelay");
|
_autoCloseDelayProp = serializedObject.FindProperty("AutoCloseDelay");
|
||||||
}
|
}
|
||||||
@@ -26,7 +24,6 @@ public class DialogueNodeEditor : Editor
|
|||||||
|
|
||||||
EditorGUILayout.LabelField("Node Content", EditorStyles.boldLabel);
|
EditorGUILayout.LabelField("Node Content", EditorStyles.boldLabel);
|
||||||
EditorGUILayout.PropertyField(_dialogueTextProp);
|
EditorGUILayout.PropertyField(_dialogueTextProp);
|
||||||
EditorGUILayout.PropertyField(_dialogueTextLocalizationKeyProp, new GUIContent("Localization Key (Optional)"));
|
|
||||||
|
|
||||||
EditorGUILayout.Space(10);
|
EditorGUILayout.Space(10);
|
||||||
|
|
||||||
@@ -89,7 +86,7 @@ public class DialogueNodeEditor : Editor
|
|||||||
|
|
||||||
DialogueChoiceData newChoice = new DialogueChoiceData
|
DialogueChoiceData newChoice = new DialogueChoiceData
|
||||||
{
|
{
|
||||||
ChoiceText = "New choice",
|
ChoiceText = null, // Will need to assign OctoLocalizedTextData manually
|
||||||
NextNode = null
|
NextNode = null
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,127 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
using UnityEditor;
|
||||||
|
using OctoCore.Localization;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
|
namespace Unheimlich.Editor
|
||||||
|
{
|
||||||
|
[CustomPropertyDrawer(typeof(OctoLocalizedTextData))]
|
||||||
|
public class LocalizedTextFieldDrawer : PropertyDrawer
|
||||||
|
{
|
||||||
|
private const float LINE_HEIGHT = 20f;
|
||||||
|
private const float SPACING = 2f;
|
||||||
|
private const float LABEL_WIDTH = 80f;
|
||||||
|
|
||||||
|
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
|
||||||
|
{
|
||||||
|
// Height for label + EN field + FR field
|
||||||
|
return LINE_HEIGHT * 3 + SPACING * 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
|
||||||
|
{
|
||||||
|
EditorGUI.BeginProperty(position, label, property);
|
||||||
|
|
||||||
|
OctoLocalizedTextData textData = property.objectReferenceValue as OctoLocalizedTextData;
|
||||||
|
|
||||||
|
// If null, create new OctoLocalizedTextData
|
||||||
|
if (textData == null)
|
||||||
|
{
|
||||||
|
textData = CreateLocalizedTextData(property);
|
||||||
|
property.objectReferenceValue = textData;
|
||||||
|
property.serializedObject.ApplyModifiedProperties();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Draw label
|
||||||
|
Rect labelRect = new Rect(position.x, position.y, position.width, LINE_HEIGHT);
|
||||||
|
EditorGUI.LabelField(labelRect, label, EditorStyles.boldLabel);
|
||||||
|
|
||||||
|
// Draw EN field
|
||||||
|
Rect enRect = new Rect(position.x, position.y + LINE_HEIGHT + SPACING, position.width, LINE_HEIGHT);
|
||||||
|
DrawLanguageField(enRect, textData, OctoLanguages.English, "EN");
|
||||||
|
|
||||||
|
// Draw FR field
|
||||||
|
Rect frRect = new Rect(position.x, position.y + (LINE_HEIGHT + SPACING) * 2, position.width, LINE_HEIGHT);
|
||||||
|
DrawLanguageField(frRect, textData, OctoLanguages.French, "FR");
|
||||||
|
|
||||||
|
EditorGUI.EndProperty();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DrawLanguageField(Rect position, OctoLocalizedTextData textData, OctoLanguages language, string labelText)
|
||||||
|
{
|
||||||
|
if (textData == null) return;
|
||||||
|
|
||||||
|
// Ensure dictionary is initialized
|
||||||
|
if (textData.Languages.Dictionary == null || textData.Languages.Dictionary.Count == 0)
|
||||||
|
{
|
||||||
|
#if UNITY_EDITOR
|
||||||
|
textData.Init();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get language key
|
||||||
|
string langKey = language.ToString();
|
||||||
|
|
||||||
|
// Get current value
|
||||||
|
string currentValue = "";
|
||||||
|
if (textData.Languages.Dictionary.TryGetValue(langKey, out string value))
|
||||||
|
{
|
||||||
|
currentValue = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Draw label
|
||||||
|
Rect labelRect = new Rect(position.x, position.y, LABEL_WIDTH, position.height);
|
||||||
|
EditorGUI.LabelField(labelRect, labelText + ":");
|
||||||
|
|
||||||
|
// Draw text field
|
||||||
|
Rect fieldRect = new Rect(position.x + LABEL_WIDTH, position.y, position.width - LABEL_WIDTH, position.height);
|
||||||
|
|
||||||
|
EditorGUI.BeginChangeCheck();
|
||||||
|
string newValue = EditorGUI.TextField(fieldRect, currentValue);
|
||||||
|
|
||||||
|
if (EditorGUI.EndChangeCheck())
|
||||||
|
{
|
||||||
|
// Update via indexer (Dictionary is read-only property but supports indexer)
|
||||||
|
textData.Languages.Dictionary[langKey] = newValue;
|
||||||
|
EditorUtility.SetDirty(textData);
|
||||||
|
AssetDatabase.SaveAssets();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private OctoLocalizedTextData CreateLocalizedTextData(SerializedProperty property)
|
||||||
|
{
|
||||||
|
// Get the object being edited
|
||||||
|
Object targetObject = property.serializedObject.targetObject;
|
||||||
|
string assetPath = AssetDatabase.GetAssetPath(targetObject);
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(assetPath))
|
||||||
|
return null;
|
||||||
|
|
||||||
|
string directory = Path.GetDirectoryName(assetPath);
|
||||||
|
string fileName = Path.GetFileNameWithoutExtension(assetPath);
|
||||||
|
string propertyPath = property.propertyPath.Replace(".", "_");
|
||||||
|
|
||||||
|
// Create unique name
|
||||||
|
string textDataName = $"text_{fileName}_{propertyPath}";
|
||||||
|
string textDataPath = $"{directory}/{textDataName}.asset";
|
||||||
|
|
||||||
|
// Check if already exists
|
||||||
|
OctoLocalizedTextData existingData = AssetDatabase.LoadAssetAtPath<OctoLocalizedTextData>(textDataPath);
|
||||||
|
if (existingData != null)
|
||||||
|
return existingData;
|
||||||
|
|
||||||
|
// Create new OctoLocalizedTextData
|
||||||
|
OctoLocalizedTextData newTextData = ScriptableObject.CreateInstance<OctoLocalizedTextData>();
|
||||||
|
|
||||||
|
// Initialize via Init() method
|
||||||
|
newTextData.Init();
|
||||||
|
|
||||||
|
// Save asset
|
||||||
|
AssetDatabase.CreateAsset(newTextData, textDataPath);
|
||||||
|
AssetDatabase.SaveAssets();
|
||||||
|
AssetDatabase.Refresh();
|
||||||
|
|
||||||
|
return newTextData;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 6566d44f45287f943b77aa92aaefeeb0
|
||||||
@@ -49,7 +49,6 @@ namespace Unheimlich.Handlers.DetectiveBoard
|
|||||||
DetectiveBoardManager.Instance.UnlockClue(_clueToUnlock);
|
DetectiveBoardManager.Instance.UnlockClue(_clueToUnlock);
|
||||||
_hasUnlocked = true;
|
_hasUnlocked = true;
|
||||||
|
|
||||||
Debug.Log($"[ClueUnlockOnInteraction] Unlocked clue: {_clueToUnlock.Title} via interaction");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_inspectableItem != null)
|
if (_inspectableItem != null)
|
||||||
|
|||||||
+1
-1
@@ -22,7 +22,7 @@ namespace Unheimlich.Interactions.FloatingWords
|
|||||||
|
|
||||||
public string GetChoiceText()
|
public string GetChoiceText()
|
||||||
{
|
{
|
||||||
return DialogueData?.ChoiceText ?? string.Empty;
|
return DialogueData?.GetLocalizedChoiceText() ?? string.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DialogueNode GetNextNode()
|
public DialogueNode GetNextNode()
|
||||||
|
|||||||
@@ -2,12 +2,17 @@ using UnityEngine;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Unheimlich.Data.Dialogues;
|
using Unheimlich.Data.Dialogues;
|
||||||
using Unheimlich.Gameplay.Player;
|
using Unheimlich.Gameplay.Player;
|
||||||
|
using OctoCore.Localization;
|
||||||
|
|
||||||
namespace Unheimlich.Interactions.FloatingWords
|
namespace Unheimlich.Interactions.FloatingWords
|
||||||
{
|
{
|
||||||
public class ObjectDescriptionTrigger : MonoBehaviour
|
public class ObjectDescriptionTrigger : MonoBehaviour
|
||||||
{
|
{
|
||||||
[Header("Description")]
|
[Header("Description")]
|
||||||
|
[Tooltip("Localized description text (recommended)")]
|
||||||
|
[SerializeField] private OctoLocalizedTextData _descriptionTextLocalized;
|
||||||
|
|
||||||
|
[Tooltip("Fallback description text if localized version is not set")]
|
||||||
[SerializeField] private string _descriptionText = "Mysterious Object";
|
[SerializeField] private string _descriptionText = "Mysterious Object";
|
||||||
|
|
||||||
[Header("Settings")]
|
[Header("Settings")]
|
||||||
@@ -99,12 +104,16 @@ namespace Unheimlich.Interactions.FloatingWords
|
|||||||
ObjectDescriptionTriggerReference triggerRef = _wordsRotator.AddComponent<ObjectDescriptionTriggerReference>();
|
ObjectDescriptionTriggerReference triggerRef = _wordsRotator.AddComponent<ObjectDescriptionTriggerReference>();
|
||||||
triggerRef.Trigger = this;
|
triggerRef.Trigger = this;
|
||||||
|
|
||||||
|
string descText = _descriptionTextLocalized != null
|
||||||
|
? OctoLocalization.GetLocalizedText(_descriptionTextLocalized)
|
||||||
|
: _descriptionText;
|
||||||
|
|
||||||
List<DialogueChoiceData> dummyChoices = new List<DialogueChoiceData>();
|
List<DialogueChoiceData> dummyChoices = new List<DialogueChoiceData>();
|
||||||
for (int i = 0; i < _settings.WordCount; i++)
|
for (int i = 0; i < _settings.WordCount; i++)
|
||||||
{
|
{
|
||||||
dummyChoices.Add(new DialogueChoiceData
|
dummyChoices.Add(new DialogueChoiceData
|
||||||
{
|
{
|
||||||
ChoiceText = _descriptionText,
|
ChoiceText = _descriptionTextLocalized,
|
||||||
NextNode = null
|
NextNode = null
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -158,8 +158,8 @@ namespace Unheimlich.Managers
|
|||||||
}
|
}
|
||||||
Transform anchor = _currentChoiceAnchor;
|
Transform anchor = _currentChoiceAnchor;
|
||||||
|
|
||||||
string speakerName = _currentConversation.SpeakerName;
|
string speakerName = _currentConversation.GetLocalizedSpeakerName();
|
||||||
string dialogueText = _currentNode.DialogueText;
|
string dialogueText = _currentNode.GetLocalizedDialogueText();
|
||||||
DialogueDisplayMode displayMode = _currentConversation.DisplayMode;
|
DialogueDisplayMode displayMode = _currentConversation.DisplayMode;
|
||||||
|
|
||||||
_activeDialogueUI.ShowDialogueBox(speakerName, dialogueText, displayMode);
|
_activeDialogueUI.ShowDialogueBox(speakerName, dialogueText, displayMode);
|
||||||
|
|||||||
@@ -42,27 +42,21 @@ namespace Unheimlich.Managers
|
|||||||
|
|
||||||
private void Start()
|
private void Start()
|
||||||
{
|
{
|
||||||
Debug.Log("[InputManager] Start() called");
|
|
||||||
|
|
||||||
if (OctoCore.OctoCore.Instance == null)
|
if (OctoCore.OctoCore.Instance == null)
|
||||||
{
|
{
|
||||||
Debug.LogError("[InputManager] OctoCore.Instance is NULL!");
|
Debug.LogError("[InputManager] OctoCore.Instance is NULL!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Debug.Log("[InputManager] OctoCore.Instance exists");
|
|
||||||
|
|
||||||
if (OctoCore.OctoCore.Instance.Inputs == null)
|
if (OctoCore.OctoCore.Instance.Inputs == null)
|
||||||
{
|
{
|
||||||
Debug.LogError("[InputManager] OctoCore.Instance.Inputs is NULL!");
|
Debug.LogError("[InputManager] OctoCore.Instance.Inputs is NULL!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Debug.Log("[InputManager] OctoCore.Instance.Inputs exists");
|
|
||||||
|
|
||||||
// Ensure we're subscribed
|
// Ensure we're subscribed
|
||||||
SubscribeAllInputs();
|
SubscribeAllInputs();
|
||||||
Debug.Log("[InputManager] Initialized and subscribed to OctoCore inputs.");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnDestroy()
|
private void OnDestroy()
|
||||||
|
|||||||
@@ -114,7 +114,6 @@ namespace Unheimlich.UI.DetectiveBoard
|
|||||||
|
|
||||||
private void OnClueUnlocked(ClueData clueData)
|
private void OnClueUnlocked(ClueData clueData)
|
||||||
{
|
{
|
||||||
Debug.Log($"[DetectiveBoardCanvas] OnClueUnlocked received for: {clueData.ClueID}");
|
|
||||||
AddClueNode(clueData);
|
AddClueNode(clueData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -71,7 +71,6 @@ namespace OctoCore
|
|||||||
if (Instance == null)
|
if (Instance == null)
|
||||||
{
|
{
|
||||||
Instance = this;
|
Instance = this;
|
||||||
Debug.Log($"[OctoCore] OctoCore Instantiated");
|
|
||||||
DontDestroyOnLoad(gameObject);
|
DontDestroyOnLoad(gameObject);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
<Solution>
|
<Solution>
|
||||||
<Project Path="OctoCore.Runtime.csproj" />
|
|
||||||
<Project Path="Assembly-CSharp-Editor.csproj" />
|
<Project Path="Assembly-CSharp-Editor.csproj" />
|
||||||
|
<Project Path="OctoCore.Runtime.csproj" />
|
||||||
<Project Path="OctoCore.Editor.csproj" />
|
<Project Path="OctoCore.Editor.csproj" />
|
||||||
<Project Path="Assembly-CSharp.csproj" />
|
<Project Path="Assembly-CSharp.csproj" />
|
||||||
<Project Path="Bezi.Editor.csproj" />
|
<Project Path="Bezi.Editor.csproj" />
|
||||||
|
|||||||
Reference in New Issue
Block a user