Compare commits
10 Commits
unity_time
...
dialogue_i
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1224d1ba03 | ||
|
|
5ad3ae8815 | ||
|
|
1a05f89226 | ||
|
|
d6ed35969d | ||
| 0a553162a6 | |||
| dea470f93f | |||
|
|
d0d785d605 | ||
|
|
eb938f9adb | ||
| 10992b43cc | |||
|
|
f845673eca |
@@ -1,5 +1,31 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1102 &-6841130024917635350
|
||||
AnimatorState:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: WolterBushIdle
|
||||
m_Speed: 1
|
||||
m_CycleOffset: 0
|
||||
m_Transitions: []
|
||||
m_StateMachineBehaviours: []
|
||||
m_Position: {x: 50, y: 50, z: 0}
|
||||
m_IKOnFeet: 0
|
||||
m_WriteDefaultValues: 1
|
||||
m_Mirror: 0
|
||||
m_SpeedParameterActive: 0
|
||||
m_MirrorParameterActive: 0
|
||||
m_CycleOffsetParameterActive: 0
|
||||
m_TimeParameterActive: 0
|
||||
m_Motion: {fileID: 7400000, guid: 9f6badd41620fcc4ca57350469e3cd8c, type: 2}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
--- !u!1107 &-4566849210467046986
|
||||
AnimatorStateMachine:
|
||||
serializedVersion: 6
|
||||
@@ -8,7 +34,13 @@ AnimatorStateMachine:
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: Base Layer
|
||||
m_ChildStates: []
|
||||
m_ChildStates:
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: 5529887278422423141}
|
||||
m_Position: {x: 30, y: 310, z: 0}
|
||||
- serializedVersion: 1
|
||||
m_State: {fileID: -6841130024917635350}
|
||||
m_Position: {x: 290, y: 310, z: 0}
|
||||
m_ChildStateMachines: []
|
||||
m_AnyStateTransitions: []
|
||||
m_EntryTransitions: []
|
||||
@@ -18,7 +50,7 @@ AnimatorStateMachine:
|
||||
m_EntryPosition: {x: 50, y: 120, z: 0}
|
||||
m_ExitPosition: {x: 800, y: 120, z: 0}
|
||||
m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
|
||||
m_DefaultState: {fileID: 0}
|
||||
m_DefaultState: {fileID: 5529887278422423141}
|
||||
--- !u!91 &9100000
|
||||
AnimatorController:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -27,7 +59,13 @@ AnimatorController:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: WolterBushAnimController
|
||||
serializedVersion: 5
|
||||
m_AnimatorParameters: []
|
||||
m_AnimatorParameters:
|
||||
- m_Name: wolterisout
|
||||
m_Type: 9
|
||||
m_DefaultFloat: 0
|
||||
m_DefaultInt: 0
|
||||
m_DefaultBool: 0
|
||||
m_Controller: {fileID: 9100000}
|
||||
m_AnimatorLayers:
|
||||
- serializedVersion: 5
|
||||
m_Name: Base Layer
|
||||
@@ -41,3 +79,55 @@ AnimatorController:
|
||||
m_IKPass: 0
|
||||
m_SyncedLayerAffectsTiming: 0
|
||||
m_Controller: {fileID: 9100000}
|
||||
--- !u!1101 &4202584828236461532
|
||||
AnimatorStateTransition:
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name:
|
||||
m_Conditions:
|
||||
- m_ConditionMode: 1
|
||||
m_ConditionEvent: wolterisout
|
||||
m_EventTreshold: 0
|
||||
m_DstStateMachine: {fileID: 0}
|
||||
m_DstState: {fileID: -6841130024917635350}
|
||||
m_Solo: 0
|
||||
m_Mute: 0
|
||||
m_IsExit: 0
|
||||
serializedVersion: 3
|
||||
m_TransitionDuration: 0.25
|
||||
m_TransitionOffset: 0
|
||||
m_ExitTime: 0.75
|
||||
m_HasExitTime: 1
|
||||
m_HasFixedDuration: 1
|
||||
m_InterruptionSource: 0
|
||||
m_OrderedInterruption: 1
|
||||
m_CanTransitionToSelf: 1
|
||||
--- !u!1102 &5529887278422423141
|
||||
AnimatorState:
|
||||
serializedVersion: 6
|
||||
m_ObjectHideFlags: 1
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: WolterBushShaky
|
||||
m_Speed: 1
|
||||
m_CycleOffset: 0
|
||||
m_Transitions:
|
||||
- {fileID: 4202584828236461532}
|
||||
m_StateMachineBehaviours: []
|
||||
m_Position: {x: 50, y: 50, z: 0}
|
||||
m_IKOnFeet: 0
|
||||
m_WriteDefaultValues: 1
|
||||
m_Mirror: 0
|
||||
m_SpeedParameterActive: 0
|
||||
m_MirrorParameterActive: 0
|
||||
m_CycleOffsetParameterActive: 0
|
||||
m_TimeParameterActive: 0
|
||||
m_Motion: {fileID: 7400000, guid: 8c3c7d49344be8b41a6c0567329570fa, type: 2}
|
||||
m_Tag:
|
||||
m_SpeedParameter:
|
||||
m_MirrorParameter:
|
||||
m_CycleOffsetParameter:
|
||||
m_TimeParameter:
|
||||
|
||||
@@ -17,21 +17,40 @@ AnimationClip:
|
||||
m_PositionCurves: []
|
||||
m_ScaleCurves: []
|
||||
m_FloatCurves: []
|
||||
m_PPtrCurves: []
|
||||
m_PPtrCurves:
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
- time: 0
|
||||
value: {fileID: 5790909876540137479, guid: d27cc24bf161b644d8152e74a52d8310, type: 3}
|
||||
attribute: m_Sprite
|
||||
path:
|
||||
classID: 212
|
||||
script: {fileID: 0}
|
||||
flags: 2
|
||||
m_SampleRate: 60
|
||||
m_WrapMode: 0
|
||||
m_Bounds:
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_Extent: {x: 0, y: 0, z: 0}
|
||||
m_ClipBindingConstant:
|
||||
genericBindings: []
|
||||
pptrCurveMapping: []
|
||||
genericBindings:
|
||||
- serializedVersion: 2
|
||||
path: 0
|
||||
attribute: 0
|
||||
script: {fileID: 0}
|
||||
typeID: 212
|
||||
customType: 23
|
||||
isPPtrCurve: 1
|
||||
isIntCurve: 0
|
||||
isSerializeReferenceCurve: 0
|
||||
pptrCurveMapping:
|
||||
- {fileID: 5790909876540137479, guid: d27cc24bf161b644d8152e74a52d8310, type: 3}
|
||||
m_AnimationClipSettings:
|
||||
serializedVersion: 2
|
||||
m_AdditiveReferencePoseClip: {fileID: 0}
|
||||
m_AdditiveReferencePoseTime: 0
|
||||
m_StartTime: 0
|
||||
m_StopTime: 1
|
||||
m_StopTime: 0.016666668
|
||||
m_OrientationOffsetY: 0
|
||||
m_Level: 0
|
||||
m_CycleOffset: 0
|
||||
|
||||
@@ -17,21 +17,70 @@ AnimationClip:
|
||||
m_PositionCurves: []
|
||||
m_ScaleCurves: []
|
||||
m_FloatCurves: []
|
||||
m_PPtrCurves: []
|
||||
m_PPtrCurves:
|
||||
- serializedVersion: 2
|
||||
curve:
|
||||
- time: 0
|
||||
value: {fileID: 5790909876540137479, guid: d27cc24bf161b644d8152e74a52d8310, type: 3}
|
||||
- time: 0.11666667
|
||||
value: {fileID: 356313213695173180, guid: d27cc24bf161b644d8152e74a52d8310, type: 3}
|
||||
- time: 0.25
|
||||
value: {fileID: -8142908360652288411, guid: d27cc24bf161b644d8152e74a52d8310, type: 3}
|
||||
- time: 0.35
|
||||
value: {fileID: -8752346798096107195, guid: d27cc24bf161b644d8152e74a52d8310, type: 3}
|
||||
- time: 0.46666667
|
||||
value: {fileID: -6324821020194428341, guid: d27cc24bf161b644d8152e74a52d8310, type: 3}
|
||||
- time: 0.5833333
|
||||
value: {fileID: 196032492730712452, guid: d27cc24bf161b644d8152e74a52d8310, type: 3}
|
||||
- time: 0.7
|
||||
value: {fileID: -6324821020194428341, guid: d27cc24bf161b644d8152e74a52d8310, type: 3}
|
||||
- time: 0.81666666
|
||||
value: {fileID: -8752346798096107195, guid: d27cc24bf161b644d8152e74a52d8310, type: 3}
|
||||
- time: 0.9166667
|
||||
value: {fileID: -8142908360652288411, guid: d27cc24bf161b644d8152e74a52d8310, type: 3}
|
||||
- time: 1.05
|
||||
value: {fileID: 356313213695173180, guid: d27cc24bf161b644d8152e74a52d8310, type: 3}
|
||||
- time: 1.1666666
|
||||
value: {fileID: 5790909876540137479, guid: d27cc24bf161b644d8152e74a52d8310, type: 3}
|
||||
attribute: m_Sprite
|
||||
path:
|
||||
classID: 212
|
||||
script: {fileID: 0}
|
||||
flags: 2
|
||||
m_SampleRate: 60
|
||||
m_WrapMode: 0
|
||||
m_Bounds:
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
m_Extent: {x: 0, y: 0, z: 0}
|
||||
m_ClipBindingConstant:
|
||||
genericBindings: []
|
||||
pptrCurveMapping: []
|
||||
genericBindings:
|
||||
- serializedVersion: 2
|
||||
path: 0
|
||||
attribute: 0
|
||||
script: {fileID: 0}
|
||||
typeID: 212
|
||||
customType: 23
|
||||
isPPtrCurve: 1
|
||||
isIntCurve: 0
|
||||
isSerializeReferenceCurve: 0
|
||||
pptrCurveMapping:
|
||||
- {fileID: 5790909876540137479, guid: d27cc24bf161b644d8152e74a52d8310, type: 3}
|
||||
- {fileID: 356313213695173180, guid: d27cc24bf161b644d8152e74a52d8310, type: 3}
|
||||
- {fileID: -8142908360652288411, guid: d27cc24bf161b644d8152e74a52d8310, type: 3}
|
||||
- {fileID: -8752346798096107195, guid: d27cc24bf161b644d8152e74a52d8310, type: 3}
|
||||
- {fileID: -6324821020194428341, guid: d27cc24bf161b644d8152e74a52d8310, type: 3}
|
||||
- {fileID: 196032492730712452, guid: d27cc24bf161b644d8152e74a52d8310, type: 3}
|
||||
- {fileID: -6324821020194428341, guid: d27cc24bf161b644d8152e74a52d8310, type: 3}
|
||||
- {fileID: -8752346798096107195, guid: d27cc24bf161b644d8152e74a52d8310, type: 3}
|
||||
- {fileID: -8142908360652288411, guid: d27cc24bf161b644d8152e74a52d8310, type: 3}
|
||||
- {fileID: 356313213695173180, guid: d27cc24bf161b644d8152e74a52d8310, type: 3}
|
||||
- {fileID: 5790909876540137479, guid: d27cc24bf161b644d8152e74a52d8310, type: 3}
|
||||
m_AnimationClipSettings:
|
||||
serializedVersion: 2
|
||||
m_AdditiveReferencePoseClip: {fileID: 0}
|
||||
m_AdditiveReferencePoseTime: 0
|
||||
m_StartTime: 0
|
||||
m_StopTime: 1
|
||||
m_StopTime: 1.1833333
|
||||
m_OrientationOffsetY: 0
|
||||
m_Level: 0
|
||||
m_CycleOffset: 0
|
||||
|
||||
|
Before Width: | Height: | Size: 216 KiB |
@@ -1,455 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f1a921cb376a6d043a796234c306ba68
|
||||
TextureImporter:
|
||||
internalIDToNameTable:
|
||||
- first:
|
||||
213: -189743790578022737
|
||||
second: Luringspot0080_0
|
||||
- first:
|
||||
213: 6634189543822600794
|
||||
second: Luringspot0080_1
|
||||
- first:
|
||||
213: -231093529369419673
|
||||
second: Luringspot0080_2
|
||||
- first:
|
||||
213: 2511414595236032001
|
||||
second: Luringspot0080_3
|
||||
- first:
|
||||
213: 7490609438194625126
|
||||
second: Luringspot0080_4
|
||||
- first:
|
||||
213: -6794908659002637049
|
||||
second: Luringspot0080_5
|
||||
- first:
|
||||
213: 567636739033421879
|
||||
second: Luringspot0080_6
|
||||
- first:
|
||||
213: 2856833346655728983
|
||||
second: Luringspot0080_7
|
||||
- first:
|
||||
213: 1284371567033583602
|
||||
second: Luringspot0080_8
|
||||
- first:
|
||||
213: -2704272121687727977
|
||||
second: Luringspot0080_9
|
||||
- first:
|
||||
213: -6980304613595511497
|
||||
second: Luringspot0080_10
|
||||
- first:
|
||||
213: 3462249222720182602
|
||||
second: Luringspot0080_11
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 2
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0080_0
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1206
|
||||
y: 509
|
||||
width: 1152
|
||||
height: 760
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: fa6c24c1705ed5df0800000000000000
|
||||
internalID: -189743790578022737
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0080_1
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 2332
|
||||
y: 876
|
||||
width: 211
|
||||
height: 155
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: a5a282c9d30611c50800000000000000
|
||||
internalID: 6634189543822600794
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0080_2
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 416
|
||||
y: 661
|
||||
width: 235
|
||||
height: 146
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 7606b00d8adfaccf0800000000000000
|
||||
internalID: -231093529369419673
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0080_3
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 933
|
||||
y: 580
|
||||
width: 219
|
||||
height: 132
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 10e66c0b4465ad220800000000000000
|
||||
internalID: 2511414595236032001
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0080_4
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 2489
|
||||
y: 617
|
||||
width: 229
|
||||
height: 159
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 66a67cad89df3f760800000000000000
|
||||
internalID: 7490609438194625126
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0080_5
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 655
|
||||
y: 505
|
||||
width: 230
|
||||
height: 137
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 7050cea5392a3b1a0800000000000000
|
||||
internalID: -6794908659002637049
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0080_6
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 2823
|
||||
y: 381
|
||||
width: 235
|
||||
height: 146
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 7385c8f4b96a0e700800000000000000
|
||||
internalID: 567636739033421879
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0080_7
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1401
|
||||
y: 233
|
||||
width: 165
|
||||
height: 153
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 755b7e9eac285a720800000000000000
|
||||
internalID: 2856833346655728983
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0080_8
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1709
|
||||
y: 314
|
||||
width: 235
|
||||
height: 146
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 2f706a4a22103d110800000000000000
|
||||
internalID: 1284371567033583602
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0080_9
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 2436
|
||||
y: 227
|
||||
width: 166
|
||||
height: 214
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 790afca45de787ad0800000000000000
|
||||
internalID: -2704272121687727977
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0080_10
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 3021
|
||||
y: 275
|
||||
width: 235
|
||||
height: 146
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 7358e9aefe9f02f90800000000000000
|
||||
internalID: -6980304613595511497
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0080_11
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1038
|
||||
y: 101
|
||||
width: 235
|
||||
height: 146
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: a49db1403516c0030800000000000000
|
||||
internalID: 3462249222720182602
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable:
|
||||
Luringspot0080_0: -189743790578022737
|
||||
Luringspot0080_1: 6634189543822600794
|
||||
Luringspot0080_10: -6980304613595511497
|
||||
Luringspot0080_11: 3462249222720182602
|
||||
Luringspot0080_2: -231093529369419673
|
||||
Luringspot0080_3: 2511414595236032001
|
||||
Luringspot0080_4: 7490609438194625126
|
||||
Luringspot0080_5: -6794908659002637049
|
||||
Luringspot0080_6: 567636739033421879
|
||||
Luringspot0080_7: 2856833346655728983
|
||||
Luringspot0080_8: 1284371567033583602
|
||||
Luringspot0080_9: -2704272121687727977
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
Before Width: | Height: | Size: 256 KiB |
@@ -1,611 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fca81b1ec6b01924caffce1a19764e06
|
||||
TextureImporter:
|
||||
internalIDToNameTable:
|
||||
- first:
|
||||
213: 425945789233119077
|
||||
second: Luringspot0081_0
|
||||
- first:
|
||||
213: -5739697896091322602
|
||||
second: Luringspot0081_1
|
||||
- first:
|
||||
213: 4636477264175952403
|
||||
second: Luringspot0081_2
|
||||
- first:
|
||||
213: 291184454042733084
|
||||
second: Luringspot0081_3
|
||||
- first:
|
||||
213: 5319380130674477576
|
||||
second: Luringspot0081_4
|
||||
- first:
|
||||
213: -3840690440587144844
|
||||
second: Luringspot0081_5
|
||||
- first:
|
||||
213: 7784354390229609529
|
||||
second: Luringspot0081_6
|
||||
- first:
|
||||
213: 3110403909336789395
|
||||
second: Luringspot0081_7
|
||||
- first:
|
||||
213: 1334686067146006931
|
||||
second: Luringspot0081_8
|
||||
- first:
|
||||
213: 2887345882747352
|
||||
second: Luringspot0081_9
|
||||
- first:
|
||||
213: 8916561625827917006
|
||||
second: Luringspot0081_10
|
||||
- first:
|
||||
213: -8275576412640565326
|
||||
second: Luringspot0081_11
|
||||
- first:
|
||||
213: 7740462440668012793
|
||||
second: Luringspot0081_12
|
||||
- first:
|
||||
213: -3751976571882609409
|
||||
second: Luringspot0081_13
|
||||
- first:
|
||||
213: 6322729528144262865
|
||||
second: Luringspot0081_14
|
||||
- first:
|
||||
213: 8132922268536676421
|
||||
second: Luringspot0081_15
|
||||
- first:
|
||||
213: 5019937858172960382
|
||||
second: Luringspot0081_16
|
||||
- first:
|
||||
213: 4689594823402432708
|
||||
second: Luringspot0081_17
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 2
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0081_0
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1077
|
||||
y: 748
|
||||
width: 169
|
||||
height: 205
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 56f30d4407349e500800000000000000
|
||||
internalID: 425945789233119077
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0081_1
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1589
|
||||
y: 462
|
||||
width: 689
|
||||
height: 913
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 6177b697c2f7850b0800000000000000
|
||||
internalID: -5739697896091322602
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0081_2
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 2405
|
||||
y: 712
|
||||
width: 243
|
||||
height: 165
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 312f164b183185040800000000000000
|
||||
internalID: 4636477264175952403
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0081_3
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 2791
|
||||
y: 634
|
||||
width: 211
|
||||
height: 152
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: c1a455bd7be7a0400800000000000000
|
||||
internalID: 291184454042733084
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0081_4
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 769
|
||||
y: 470
|
||||
width: 212
|
||||
height: 155
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 80a8f1aab0c32d940800000000000000
|
||||
internalID: 5319380130674477576
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0081_5
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 891
|
||||
y: 612
|
||||
width: 187
|
||||
height: 132
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 4719094a46023bac0800000000000000
|
||||
internalID: -3840690440587144844
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0081_6
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1296
|
||||
y: 592
|
||||
width: 218
|
||||
height: 152
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 93c636b1315970c60800000000000000
|
||||
internalID: 7784354390229609529
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0081_7
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 2284
|
||||
y: 381
|
||||
width: 378
|
||||
height: 277
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 391710c30ef5a2b20800000000000000
|
||||
internalID: 3110403909336789395
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0081_8
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1250
|
||||
y: 350
|
||||
width: 396
|
||||
height: 242
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 391a6e618e1c58210800000000000000
|
||||
internalID: 1334686067146006931
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0081_9
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1532
|
||||
y: 548
|
||||
width: 78
|
||||
height: 50
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 8d15fa996024a0000800000000000000
|
||||
internalID: 2887345882747352
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0081_10
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1148
|
||||
y: 448
|
||||
width: 78
|
||||
height: 46
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: ecc3a558e8dfdbb70800000000000000
|
||||
internalID: 8916561625827917006
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0081_11
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 2680
|
||||
y: 494
|
||||
width: 68
|
||||
height: 44
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 2b725fc391f372d80800000000000000
|
||||
internalID: -8275576412640565326
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0081_12
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 2954
|
||||
y: 387
|
||||
width: 226
|
||||
height: 146
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 9f0254d3495ab6b60800000000000000
|
||||
internalID: 7740462440668012793
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0081_13
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1608
|
||||
y: 244
|
||||
width: 235
|
||||
height: 146
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: ff4695bcf2d4eebc0800000000000000
|
||||
internalID: -3751976571882609409
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0081_14
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 2638
|
||||
y: 376
|
||||
width: 80
|
||||
height: 56
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 1d679efa109deb750800000000000000
|
||||
internalID: 6322729528144262865
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0081_15
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 927
|
||||
y: 211
|
||||
width: 229
|
||||
height: 159
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 5402ef196b1fdd070800000000000000
|
||||
internalID: 8132922268536676421
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0081_16
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 2061
|
||||
y: 102
|
||||
width: 166
|
||||
height: 214
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: e7e3fee92e66aa540800000000000000
|
||||
internalID: 5019937858172960382
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0081_17
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 2342
|
||||
y: 314
|
||||
width: 90
|
||||
height: 56
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 4c8a96535a9c41140800000000000000
|
||||
internalID: 4689594823402432708
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable:
|
||||
Luringspot0081_0: 425945789233119077
|
||||
Luringspot0081_1: -5739697896091322602
|
||||
Luringspot0081_10: 8916561625827917006
|
||||
Luringspot0081_11: -8275576412640565326
|
||||
Luringspot0081_12: 7740462440668012793
|
||||
Luringspot0081_13: -3751976571882609409
|
||||
Luringspot0081_14: 6322729528144262865
|
||||
Luringspot0081_15: 8132922268536676421
|
||||
Luringspot0081_16: 5019937858172960382
|
||||
Luringspot0081_17: 4689594823402432708
|
||||
Luringspot0081_2: 4636477264175952403
|
||||
Luringspot0081_3: 291184454042733084
|
||||
Luringspot0081_4: 5319380130674477576
|
||||
Luringspot0081_5: -3840690440587144844
|
||||
Luringspot0081_6: 7784354390229609529
|
||||
Luringspot0081_7: 3110403909336789395
|
||||
Luringspot0081_8: 1334686067146006931
|
||||
Luringspot0081_9: 2887345882747352
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
Before Width: | Height: | Size: 365 KiB |
@@ -1,663 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 23bdf1cb4c92e59499b5375c5cfff20e
|
||||
TextureImporter:
|
||||
internalIDToNameTable:
|
||||
- first:
|
||||
213: -5025521861736725676
|
||||
second: Luringspot0082_0
|
||||
- first:
|
||||
213: -992055388833163618
|
||||
second: Luringspot0082_1
|
||||
- first:
|
||||
213: 5713939621973605566
|
||||
second: Luringspot0082_2
|
||||
- first:
|
||||
213: -1496327516344575284
|
||||
second: Luringspot0082_3
|
||||
- first:
|
||||
213: -8935868224838253308
|
||||
second: Luringspot0082_4
|
||||
- first:
|
||||
213: 6886278549429677833
|
||||
second: Luringspot0082_5
|
||||
- first:
|
||||
213: -1997921213772081958
|
||||
second: Luringspot0082_6
|
||||
- first:
|
||||
213: -7309286936359493210
|
||||
second: Luringspot0082_7
|
||||
- first:
|
||||
213: -7544908485840830073
|
||||
second: Luringspot0082_8
|
||||
- first:
|
||||
213: 2866146533646128686
|
||||
second: Luringspot0082_9
|
||||
- first:
|
||||
213: 8211507920910758529
|
||||
second: Luringspot0082_10
|
||||
- first:
|
||||
213: 5694715799992700377
|
||||
second: Luringspot0082_11
|
||||
- first:
|
||||
213: 2714711395726943910
|
||||
second: Luringspot0082_12
|
||||
- first:
|
||||
213: -3610955057293593613
|
||||
second: Luringspot0082_13
|
||||
- first:
|
||||
213: 5320305906798982167
|
||||
second: Luringspot0082_14
|
||||
- first:
|
||||
213: 1276444889289157053
|
||||
second: Luringspot0082_15
|
||||
- first:
|
||||
213: -81678692351163310
|
||||
second: Luringspot0082_16
|
||||
- first:
|
||||
213: 323858330673094317
|
||||
second: Luringspot0082_17
|
||||
- first:
|
||||
213: -988497236834035925
|
||||
second: Luringspot0082_18
|
||||
- first:
|
||||
213: 6009270068323059372
|
||||
second: Luringspot0082_19
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 2
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0082_0
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1036
|
||||
y: 748
|
||||
width: 170
|
||||
height: 205
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 453093c3e72c14ab0800000000000000
|
||||
internalID: -5025521861736725676
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0082_1
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1250
|
||||
y: 702
|
||||
width: 346
|
||||
height: 240
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: e96561741e28b32f0800000000000000
|
||||
internalID: -992055388833163618
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0082_2
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1532
|
||||
y: 898
|
||||
width: 78
|
||||
height: 50
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: ebc34cbffcdfb4f40800000000000000
|
||||
internalID: 5713939621973605566
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0082_3
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1561
|
||||
y: 461
|
||||
width: 796
|
||||
height: 1014
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: cca93a04d0afb3be0800000000000000
|
||||
internalID: -1496327516344575284
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0082_4
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 2329
|
||||
y: 903
|
||||
width: 387
|
||||
height: 228
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 405c0da913b6df380800000000000000
|
||||
internalID: -8935868224838253308
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0082_5
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1148
|
||||
y: 798
|
||||
width: 78
|
||||
height: 46
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 90fe52b0bd9f09f50800000000000000
|
||||
internalID: 6886278549429677833
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0082_6
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 2397
|
||||
y: 676
|
||||
width: 259
|
||||
height: 134
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: ad4d5e3dd35f544e0800000000000000
|
||||
internalID: -1997921213772081958
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0082_7
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 2794
|
||||
y: 697
|
||||
width: 224
|
||||
height: 130
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 6a1a3e4f142309a90800000000000000
|
||||
internalID: -7309286936359493210
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0082_8
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 594
|
||||
y: 470
|
||||
width: 212
|
||||
height: 155
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 78180aee4b91b4790800000000000000
|
||||
internalID: -7544908485840830073
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0082_9
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 716
|
||||
y: 612
|
||||
width: 187
|
||||
height: 132
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: e26d13c361996c720800000000000000
|
||||
internalID: 2866146533646128686
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0082_10
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1321
|
||||
y: 592
|
||||
width: 218
|
||||
height: 152
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 182313892f225f170800000000000000
|
||||
internalID: 8211507920910758529
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0082_11
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1087
|
||||
y: 296
|
||||
width: 339
|
||||
height: 307
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 9dd8e5329d1b70f40800000000000000
|
||||
internalID: 5694715799992700377
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0082_12
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1436
|
||||
y: 350
|
||||
width: 235
|
||||
height: 146
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 6a6620a91a79ca520800000000000000
|
||||
internalID: 2714711395726943910
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0082_13
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1608
|
||||
y: 244
|
||||
width: 235
|
||||
height: 146
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 3f37d1ec18f43edc0800000000000000
|
||||
internalID: -3610955057293593613
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0082_14
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 2309
|
||||
y: 366
|
||||
width: 69
|
||||
height: 49
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 7147a27b80685d940800000000000000
|
||||
internalID: 5320305906798982167
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0082_15
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 2356
|
||||
y: 370
|
||||
width: 319
|
||||
height: 234
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: db961792dd7d6b110800000000000000
|
||||
internalID: 1276444889289157053
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0082_16
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 2954
|
||||
y: 387
|
||||
width: 226
|
||||
height: 146
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 254c0bc79a1dddef0800000000000000
|
||||
internalID: -81678692351163310
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0082_17
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 927
|
||||
y: 211
|
||||
width: 229
|
||||
height: 159
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: dae12559f639e7400800000000000000
|
||||
internalID: 323858330673094317
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0082_18
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 2061
|
||||
y: 102
|
||||
width: 166
|
||||
height: 214
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: b275d0910072842f0800000000000000
|
||||
internalID: -988497236834035925
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0082_19
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 2548
|
||||
y: 314
|
||||
width: 78
|
||||
height: 49
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: ca688c5e947356350800000000000000
|
||||
internalID: 6009270068323059372
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable:
|
||||
Luringspot0082_0: -5025521861736725676
|
||||
Luringspot0082_1: -992055388833163618
|
||||
Luringspot0082_10: 8211507920910758529
|
||||
Luringspot0082_11: 5694715799992700377
|
||||
Luringspot0082_12: 2714711395726943910
|
||||
Luringspot0082_13: -3610955057293593613
|
||||
Luringspot0082_14: 5320305906798982167
|
||||
Luringspot0082_15: 1276444889289157053
|
||||
Luringspot0082_16: -81678692351163310
|
||||
Luringspot0082_17: 323858330673094317
|
||||
Luringspot0082_18: -988497236834035925
|
||||
Luringspot0082_19: 6009270068323059372
|
||||
Luringspot0082_2: 5713939621973605566
|
||||
Luringspot0082_3: -1496327516344575284
|
||||
Luringspot0082_4: -8935868224838253308
|
||||
Luringspot0082_5: 6886278549429677833
|
||||
Luringspot0082_6: -1997921213772081958
|
||||
Luringspot0082_7: -7309286936359493210
|
||||
Luringspot0082_8: -7544908485840830073
|
||||
Luringspot0082_9: 2866146533646128686
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 455 KiB |
@@ -0,0 +1,299 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 46b2fe6896b27cc4c8bd9f0da3f0de50
|
||||
TextureImporter:
|
||||
internalIDToNameTable:
|
||||
- first:
|
||||
213: -2184305063030378797
|
||||
second: Luringspot0082 1_0
|
||||
- first:
|
||||
213: -1125559343802010594
|
||||
second: Luringspot0082 1_1
|
||||
- first:
|
||||
213: -3126590882606850531
|
||||
second: Luringspot0082 1_2
|
||||
- first:
|
||||
213: 8025829151665581729
|
||||
second: Luringspot0082 1_3
|
||||
- first:
|
||||
213: -4642567369727099706
|
||||
second: Luringspot0082 1_4
|
||||
- first:
|
||||
213: -8560188491584682866
|
||||
second: Luringspot0082 1_5
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 2
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0082 1_0
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 638
|
||||
y: 803
|
||||
width: 242
|
||||
height: 113
|
||||
alignment: 0
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 3deacfc3e1acfa1e0800000000000000
|
||||
internalID: -2184305063030378797
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0082 1_1
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 566
|
||||
y: 79
|
||||
width: 2887
|
||||
height: 1416
|
||||
alignment: 9
|
||||
pivot: {x: 0.5088555, y: 0.82942355}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: e143f038db53160f0800000000000000
|
||||
internalID: -1125559343802010594
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0082 1_2
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 594
|
||||
y: 470
|
||||
width: 212
|
||||
height: 155
|
||||
alignment: 0
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: d1e5e3c582e1c94d0800000000000000
|
||||
internalID: -3126590882606850531
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0082 1_3
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 716
|
||||
y: 612
|
||||
width: 187
|
||||
height: 132
|
||||
alignment: 0
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 1ae600d3719716f60800000000000000
|
||||
internalID: 8025829151665581729
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0082 1_4
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 3064
|
||||
y: 574
|
||||
width: 366
|
||||
height: 165
|
||||
alignment: 0
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 6ccb8991399429fb0800000000000000
|
||||
internalID: -4642567369727099706
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0082 1_5
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 2954
|
||||
y: 387
|
||||
width: 226
|
||||
height: 146
|
||||
alignment: 0
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: e8445b4bbe9143980800000000000000
|
||||
internalID: -8560188491584682866
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 35efb6b54f8f50547ba348d4e796463a
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable:
|
||||
Luringspot0082 1_0: -2184305063030378797
|
||||
Luringspot0082 1_1: -1125559343802010594
|
||||
Luringspot0082 1_2: -3126590882606850531
|
||||
Luringspot0082 1_3: 8025829151665581729
|
||||
Luringspot0082 1_4: -4642567369727099706
|
||||
Luringspot0082 1_5: -8560188491584682866
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 342 KiB |
@@ -0,0 +1,169 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 95d6dbee5cb1f694c971791ee60cad14
|
||||
TextureImporter:
|
||||
internalIDToNameTable:
|
||||
- first:
|
||||
213: -642587728066523507
|
||||
second: Luringspot0081 1_0
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 2
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0081 1_0
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 765
|
||||
y: 7
|
||||
width: 2463
|
||||
height: 1368
|
||||
alignment: 9
|
||||
pivot: {x: 0.491691, y: 0.83455706}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: d8ec19badd11517f0800000000000000
|
||||
internalID: -642587728066523507
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 4f5830a63fe63b2408dab3fe91c4c068
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable:
|
||||
Luringspot0081 1_0: -642587728066523507
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 288 KiB |
@@ -0,0 +1,195 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 27419b0e3639a3e4184d676890da073a
|
||||
TextureImporter:
|
||||
internalIDToNameTable:
|
||||
- first:
|
||||
213: -4803891911566685267
|
||||
second: Luringspot0080 1_0
|
||||
- first:
|
||||
213: 4728896231509914993
|
||||
second: Luringspot0080 1_1
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 2
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0080 1_0
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 416
|
||||
y: 661
|
||||
width: 235
|
||||
height: 146
|
||||
alignment: 0
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: dab02bf22c5255db0800000000000000
|
||||
internalID: -4803891911566685267
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Luringspot0080 1_1
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 402
|
||||
y: 92
|
||||
width: 2854
|
||||
height: 1177
|
||||
alignment: 9
|
||||
pivot: {x: 0.5, y: 0.85}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 175f4da511a60a140800000000000000
|
||||
internalID: 4728896231509914993
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 839b47c5d100feb46adfec4cfcbc3bf3
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable:
|
||||
Luringspot0080 1_0: -4803891911566685267
|
||||
Luringspot0080 1_1: 4728896231509914993
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 190 KiB |
@@ -0,0 +1,169 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 774aa67620143f44eb34689c040d0ee6
|
||||
TextureImporter:
|
||||
internalIDToNameTable:
|
||||
- first:
|
||||
213: -3949104700904280293
|
||||
second: PicnicBasket0001_0
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 2
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
- serializedVersion: 2
|
||||
name: PicnicBasket0001_0
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1008
|
||||
y: 715
|
||||
width: 712
|
||||
height: 689
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: b1f66c1a236f139c0800000000000000
|
||||
internalID: -3949104700904280293
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable:
|
||||
PicnicBasket0001_0: -3949104700904280293
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 151 KiB |
@@ -0,0 +1,169 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 152bf92088cbe83409df9f3769619097
|
||||
TextureImporter:
|
||||
internalIDToNameTable:
|
||||
- first:
|
||||
213: 277634131431117102
|
||||
second: PicnicBasket0002_0
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 2
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
- serializedVersion: 2
|
||||
name: PicnicBasket0002_0
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1099
|
||||
y: 715
|
||||
width: 621
|
||||
height: 654
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: e21d97585ca5ad300800000000000000
|
||||
internalID: 277634131431117102
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable:
|
||||
PicnicBasket0002_0: 277634131431117102
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 70 KiB |
@@ -0,0 +1,169 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2d1aeda288c7b1b429fbfca82c59c8e1
|
||||
TextureImporter:
|
||||
internalIDToNameTable:
|
||||
- first:
|
||||
213: -6996254108146645158
|
||||
second: PicnicBasket0003_0
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 2
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
- serializedVersion: 2
|
||||
name: PicnicBasket0003_0
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1061
|
||||
y: 1009
|
||||
width: 290
|
||||
height: 393
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: a574d85d4ff48ee90800000000000000
|
||||
internalID: -6996254108146645158
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable:
|
||||
PicnicBasket0003_0: -6996254108146645158
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 90 KiB |
@@ -0,0 +1,169 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cf5af87e6a25e9442b89f069b894a5fd
|
||||
TextureImporter:
|
||||
internalIDToNameTable:
|
||||
- first:
|
||||
213: -3811075571101519331
|
||||
second: PicnicBasket0004_0
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 2
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
- serializedVersion: 2
|
||||
name: PicnicBasket0004_0
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1008
|
||||
y: 1008
|
||||
width: 368
|
||||
height: 396
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: d123354c5f65c1bc0800000000000000
|
||||
internalID: -3811075571101519331
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable:
|
||||
PicnicBasket0004_0: -3811075571101519331
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 114 KiB |
@@ -0,0 +1,221 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 78693b3f90dcf884da247f3aa1fd92a8
|
||||
TextureImporter:
|
||||
internalIDToNameTable:
|
||||
- first:
|
||||
213: 5362986125728758211
|
||||
second: PicnicBasket0005_0
|
||||
- first:
|
||||
213: -364760000446031797
|
||||
second: PicnicBasket0005_1
|
||||
- first:
|
||||
213: 6384599752901787320
|
||||
second: PicnicBasket0005_2
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 2
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
- serializedVersion: 2
|
||||
name: PicnicBasket0005_0
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1230
|
||||
y: 1157
|
||||
width: 307
|
||||
height: 278
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 3c9396f87772d6a40800000000000000
|
||||
internalID: 5362986125728758211
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: PicnicBasket0005_1
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1535
|
||||
y: 1039
|
||||
width: 304
|
||||
height: 276
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: b48942156bc10faf0800000000000000
|
||||
internalID: -364760000446031797
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: PicnicBasket0005_2
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1203
|
||||
y: 942
|
||||
width: 348
|
||||
height: 205
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 8bef1c0f5a7aa9850800000000000000
|
||||
internalID: 6384599752901787320
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable:
|
||||
PicnicBasket0005_0: 5362986125728758211
|
||||
PicnicBasket0005_1: -364760000446031797
|
||||
PicnicBasket0005_2: 6384599752901787320
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
After Width: | Height: | Size: 9.7 KiB |
@@ -0,0 +1,195 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 44a64b7a80921694790236bab7765357
|
||||
TextureImporter:
|
||||
internalIDToNameTable:
|
||||
- first:
|
||||
213: -8897872742393391051
|
||||
second: TennisBall_0
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 2
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: WebGL
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: WindowsStoreApps
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
- serializedVersion: 2
|
||||
name: TennisBall_0
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 21
|
||||
y: 29
|
||||
width: 219
|
||||
height: 190
|
||||
alignment: 0
|
||||
pivot: {x: 0, y: 0}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 538d20d32e7648480800000000000000
|
||||
internalID: -8897872742393391051
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID:
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries: []
|
||||
nameFileIdTable:
|
||||
TennisBall_0: -8897872742393391051
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/Art/Sprites/Spritesheets/Quarry/WolterBush.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 634e7866ae732e74db3e535eac99e179
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/Art/Sprites/Spritesheets/Quarry/WolterBush/Wolterbush.png
Normal file
|
After Width: | Height: | Size: 862 KiB |
@@ -0,0 +1,327 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d27cc24bf161b644d8152e74a52d8310
|
||||
TextureImporter:
|
||||
internalIDToNameTable:
|
||||
- first:
|
||||
213: 5790909876540137479
|
||||
second: Wolterbush_0
|
||||
- first:
|
||||
213: 356313213695173180
|
||||
second: Wolterbush_1
|
||||
- first:
|
||||
213: -8142908360652288411
|
||||
second: Wolterbush_2
|
||||
- first:
|
||||
213: -8752346798096107195
|
||||
second: Wolterbush_3
|
||||
- first:
|
||||
213: -6324821020194428341
|
||||
second: Wolterbush_4
|
||||
- first:
|
||||
213: 196032492730712452
|
||||
second: Wolterbush_5
|
||||
- first:
|
||||
213: -2337357357073190330
|
||||
second: Wolterbush_6
|
||||
externalObjects: {}
|
||||
serializedVersion: 13
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
flipGreenChannel: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMipmapLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 1
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 2
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 8
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
swizzle: 50462976
|
||||
cookieLightType: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 4
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 4
|
||||
buildTarget: iOS
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
ignorePlatformSupport: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites:
|
||||
- serializedVersion: 2
|
||||
name: Wolterbush_0
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
y: 2295
|
||||
width: 1175
|
||||
height: 765
|
||||
alignment: 9
|
||||
pivot: {x: 0.5, y: 0.2}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 700e975e9d17d5050800000000000000
|
||||
internalID: 5790909876540137479
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Wolterbush_1
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1175
|
||||
y: 2295
|
||||
width: 1175
|
||||
height: 765
|
||||
alignment: 9
|
||||
pivot: {x: 0.5, y: 0.2}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: c322413eaf0e1f400800000000000000
|
||||
internalID: 356313213695173180
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Wolterbush_2
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
y: 1530
|
||||
width: 1175
|
||||
height: 765
|
||||
alignment: 9
|
||||
pivot: {x: 0.5, y: 0.2}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 56e03cc2df39efe80800000000000000
|
||||
internalID: -8142908360652288411
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Wolterbush_3
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1175
|
||||
y: 1530
|
||||
width: 1175
|
||||
height: 765
|
||||
alignment: 9
|
||||
pivot: {x: 0.5, y: 0.2}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 549347485fa698680800000000000000
|
||||
internalID: -8752346798096107195
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Wolterbush_4
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
y: 765
|
||||
width: 1175
|
||||
height: 765
|
||||
alignment: 9
|
||||
pivot: {x: 0.5, y: 0.2}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: b4a236fdac8b938a0800000000000000
|
||||
internalID: -6324821020194428341
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Wolterbush_5
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 1175
|
||||
y: 765
|
||||
width: 1175
|
||||
height: 765
|
||||
alignment: 9
|
||||
pivot: {x: 0.5, y: 0.2}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 48106a5738278b200800000000000000
|
||||
internalID: 196032492730712452
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
- serializedVersion: 2
|
||||
name: Wolterbush_6
|
||||
rect:
|
||||
serializedVersion: 2
|
||||
x: 0
|
||||
y: 0
|
||||
width: 1175
|
||||
height: 765
|
||||
alignment: 9
|
||||
pivot: {x: 0.5, y: 0.2}
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
customData:
|
||||
outline: []
|
||||
physicsShape: []
|
||||
tessellationDetail: -1
|
||||
bones: []
|
||||
spriteID: 642b18a1ed9009fd0800000000000000
|
||||
internalID: -2337357357073190330
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
outline: []
|
||||
customData:
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 00f249ef84207ac409e2e007e3b28481
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
spriteCustomMetadata:
|
||||
entries:
|
||||
- key: SpriteEditor.SliceSettings
|
||||
value: '{"sliceOnImport":false,"gridCellCount":{"x":1.0,"y":1.0},"gridSpriteSize":{"x":1175.0,"y":765.0},"gridSpriteOffset":{"x":0.0,"y":0.0},"gridSpritePadding":{"x":0.0,"y":0.0},"pivot":{"x":0.5,"y":0.20000000298023225},"pivotPixels":{"x":0.0,"y":0.0},"autoSlicingMethod":0,"spriteAlignment":9,"pivotUnitMode":0,"slicingType":1,"keepEmptyRects":false,"isAlternate":false}'
|
||||
nameFileIdTable:
|
||||
Wolterbush_0: 5790909876540137479
|
||||
Wolterbush_1: 356313213695173180
|
||||
Wolterbush_2: -8142908360652288411
|
||||
Wolterbush_3: -8752346798096107195
|
||||
Wolterbush_4: -6324821020194428341
|
||||
Wolterbush_5: 196032492730712452
|
||||
Wolterbush_6: -2337357357073190330
|
||||
mipmapLimitGroupName:
|
||||
pSDRemoveMatte: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -15,4 +15,4 @@ MonoBehaviour:
|
||||
_itemId: chocolate_4f2011c6
|
||||
itemName: Chocolate
|
||||
description: sweet nectar of gods that lures the beasts from bushes
|
||||
mapSprite: {fileID: -509776585262497855, guid: c648336c825f7d7479582bbe4d95d0bc, type: 3}
|
||||
mapSprite: {fileID: -3811075571101519331, guid: 4a1a1ea0011e5644c917aaa7255ab48f, type: 3}
|
||||
|
||||
@@ -15,4 +15,4 @@ MonoBehaviour:
|
||||
_itemId: lurespotb_92c24cf9
|
||||
itemName: LureSpotB
|
||||
description: Place where we atract the chocobird
|
||||
mapSprite: {fileID: 2640071299338251634, guid: 7c4c9881382767047aac78ca51b82923, type: 3}
|
||||
mapSprite: {fileID: -1125559343802010594, guid: 46b2fe6896b27cc4c8bd9f0da3f0de50, type: 3}
|
||||
|
||||
@@ -15,4 +15,4 @@ MonoBehaviour:
|
||||
_itemId: lurespotc_559f54b7
|
||||
itemName: LureSpotC
|
||||
description: Place where we atract the hammerbird
|
||||
mapSprite: {fileID: 3009302558630513478, guid: 3aefb78ee1b7f6e4685d0fff00e24e3d, type: 3}
|
||||
mapSprite: {fileID: -642587728066523507, guid: 95d6dbee5cb1f694c971791ee60cad14, type: 3}
|
||||
|
||||
@@ -40,14 +40,14 @@ MonoBehaviour:
|
||||
- __option_DialogueLineType
|
||||
- __option_NoLines
|
||||
- RequiredPuzzleStep
|
||||
- DefaultDialogueLine
|
||||
- LoopThroughDefaultLines
|
||||
- DefaultDialogueContent
|
||||
m_ValueList:
|
||||
- rid: 4008004731853340754
|
||||
- rid: 4008004731853340755
|
||||
- rid: 4008004731853340756
|
||||
- rid: 4008004731853340757
|
||||
- rid: 4008004731853340758
|
||||
- rid: 7545629632211976319
|
||||
m_InputPortInfos:
|
||||
expandedPortsById:
|
||||
m_KeyList: []
|
||||
@@ -82,10 +82,6 @@ MonoBehaviour:
|
||||
type: {class: 'Constant`1[[PuzzleStepSO, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: {fileID: 11400000, guid: ea383d1dee861f54c9a1d4f32a2f6afc, type: 2}
|
||||
- rid: 4008004731853340757
|
||||
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: That Lawnmower is out of control!
|
||||
- rid: 4008004731853340758
|
||||
type: {class: 'Constant`1[[System.Boolean, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
@@ -125,6 +121,41 @@ MonoBehaviour:
|
||||
m_PortDirection: 1
|
||||
m_PortOrientation: 0
|
||||
m_Title: in
|
||||
- rid: 7545629632211976315
|
||||
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value:
|
||||
_contentType: 0
|
||||
_text:
|
||||
_image: {fileID: 0}
|
||||
- rid: 7545629632211976316
|
||||
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value:
|
||||
_contentType: 0
|
||||
_text:
|
||||
_image: {fileID: 0}
|
||||
- rid: 7545629632211976317
|
||||
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value:
|
||||
_contentType: 0
|
||||
_text:
|
||||
_image: {fileID: 0}
|
||||
- rid: 7545629632211976318
|
||||
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value:
|
||||
_contentType: 0
|
||||
_text:
|
||||
_image: {fileID: 0}
|
||||
- rid: 7545629632211976319
|
||||
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value:
|
||||
_contentType: 0
|
||||
_text:
|
||||
_image: {fileID: 0}
|
||||
- rid: 7772910664224079872
|
||||
type: {class: GraphModelImp, ns: Unity.GraphToolkit.Editor.Implementation, asm: Unity.GraphToolkit.Editor}
|
||||
data:
|
||||
@@ -351,17 +382,17 @@ MonoBehaviour:
|
||||
m_KeyList:
|
||||
- __option_DialogueLineType
|
||||
- __option_NoLines
|
||||
- DefaultDialogueLine2
|
||||
- LoopThroughDefaultLines
|
||||
- DefaultDialogueLine1
|
||||
- DefaultDialogueLine3
|
||||
- DefaultDialogueContent1
|
||||
- DefaultDialogueContent2
|
||||
- DefaultDialogueContent3
|
||||
m_ValueList:
|
||||
- rid: 7772910664224079887
|
||||
- rid: 7772910664224079888
|
||||
- rid: 7772910664224079894
|
||||
- rid: 7772910664224079890
|
||||
- rid: 7772910664224079893
|
||||
- rid: 7772910664224079895
|
||||
- rid: 7545629632211976315
|
||||
- rid: 7545629632211976316
|
||||
- rid: 7545629632211976317
|
||||
m_InputPortInfos:
|
||||
expandedPortsById:
|
||||
m_KeyList: []
|
||||
@@ -431,19 +462,6 @@ MonoBehaviour:
|
||||
m_PortDirection: 1
|
||||
m_PortOrientation: 0
|
||||
m_Title: in
|
||||
- rid: 7772910664224079893
|
||||
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: Ok Guys! Let's get these birds out in the open!
|
||||
- rid: 7772910664224079894
|
||||
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: Place things the Birds might like in their nests.
|
||||
- rid: 7772910664224079895
|
||||
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: I guess what you find in th enests can give you a clue of what they
|
||||
like?
|
||||
- rid: 7772910664224079896
|
||||
type: {class: UserNodeModelImp, ns: Unity.GraphToolkit.Editor.Implementation, asm: Unity.GraphToolkit.Editor}
|
||||
data:
|
||||
@@ -464,13 +482,13 @@ MonoBehaviour:
|
||||
m_KeyList:
|
||||
- __option_DialogueLineType
|
||||
- __option_NoLines
|
||||
- DefaultDialogueLine
|
||||
- LoopThroughDefaultLines
|
||||
- DefaultDialogueContent
|
||||
m_ValueList:
|
||||
- rid: 7772910664224079897
|
||||
- rid: 7772910664224079898
|
||||
- rid: 7772910664224079899
|
||||
- rid: 7772910664224079900
|
||||
- rid: 7545629632211976318
|
||||
m_InputPortInfos:
|
||||
expandedPortsById:
|
||||
m_KeyList: []
|
||||
@@ -501,10 +519,6 @@ MonoBehaviour:
|
||||
type: {class: 'Constant`1[[System.Int32, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: 1
|
||||
- rid: 7772910664224079899
|
||||
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: Go on, get them out of their hiding spots.
|
||||
- rid: 7772910664224079900
|
||||
type: {class: 'Constant`1[[System.Boolean, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
|
||||
@@ -19,6 +19,20 @@ MonoBehaviour:
|
||||
RefIds:
|
||||
- rid: -2
|
||||
type: {class: , ns: , asm: }
|
||||
- rid: 7545629632211976320
|
||||
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value:
|
||||
_contentType: 0
|
||||
_text:
|
||||
_image: {fileID: 0}
|
||||
- rid: 7545629632211976321
|
||||
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value:
|
||||
_contentType: 0
|
||||
_text:
|
||||
_image: {fileID: 0}
|
||||
- rid: 7772910664224079994
|
||||
type: {class: GraphModelImp, ns: Unity.GraphToolkit.Editor.Implementation, asm: Unity.GraphToolkit.Editor}
|
||||
data:
|
||||
@@ -296,15 +310,15 @@ MonoBehaviour:
|
||||
m_KeyList:
|
||||
- __option_DialogueLineType
|
||||
- __option_NoLines
|
||||
- DefaultDialogueLine2
|
||||
- LoopThroughDefaultLines
|
||||
- DefaultDialogueLine1
|
||||
- DefaultDialogueContent1
|
||||
- DefaultDialogueContent2
|
||||
m_ValueList:
|
||||
- rid: 7772910664224080006
|
||||
- rid: 7772910664224080007
|
||||
- rid: 7772910664224080012
|
||||
- rid: 7772910664224080009
|
||||
- rid: 7772910664224080011
|
||||
- rid: 7545629632211976320
|
||||
- rid: 7545629632211976321
|
||||
m_InputPortInfos:
|
||||
expandedPortsById:
|
||||
m_KeyList: []
|
||||
@@ -374,14 +388,6 @@ MonoBehaviour:
|
||||
- rid: 7772910664224080010
|
||||
type: {class: DialogueNode, ns: Editor.Dialogue, asm: AppleHillsEditor}
|
||||
data:
|
||||
- rid: 7772910664224080011
|
||||
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: My lawnmower is on a break so i'm also on a break...
|
||||
- rid: 7772910664224080012
|
||||
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: I ain't moving until she decides to move...
|
||||
- rid: 7772910664224080013
|
||||
type: {class: UserNodeModelImp, ns: Unity.GraphToolkit.Editor.Implementation, asm: Unity.GraphToolkit.Editor}
|
||||
data:
|
||||
|
||||
@@ -58,10 +58,10 @@ MonoBehaviour:
|
||||
m_LocalSubgraphs: []
|
||||
m_LastKnownBounds:
|
||||
serializedVersion: 2
|
||||
x: 115
|
||||
y: 7
|
||||
width: 3353
|
||||
height: 399
|
||||
x: -36
|
||||
y: 12
|
||||
width: 3787.2
|
||||
height: 559.19995
|
||||
m_GraphElementMetaData:
|
||||
- m_Guid:
|
||||
m_Value0: 15250916379536742066
|
||||
@@ -237,7 +237,7 @@ MonoBehaviour:
|
||||
serializedVersion: 2
|
||||
Hash: b25679f5a423a6d30df98cd989cabcf0
|
||||
m_Version: 2
|
||||
m_Position: {x: 303.87872, y: 210.33638}
|
||||
m_Position: {x: 152.62463, y: 208.7273}
|
||||
m_Title:
|
||||
m_Tooltip:
|
||||
m_NodePreviewModel:
|
||||
@@ -280,7 +280,7 @@ MonoBehaviour:
|
||||
serializedVersion: 2
|
||||
Hash: 4c15a501ab0b3876663348bd143a160c
|
||||
m_Version: 2
|
||||
m_Position: {x: 115.3345, y: 263.23343}
|
||||
m_Position: {x: -35.919586, y: 261.62433}
|
||||
m_Title: SpeakerName
|
||||
m_Tooltip:
|
||||
m_NodePreviewModel:
|
||||
@@ -376,7 +376,7 @@ MonoBehaviour:
|
||||
serializedVersion: 2
|
||||
Hash: 63e5eb3c34667babc753a8b79a9a6d99
|
||||
m_Version: 2
|
||||
m_Position: {x: 513.6555, y: 168.80977}
|
||||
m_Position: {x: 362.40143, y: 167.20068}
|
||||
m_Title:
|
||||
m_Tooltip:
|
||||
m_NodePreviewModel:
|
||||
@@ -386,13 +386,13 @@ MonoBehaviour:
|
||||
m_KeyList:
|
||||
- __option_DialogueLineType
|
||||
- __option_NoLines
|
||||
- DefaultDialogueLine
|
||||
- LoopThroughDefaultLines
|
||||
- DefaultDialogueContent
|
||||
m_ValueList:
|
||||
- rid: 1226592702090707077
|
||||
- rid: 1226592702090707078
|
||||
- rid: 1226592702090707079
|
||||
- rid: 1226592702090707080
|
||||
- rid: 7545629632211976303
|
||||
m_InputPortInfos:
|
||||
expandedPortsById:
|
||||
m_KeyList: []
|
||||
@@ -423,10 +423,6 @@ MonoBehaviour:
|
||||
type: {class: 'Constant`1[[System.Int32, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: 1
|
||||
- rid: 1226592702090707079
|
||||
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: Psst boy... Why don't you pick up THAT ASS over there?
|
||||
- rid: 1226592702090707080
|
||||
type: {class: 'Constant`1[[System.Boolean, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
@@ -476,7 +472,7 @@ MonoBehaviour:
|
||||
serializedVersion: 2
|
||||
Hash: d897c8a6890a4ec4f5f614a0a23bfb0b
|
||||
m_Version: 2
|
||||
m_Position: {x: 906.1956, y: 144.21957}
|
||||
m_Position: {x: 832.17773, y: 142.61052}
|
||||
m_Title:
|
||||
m_Tooltip:
|
||||
m_NodePreviewModel:
|
||||
@@ -487,18 +483,18 @@ MonoBehaviour:
|
||||
- __option_DialogueLineType
|
||||
- __option_NoLines
|
||||
- RequiredPickup
|
||||
- DefaultDialogueLine2
|
||||
- LoopThroughDefaultLines
|
||||
- DefaultDialogueLine1
|
||||
- DefaultDialogueLine3
|
||||
- DefaultDialogueContent1
|
||||
- DefaultDialogueContent2
|
||||
- DefaultDialogueContent3
|
||||
m_ValueList:
|
||||
- rid: 1226592702090707084
|
||||
- rid: 1226592702090707085
|
||||
- rid: 1226592702090707086
|
||||
- rid: 1226592702090707092
|
||||
- rid: 1226592702090707088
|
||||
- rid: 1226592702090707091
|
||||
- rid: 1226592702090707093
|
||||
- rid: 7545629632211976304
|
||||
- rid: 7545629632211976305
|
||||
- rid: 7545629632211976306
|
||||
m_InputPortInfos:
|
||||
expandedPortsById:
|
||||
m_KeyList: []
|
||||
@@ -572,18 +568,6 @@ MonoBehaviour:
|
||||
m_PortDirection: 1
|
||||
m_PortOrientation: 0
|
||||
m_Title: in
|
||||
- rid: 1226592702090707091
|
||||
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: I said pick it up!
|
||||
- rid: 1226592702090707092
|
||||
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: Cmon, don't be like this!
|
||||
- rid: 1226592702090707093
|
||||
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: The ass is waiting there for you!
|
||||
- rid: 1226592702090707099
|
||||
type: {class: UserNodeModelImp, ns: Unity.GraphToolkit.Editor.Implementation, asm: Unity.GraphToolkit.Editor}
|
||||
data:
|
||||
@@ -594,7 +578,7 @@ MonoBehaviour:
|
||||
serializedVersion: 2
|
||||
Hash: 3b750432bd23177050f4f1fac360a6c3
|
||||
m_Version: 2
|
||||
m_Position: {x: 1376.4679, y: 141.66953}
|
||||
m_Position: {x: 1300.841, y: 142.06729}
|
||||
m_Title: DialogueNode
|
||||
m_Tooltip:
|
||||
m_NodePreviewModel:
|
||||
@@ -605,14 +589,14 @@ MonoBehaviour:
|
||||
- __option_DialogueLineType
|
||||
- __option_NoLines
|
||||
- LoopThroughDefaultLines
|
||||
- DefaultDialogueLine1
|
||||
- DefaultDialogueLine2
|
||||
- DefaultDialogueContent1
|
||||
- DefaultDialogueContent2
|
||||
m_ValueList:
|
||||
- rid: 1226592702090707100
|
||||
- rid: 1226592702090707101
|
||||
- rid: 1226592702090707103
|
||||
- rid: 1226592702090707106
|
||||
- rid: 1226592702090707107
|
||||
- rid: 7545629632211976307
|
||||
- rid: 7545629632211976308
|
||||
m_InputPortInfos:
|
||||
expandedPortsById:
|
||||
m_KeyList: []
|
||||
@@ -682,14 +666,6 @@ MonoBehaviour:
|
||||
m_PortDirection: 1
|
||||
m_PortOrientation: 0
|
||||
m_Title: in
|
||||
- rid: 1226592702090707106
|
||||
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: Ohhhh yeah, that's the stuff.
|
||||
- rid: 1226592702090707107
|
||||
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: Now, go on, chop it!
|
||||
- rid: 1226592736610877523
|
||||
type: {class: UserNodeModelImp, ns: Unity.GraphToolkit.Editor.Implementation, asm: Unity.GraphToolkit.Editor}
|
||||
data:
|
||||
@@ -700,7 +676,7 @@ MonoBehaviour:
|
||||
serializedVersion: 2
|
||||
Hash: f3e06bfaeec3029fe7bcecfcb7e96ae8
|
||||
m_Version: 2
|
||||
m_Position: {x: 1763.6455, y: 116.19321}
|
||||
m_Position: {x: 1771.6909, y: 116.19321}
|
||||
m_Title:
|
||||
m_Tooltip:
|
||||
m_NodePreviewModel:
|
||||
@@ -711,14 +687,14 @@ MonoBehaviour:
|
||||
- __option_DialogueLineType
|
||||
- __option_NoLines
|
||||
- RequiredResultItem
|
||||
- DefaultDialogueLine
|
||||
- LoopThroughDefaultLines
|
||||
- DefaultDialogueContent
|
||||
m_ValueList:
|
||||
- rid: 1226592736610877524
|
||||
- rid: 1226592736610877525
|
||||
- rid: 1226592736610877526
|
||||
- rid: 1226592736610877527
|
||||
- rid: 1226592736610877528
|
||||
- rid: 7545629632211976309
|
||||
m_InputPortInfos:
|
||||
expandedPortsById:
|
||||
m_KeyList: []
|
||||
@@ -753,14 +729,10 @@ MonoBehaviour:
|
||||
type: {class: 'Constant`1[[PickupItemData, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: {fileID: 11400000, guid: ecae2d83a5ab2a047a2733ebff607380, type: 2}
|
||||
- rid: 1226592736610877527
|
||||
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: I need my meat :(
|
||||
- rid: 1226592736610877528
|
||||
type: {class: 'Constant`1[[System.Boolean, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: 1
|
||||
m_Value: 0
|
||||
- rid: 1226592736610877529
|
||||
type: {class: WaitOnCombination, ns: Editor.Dialogue, asm: AppleHillsEditor}
|
||||
data:
|
||||
@@ -817,12 +789,12 @@ MonoBehaviour:
|
||||
- __option_DialogueLineType
|
||||
- __option_NoLines
|
||||
- LoopThroughDefaultLines
|
||||
- DefaultDialogueLine
|
||||
- DefaultDialogueContent
|
||||
m_ValueList:
|
||||
- rid: 1226592736610877538
|
||||
- rid: 1226592736610877539
|
||||
- rid: 1226592736610877540
|
||||
- rid: 1226592736610877545
|
||||
- rid: 7545629632211976310
|
||||
m_InputPortInfos:
|
||||
expandedPortsById:
|
||||
m_KeyList: []
|
||||
@@ -892,10 +864,6 @@ MonoBehaviour:
|
||||
m_PortDirection: 1
|
||||
m_PortOrientation: 0
|
||||
m_Title: in
|
||||
- rid: 1226592736610877545
|
||||
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: Nice, that's the stuff! Now go cook it for me!
|
||||
- rid: 1226592736610877546
|
||||
type: {class: UserNodeModelImp, ns: Unity.GraphToolkit.Editor.Implementation, asm: Unity.GraphToolkit.Editor}
|
||||
data:
|
||||
@@ -906,7 +874,7 @@ MonoBehaviour:
|
||||
serializedVersion: 2
|
||||
Hash: 69712d8f46502fa577433f59c2c1f85c
|
||||
m_Version: 2
|
||||
m_Position: {x: 2650.1987, y: 6.86882}
|
||||
m_Position: {x: 2752.9822, y: 11.763229}
|
||||
m_Title:
|
||||
m_Tooltip:
|
||||
m_NodePreviewModel:
|
||||
@@ -921,12 +889,12 @@ MonoBehaviour:
|
||||
- __option_ForbiddenItemDialogueLineType
|
||||
- __option_ForbiddenItemNoLines
|
||||
- RequiredSlot
|
||||
- DefaultDialogueLine
|
||||
- LoopThroughDefaultLines
|
||||
- IncorrectItemDialogueLine
|
||||
- LoopThroughIncorrectItemLines
|
||||
- ForbiddenItemDialogueLine
|
||||
- LoopThroughForbiddenItemLines
|
||||
- DefaultDialogueContent
|
||||
- IncorrectItemDialogueContent
|
||||
- ForbiddenItemDialogueContent
|
||||
m_ValueList:
|
||||
- rid: 1226592736610877547
|
||||
- rid: 1226592736610877548
|
||||
@@ -935,12 +903,12 @@ MonoBehaviour:
|
||||
- rid: 1226592736610877551
|
||||
- rid: 1226592736610877552
|
||||
- rid: 1226592736610877553
|
||||
- rid: 1226592736610877554
|
||||
- rid: 1226592736610877555
|
||||
- rid: 1226592736610877556
|
||||
- rid: 1226592736610877557
|
||||
- rid: 1226592736610877558
|
||||
- rid: 1226592736610877559
|
||||
- rid: 7545629632211976311
|
||||
- rid: 7545629632211976312
|
||||
- rid: 7545629632211976313
|
||||
m_InputPortInfos:
|
||||
expandedPortsById:
|
||||
m_KeyList: []
|
||||
@@ -1005,30 +973,18 @@ MonoBehaviour:
|
||||
type: {class: 'Constant`1[[PickupItemData, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: {fileID: 11400000, guid: e0fad48a84a6b6346ac17c84bc512500, type: 2}
|
||||
- rid: 1226592736610877554
|
||||
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: Cmon, it's not gonna cook itself!
|
||||
- rid: 1226592736610877555
|
||||
type: {class: 'Constant`1[[System.Boolean, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: 1
|
||||
- rid: 1226592736610877556
|
||||
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: What do you think you're cooking?!
|
||||
- rid: 1226592736610877557
|
||||
type: {class: 'Constant`1[[System.Boolean, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: 1
|
||||
- rid: 1226592736610877558
|
||||
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value:
|
||||
- rid: 1226592736610877559
|
||||
type: {class: 'Constant`1[[System.Boolean, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: 0
|
||||
m_Value: 1
|
||||
- rid: 1226592736610877560
|
||||
type: {class: WaitOnSlot, ns: Editor.Dialogue, asm: AppleHillsEditor}
|
||||
data:
|
||||
@@ -1074,7 +1030,7 @@ MonoBehaviour:
|
||||
serializedVersion: 2
|
||||
Hash: 91bec6fb97b9d7d954d9847f1c7dfdce
|
||||
m_Version: 2
|
||||
m_Position: {x: 3164.9407, y: 88.21074}
|
||||
m_Position: {x: 3317.6943, y: 96.60597}
|
||||
m_Title: DialogueNode
|
||||
m_Tooltip:
|
||||
m_NodePreviewModel:
|
||||
@@ -1085,12 +1041,12 @@ MonoBehaviour:
|
||||
- __option_DialogueLineType
|
||||
- __option_NoLines
|
||||
- LoopThroughDefaultLines
|
||||
- DefaultDialogueLine
|
||||
- DefaultDialogueContent
|
||||
m_ValueList:
|
||||
- rid: 1226592736610877568
|
||||
- rid: 1226592736610877569
|
||||
- rid: 1226592736610877570
|
||||
- rid: 1226592736610877571
|
||||
- rid: 7545629632211976314
|
||||
m_InputPortInfos:
|
||||
expandedPortsById:
|
||||
m_KeyList: []
|
||||
@@ -1125,10 +1081,6 @@ MonoBehaviour:
|
||||
type: {class: 'Constant`1[[System.Boolean, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: 0
|
||||
- rid: 1226592736610877571
|
||||
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: Sweat, delicions steak!
|
||||
- rid: 1226592736610877572
|
||||
type: {class: DialogueNode, ns: Editor.Dialogue, asm: AppleHillsEditor}
|
||||
data:
|
||||
@@ -1164,3 +1116,87 @@ MonoBehaviour:
|
||||
m_PortDirection: 1
|
||||
m_PortOrientation: 0
|
||||
m_Title: in
|
||||
- rid: 7545629632211976303
|
||||
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value:
|
||||
_contentType: 0
|
||||
_text: Hey boy, go on and pick up that ass over there!
|
||||
_image: {fileID: 0}
|
||||
- rid: 7545629632211976304
|
||||
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value:
|
||||
_contentType: 0
|
||||
_text: "Go on, it's right there!\t\t"
|
||||
_image: {fileID: 0}
|
||||
- rid: 7545629632211976305
|
||||
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value:
|
||||
_contentType: 0
|
||||
_text: I need ASS!
|
||||
_image: {fileID: 0}
|
||||
- rid: 7545629632211976306
|
||||
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value:
|
||||
_contentType: 0
|
||||
_text: C'mon, don't be like this!
|
||||
_image: {fileID: 0}
|
||||
- rid: 7545629632211976307
|
||||
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value:
|
||||
_contentType: 0
|
||||
_text: Yessss, that's the stuff, now chop it!
|
||||
_image: {fileID: 0}
|
||||
- rid: 7545629632211976308
|
||||
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value:
|
||||
_contentType: 1
|
||||
_text:
|
||||
_image: {fileID: 6282751622250221668, guid: 204325ac88be74d4d882a078c64cf5e1, type: 3}
|
||||
- rid: 7545629632211976309
|
||||
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value:
|
||||
_contentType: 0
|
||||
_text: Chop it!!
|
||||
_image: {fileID: 0}
|
||||
- rid: 7545629632211976310
|
||||
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value:
|
||||
_contentType: 0
|
||||
_text: Good, shit now cook!
|
||||
_image: {fileID: 0}
|
||||
- rid: 7545629632211976311
|
||||
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value:
|
||||
_contentType: 1
|
||||
_text:
|
||||
_image: {fileID: 6282751622250221668, guid: 204325ac88be74d4d882a078c64cf5e1, type: 3}
|
||||
- rid: 7545629632211976312
|
||||
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value:
|
||||
_contentType: 0
|
||||
_text: What exactly are you cooking?!
|
||||
_image: {fileID: 0}
|
||||
- rid: 7545629632211976313
|
||||
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value:
|
||||
_contentType: 0
|
||||
_text: What exactly are you cooking?!
|
||||
_image: {fileID: 0}
|
||||
- rid: 7545629632211976314
|
||||
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value:
|
||||
_contentType: 0
|
||||
_text: Yessssss, thanks!
|
||||
_image: {fileID: 0}
|
||||
|
||||
@@ -36,14 +36,12 @@ MonoBehaviour:
|
||||
- rid: 1219994508087787764
|
||||
- rid: 1219994508087787770
|
||||
- rid: 1219994508087787776
|
||||
- rid: 1226592702090706949
|
||||
m_GraphWireModels:
|
||||
- rid: 1219994508087787755
|
||||
- rid: 1219994508087787773
|
||||
- rid: 1219994508087787779
|
||||
- rid: 1219994508087787813
|
||||
- rid: 1226592702090706955
|
||||
- rid: 1226592702090706956
|
||||
- rid: 7545629632211976322
|
||||
m_GraphStickyNoteModels: []
|
||||
m_GraphPlacematModels: []
|
||||
m_GraphVariableModels:
|
||||
@@ -54,10 +52,10 @@ MonoBehaviour:
|
||||
m_LocalSubgraphs: []
|
||||
m_LastKnownBounds:
|
||||
serializedVersion: 2
|
||||
x: 128
|
||||
y: -65
|
||||
width: 2055
|
||||
height: 243
|
||||
x: -163.2
|
||||
y: -62.4
|
||||
width: 2048.8
|
||||
height: 514.4
|
||||
m_GraphElementMetaData:
|
||||
- m_Guid:
|
||||
m_Value0: 13346176596883742728
|
||||
@@ -148,29 +146,13 @@ MonoBehaviour:
|
||||
m_Category: 2
|
||||
m_Index: 3
|
||||
- m_Guid:
|
||||
m_Value0: 3534792673092891566
|
||||
m_Value1: 6472493350207860515
|
||||
m_Value0: 3747411033454993788
|
||||
m_Value1: 16062730125593257019
|
||||
m_HashGuid:
|
||||
serializedVersion: 2
|
||||
Hash: aef35a42351b0e3123af37c668ead259
|
||||
m_Category: 0
|
||||
m_Index: 6
|
||||
- m_Guid:
|
||||
m_Value0: 1069232297653548642
|
||||
m_Value1: 12871763382231758094
|
||||
m_HashGuid:
|
||||
serializedVersion: 2
|
||||
Hash: 62b603141cadd60e0ef5cd3e99b0a1b2
|
||||
Hash: 7ce176f47a7a01343ba4f3faf147eade
|
||||
m_Category: 2
|
||||
m_Index: 4
|
||||
- m_Guid:
|
||||
m_Value0: 6652862542851746443
|
||||
m_Value1: 1010545699289270970
|
||||
m_HashGuid:
|
||||
serializedVersion: 2
|
||||
Hash: 8b2a2efe3bb7535cba8a6f9bf52d060e
|
||||
m_Category: 2
|
||||
m_Index: 5
|
||||
m_EntryPoint:
|
||||
rid: 1219994508087787747
|
||||
m_Graph:
|
||||
@@ -201,7 +183,7 @@ MonoBehaviour:
|
||||
serializedVersion: 2
|
||||
Hash: 0820e35ee72437b996f6e8e25ecef5fa
|
||||
m_Version: 2
|
||||
m_Position: {x: 316.4595, y: -65.01193}
|
||||
m_Position: {x: 6.237854, y: -6.821892}
|
||||
m_Title:
|
||||
m_Tooltip:
|
||||
m_NodePreviewModel:
|
||||
@@ -240,7 +222,7 @@ MonoBehaviour:
|
||||
serializedVersion: 2
|
||||
Hash: be46cc430316f2042ae9853a1220f241
|
||||
m_Version: 2
|
||||
m_Position: {x: 2070.2, y: 1.3479004}
|
||||
m_Position: {x: 1771.3995, y: -14.25327}
|
||||
m_Title:
|
||||
m_Tooltip:
|
||||
m_NodePreviewModel:
|
||||
@@ -277,7 +259,7 @@ MonoBehaviour:
|
||||
serializedVersion: 2
|
||||
Hash: e77ae5c2cfec4277e8e3c20e1d1da05f
|
||||
m_Version: 2
|
||||
m_Position: {x: 530.97986, y: -60.683594}
|
||||
m_Position: {x: 220.75827, y: -61.741615}
|
||||
m_Title:
|
||||
m_Tooltip:
|
||||
m_NodePreviewModel:
|
||||
@@ -287,13 +269,15 @@ MonoBehaviour:
|
||||
m_KeyList:
|
||||
- __option_DialogueLineType
|
||||
- __option_NoLines
|
||||
- DefaultDialogueLine
|
||||
- LoopThroughDefaultLines
|
||||
- DefaultDialogueContent1
|
||||
- DefaultDialogueContent2
|
||||
m_ValueList:
|
||||
- rid: 1219994508087787857
|
||||
- rid: 1219994508087787858
|
||||
- rid: 1219994508087787897
|
||||
- rid: 1219994508087787904
|
||||
- rid: 7545629632211976301
|
||||
- rid: 7545629632211976302
|
||||
m_InputPortInfos:
|
||||
expandedPortsById:
|
||||
m_KeyList: []
|
||||
@@ -381,7 +365,7 @@ MonoBehaviour:
|
||||
serializedVersion: 2
|
||||
Hash: 85d948457f20a43a3e0d65b11e3e1a96
|
||||
m_Version: 2
|
||||
m_Position: {x: 128.085, y: -12.860001}
|
||||
m_Position: {x: -163.09268, y: 58.026043}
|
||||
m_Title: Anna-Lyse
|
||||
m_Tooltip:
|
||||
m_NodePreviewModel:
|
||||
@@ -422,7 +406,7 @@ MonoBehaviour:
|
||||
serializedVersion: 2
|
||||
Hash: 3cbfd8ef332fa01b78a5ecc384f2e5e7
|
||||
m_Version: 2
|
||||
m_Position: {x: 914.5827, y: -60.08837}
|
||||
m_Position: {x: 714.5492, y: -62.216354}
|
||||
m_Title: DialogueNode
|
||||
m_Tooltip:
|
||||
m_NodePreviewModel:
|
||||
@@ -432,17 +416,17 @@ MonoBehaviour:
|
||||
m_KeyList:
|
||||
- __option_DialogueLineType
|
||||
- __option_NoLines
|
||||
- DefaultDialogueLine1
|
||||
- DefaultDialogueLine2
|
||||
- DefaultDialogueLine3
|
||||
- LoopThroughDefaultLines
|
||||
- DefaultDialogueContent1
|
||||
- DefaultDialogueContent2
|
||||
- DefaultDialogueContent3
|
||||
m_ValueList:
|
||||
- rid: 1219994508087787860
|
||||
- rid: 1219994508087787861
|
||||
- rid: 1219994508087787900
|
||||
- rid: 1219994508087787901
|
||||
- rid: 1219994508087787902
|
||||
- rid: 1219994508087787905
|
||||
- rid: 7545629632211976294
|
||||
- rid: 7545629632211976295
|
||||
- rid: 7545629632211976296
|
||||
m_InputPortInfos:
|
||||
expandedPortsById:
|
||||
m_KeyList: []
|
||||
@@ -503,7 +487,7 @@ MonoBehaviour:
|
||||
serializedVersion: 2
|
||||
Hash: 05c5ff0463a83c928482c30dbf7a2c0b
|
||||
m_Version: 2
|
||||
m_Position: {x: 1294.008, y: -60.75061}
|
||||
m_Position: {x: 1210.0558, y: -60.75061}
|
||||
m_Title: DialogueNode
|
||||
m_Tooltip:
|
||||
m_NodePreviewModel:
|
||||
@@ -513,13 +497,19 @@ MonoBehaviour:
|
||||
m_KeyList:
|
||||
- __option_DialogueLineType
|
||||
- __option_NoLines
|
||||
- DefaultDialogueLine
|
||||
- LoopThroughDefaultLines
|
||||
- DefaultDialogueContent1
|
||||
- DefaultDialogueContent2
|
||||
- DefaultDialogueContent3
|
||||
- DefaultDialogueContent4
|
||||
m_ValueList:
|
||||
- rid: 1219994508087787863
|
||||
- rid: 1219994508087787864
|
||||
- rid: 1219994508087787898
|
||||
- rid: 1219994508087787906
|
||||
- rid: 7545629632211976297
|
||||
- rid: 7545629632211976298
|
||||
- rid: 7545629632211976323
|
||||
- rid: 7545629632211976324
|
||||
m_InputPortInfos:
|
||||
expandedPortsById:
|
||||
m_KeyList: []
|
||||
@@ -609,14 +599,14 @@ MonoBehaviour:
|
||||
m_EnumType:
|
||||
m_Identification: Editor.Dialogue.DialogueType, AppleHillsEditor, Version=0.0.0.0,
|
||||
Culture=neutral, PublicKeyToken=null
|
||||
m_Value: 0
|
||||
m_Value: 1
|
||||
m_EnumType:
|
||||
m_Identification: Editor.Dialogue.DialogueType, AppleHillsEditor, Version=0.0.0.0,
|
||||
Culture=neutral, PublicKeyToken=null
|
||||
- rid: 1219994508087787858
|
||||
type: {class: 'Constant`1[[System.Int32, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: 1
|
||||
m_Value: 2
|
||||
- rid: 1219994508087787860
|
||||
type: {class: EnumConstant, ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
@@ -639,34 +629,14 @@ MonoBehaviour:
|
||||
m_EnumType:
|
||||
m_Identification: Editor.Dialogue.DialogueType, AppleHillsEditor, Version=0.0.0.0,
|
||||
Culture=neutral, PublicKeyToken=null
|
||||
m_Value: 0
|
||||
m_Value: 1
|
||||
m_EnumType:
|
||||
m_Identification: Editor.Dialogue.DialogueType, AppleHillsEditor, Version=0.0.0.0,
|
||||
Culture=neutral, PublicKeyToken=null
|
||||
- rid: 1219994508087787864
|
||||
type: {class: 'Constant`1[[System.Int32, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: 1
|
||||
- rid: 1219994508087787897
|
||||
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: This is a first line of dialogue
|
||||
- rid: 1219994508087787898
|
||||
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: Another regular line
|
||||
- rid: 1219994508087787900
|
||||
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: One multiline
|
||||
- rid: 1219994508087787901
|
||||
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: Two multiline
|
||||
- rid: 1219994508087787902
|
||||
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: Three multiline
|
||||
m_Value: 4
|
||||
- rid: 1219994508087787904
|
||||
type: {class: 'Constant`1[[System.Boolean, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
@@ -678,82 +648,65 @@ MonoBehaviour:
|
||||
- rid: 1219994508087787906
|
||||
type: {class: 'Constant`1[[System.Boolean, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: 0
|
||||
- rid: 1226592702090706949
|
||||
type: {class: UserNodeModelImp, ns: Unity.GraphToolkit.Editor.Implementation, asm: Unity.GraphToolkit.Editor}
|
||||
data:
|
||||
m_Guid:
|
||||
m_Value0: 3534792673092891566
|
||||
m_Value1: 6472493350207860515
|
||||
m_HashGuid:
|
||||
serializedVersion: 2
|
||||
Hash: aef35a42351b0e3123af37c668ead259
|
||||
m_Version: 2
|
||||
m_Position: {x: 1675.55, y: -47.149998}
|
||||
m_Title: DialogueNode
|
||||
m_Tooltip:
|
||||
m_NodePreviewModel:
|
||||
rid: -2
|
||||
m_State: 0
|
||||
m_InputConstantsById:
|
||||
m_KeyList:
|
||||
- __option_DialogueLineType
|
||||
- __option_NoLines
|
||||
- DefaultDialogueLine2
|
||||
- LoopThroughDefaultLines
|
||||
- DefaultDialogueLine1
|
||||
m_ValueList:
|
||||
- rid: 1226592702090706950
|
||||
- rid: 1226592702090706951
|
||||
- rid: 1226592702090706958
|
||||
- rid: 1226592702090706953
|
||||
- rid: 1226592702090706957
|
||||
m_InputPortInfos:
|
||||
expandedPortsById:
|
||||
m_KeyList: []
|
||||
m_ValueList:
|
||||
m_OutputPortInfos:
|
||||
expandedPortsById:
|
||||
m_KeyList: []
|
||||
m_ValueList:
|
||||
m_Collapsed: 0
|
||||
m_CurrentModeIndex: 0
|
||||
m_ElementColor:
|
||||
m_Color: {r: 0, g: 0, b: 0, a: 0}
|
||||
m_HasUserColor: 0
|
||||
m_Node:
|
||||
rid: 1226592702090706954
|
||||
- rid: 1226592702090706950
|
||||
type: {class: EnumConstant, ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
m_Value: 1
|
||||
- rid: 7545629632211976294
|
||||
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value:
|
||||
m_EnumType:
|
||||
m_Identification: Editor.Dialogue.DialogueType, AppleHillsEditor, Version=0.0.0.0,
|
||||
Culture=neutral, PublicKeyToken=null
|
||||
m_Value: 1
|
||||
m_EnumType:
|
||||
m_Identification: Editor.Dialogue.DialogueType, AppleHillsEditor, Version=0.0.0.0,
|
||||
Culture=neutral, PublicKeyToken=null
|
||||
- rid: 1226592702090706951
|
||||
type: {class: 'Constant`1[[System.Int32, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
_contentType: 0
|
||||
_text: Some other test
|
||||
_image: {fileID: 0}
|
||||
- rid: 7545629632211976295
|
||||
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: 2
|
||||
- rid: 1226592702090706953
|
||||
type: {class: 'Constant`1[[System.Boolean, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
m_Value:
|
||||
_contentType: 0
|
||||
_text: Some much longer text in here etc.
|
||||
_image: {fileID: 0}
|
||||
- rid: 7545629632211976296
|
||||
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: 1
|
||||
- rid: 1226592702090706954
|
||||
type: {class: DialogueNode, ns: Editor.Dialogue, asm: AppleHillsEditor}
|
||||
data:
|
||||
- rid: 1226592702090706955
|
||||
m_Value:
|
||||
_contentType: 0
|
||||
_text: Some oooother text
|
||||
_image: {fileID: 0}
|
||||
- rid: 7545629632211976297
|
||||
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value:
|
||||
_contentType: 1
|
||||
_text:
|
||||
_image: {fileID: -765527507412255412, guid: f70246e6148769846aaea223ec0c2a55, type: 3}
|
||||
- rid: 7545629632211976298
|
||||
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value:
|
||||
_contentType: 0
|
||||
_text: Now it's text
|
||||
_image: {fileID: -9213056636207805707, guid: 00354ded9d8f8d643acc14837a229544, type: 3}
|
||||
- rid: 7545629632211976301
|
||||
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value:
|
||||
_contentType: 0
|
||||
_text: Psst, I'm just testing some stuff df
|
||||
_image: {fileID: 0}
|
||||
- rid: 7545629632211976302
|
||||
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value:
|
||||
_contentType: 1
|
||||
_text:
|
||||
_image: {fileID: -9213056636207805707, guid: 00354ded9d8f8d643acc14837a229544, type: 3}
|
||||
- rid: 7545629632211976322
|
||||
type: {class: WireModel, ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Guid:
|
||||
m_Value0: 1069232297653548642
|
||||
m_Value1: 12871763382231758094
|
||||
m_Value0: 3747411033454993788
|
||||
m_Value1: 16062730125593257019
|
||||
m_HashGuid:
|
||||
serializedVersion: 2
|
||||
Hash: 62b603141cadd60e0ef5cd3e99b0a1b2
|
||||
Hash: 7ce176f47a7a01343ba4f3faf147eade
|
||||
m_Version: 2
|
||||
m_FromPortReference:
|
||||
m_NodeModelGuid:
|
||||
@@ -766,38 +719,6 @@ MonoBehaviour:
|
||||
m_PortDirection: 2
|
||||
m_PortOrientation: 0
|
||||
m_Title: out
|
||||
m_ToPortReference:
|
||||
m_NodeModelGuid:
|
||||
m_Value0: 3534792673092891566
|
||||
m_Value1: 6472493350207860515
|
||||
m_NodeModelHashGuid:
|
||||
serializedVersion: 2
|
||||
Hash: aef35a42351b0e3123af37c668ead259
|
||||
m_UniqueId: in
|
||||
m_PortDirection: 1
|
||||
m_PortOrientation: 0
|
||||
m_Title: in
|
||||
- rid: 1226592702090706956
|
||||
type: {class: WireModel, ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Guid:
|
||||
m_Value0: 6652862542851746443
|
||||
m_Value1: 1010545699289270970
|
||||
m_HashGuid:
|
||||
serializedVersion: 2
|
||||
Hash: 8b2a2efe3bb7535cba8a6f9bf52d060e
|
||||
m_Version: 2
|
||||
m_FromPortReference:
|
||||
m_NodeModelGuid:
|
||||
m_Value0: 3534792673092891566
|
||||
m_Value1: 6472493350207860515
|
||||
m_NodeModelHashGuid:
|
||||
serializedVersion: 2
|
||||
Hash: aef35a42351b0e3123af37c668ead259
|
||||
m_UniqueId: out
|
||||
m_PortDirection: 2
|
||||
m_PortOrientation: 0
|
||||
m_Title: out
|
||||
m_ToPortReference:
|
||||
m_NodeModelGuid:
|
||||
m_Value0: 356371523793864382
|
||||
@@ -809,11 +730,17 @@ MonoBehaviour:
|
||||
m_PortDirection: 1
|
||||
m_PortOrientation: 0
|
||||
m_Title: in
|
||||
- rid: 1226592702090706957
|
||||
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
- rid: 7545629632211976323
|
||||
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: And we're...
|
||||
- rid: 1226592702090706958
|
||||
type: {class: 'Constant`1[[System.String, mscorlib]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
m_Value:
|
||||
_contentType: 1
|
||||
_text:
|
||||
_image: {fileID: -9213056636207805707, guid: 00354ded9d8f8d643acc14837a229544, type: 3}
|
||||
- rid: 7545629632211976324
|
||||
type: {class: 'Constant`1[[Dialogue.DialogueContent, AppleHillsScripts]]', ns: Unity.GraphToolkit.Editor, asm: Unity.GraphToolkit.Internal.Editor}
|
||||
data:
|
||||
m_Value: ...in a loop
|
||||
m_Value:
|
||||
_contentType: 0
|
||||
_text: Now it's text again and it should loop!
|
||||
_image: {fileID: -9213056636207805707, guid: 00354ded9d8f8d643acc14837a229544, type: 3}
|
||||
|
||||
130
Assets/Editor/Dialogue/DialogueContentDrawer.cs
Normal file
@@ -0,0 +1,130 @@
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Dialogue.Editor
|
||||
{
|
||||
/// <summary>
|
||||
/// Custom property drawer for DialogueContent that displays either text or image fields based on content type
|
||||
/// </summary>
|
||||
[CustomPropertyDrawer(typeof(DialogueContent))]
|
||||
public class DialogueContentDrawer : PropertyDrawer
|
||||
{
|
||||
// Height constants
|
||||
private const float TypeSelectorHeight = 20f;
|
||||
private const float PropertySpacing = 2f;
|
||||
private const float TextFieldHeight = 40f; // Taller for multi-line text
|
||||
private const float ImageFieldHeight = 18f;
|
||||
private const float PreviewHeight = 64f;
|
||||
|
||||
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
|
||||
{
|
||||
var contentTypeProperty = property.FindPropertyRelative("_contentType");
|
||||
var height = TypeSelectorHeight + PropertySpacing;
|
||||
|
||||
// Add height based on content type
|
||||
if (contentTypeProperty.enumValueIndex == (int)DialogueContentType.Text)
|
||||
{
|
||||
height += TextFieldHeight;
|
||||
}
|
||||
else // Image
|
||||
{
|
||||
height += ImageFieldHeight;
|
||||
|
||||
// Add preview height if an image is assigned
|
||||
var imageProperty = property.FindPropertyRelative("_image");
|
||||
if (imageProperty.objectReferenceValue != null)
|
||||
{
|
||||
height += PropertySpacing + PreviewHeight;
|
||||
}
|
||||
}
|
||||
|
||||
return height;
|
||||
}
|
||||
|
||||
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
|
||||
{
|
||||
EditorGUI.BeginProperty(position, label, property);
|
||||
|
||||
// Create a property field and indent it
|
||||
var contentRect = EditorGUI.PrefixLabel(position, GUIUtility.GetControlID(FocusType.Passive), label);
|
||||
var indent = EditorGUI.indentLevel;
|
||||
EditorGUI.indentLevel = 0;
|
||||
|
||||
// Get properties
|
||||
var contentTypeProperty = property.FindPropertyRelative("_contentType");
|
||||
var textProperty = property.FindPropertyRelative("_text");
|
||||
var imageProperty = property.FindPropertyRelative("_image");
|
||||
|
||||
// Calculate rects
|
||||
var typeRect = new Rect(contentRect.x, contentRect.y, contentRect.width, TypeSelectorHeight);
|
||||
var contentFieldRect = new Rect(
|
||||
contentRect.x,
|
||||
contentRect.y + TypeSelectorHeight + PropertySpacing,
|
||||
contentRect.width,
|
||||
contentTypeProperty.enumValueIndex == (int)DialogueContentType.Text ? TextFieldHeight : ImageFieldHeight);
|
||||
|
||||
// Draw the content type dropdown
|
||||
EditorGUI.PropertyField(typeRect, contentTypeProperty, GUIContent.none);
|
||||
|
||||
// Draw the appropriate field based on content type
|
||||
if (contentTypeProperty.enumValueIndex == (int)DialogueContentType.Text)
|
||||
{
|
||||
// Create a custom style with word wrap enabled
|
||||
GUIStyle wordWrapStyle = new GUIStyle(EditorStyles.textArea);
|
||||
wordWrapStyle.wordWrap = true;
|
||||
|
||||
// Text field with word wrap for multi-line input
|
||||
textProperty.stringValue = EditorGUI.TextArea(contentFieldRect, textProperty.stringValue, wordWrapStyle);
|
||||
}
|
||||
else // Image
|
||||
{
|
||||
// Draw the image field
|
||||
EditorGUI.PropertyField(contentFieldRect, imageProperty, GUIContent.none);
|
||||
|
||||
// Draw a preview if an image is assigned
|
||||
if (imageProperty.objectReferenceValue != null)
|
||||
{
|
||||
var sprite = imageProperty.objectReferenceValue as Sprite;
|
||||
if (sprite != null)
|
||||
{
|
||||
var previewRect = new Rect(
|
||||
contentRect.x,
|
||||
contentFieldRect.y + contentFieldRect.height + PropertySpacing,
|
||||
contentRect.width,
|
||||
PreviewHeight);
|
||||
|
||||
// Draw the preview with preserved aspect ratio
|
||||
DrawSpritePreview(previewRect, sprite);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
EditorGUI.indentLevel = indent;
|
||||
EditorGUI.EndProperty();
|
||||
}
|
||||
|
||||
private void DrawSpritePreview(Rect position, Sprite sprite)
|
||||
{
|
||||
if (sprite == null || sprite.texture == null) return;
|
||||
|
||||
// Calculate aspect-preserved rect
|
||||
float aspectRatio = sprite.rect.width / sprite.rect.height;
|
||||
float targetWidth = Mathf.Min(position.width, position.height * aspectRatio);
|
||||
float targetHeight = targetWidth / aspectRatio;
|
||||
|
||||
// Center the preview
|
||||
Rect previewRect = new Rect(
|
||||
position.x + (position.width - targetWidth) * 0.5f,
|
||||
position.y + (position.height - targetHeight) * 0.5f,
|
||||
targetWidth,
|
||||
targetHeight
|
||||
);
|
||||
|
||||
// Draw the sprite preview
|
||||
EditorGUI.DrawPreviewTexture(previewRect, sprite.texture, null, ScaleMode.ScaleToFit);
|
||||
|
||||
// Draw a border around the preview
|
||||
GUI.Box(previewRect, GUIContent.none);
|
||||
}
|
||||
}
|
||||
}
|
||||
3
Assets/Editor/Dialogue/DialogueContentDrawer.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f77e7b681b7f464f96242172ea625ed4
|
||||
timeCreated: 1759912655
|
||||
@@ -111,24 +111,42 @@ namespace Editor.Dialogue
|
||||
var lineCountOption = node.GetNodeOptionByName("NoLines");
|
||||
lineCountOption.TryGetValue<int>(out var lineCount);
|
||||
|
||||
// Process dialogue lines based on line type
|
||||
// Process dialogue content
|
||||
if (lineType == DialogueType.SayMultipleLines)
|
||||
{
|
||||
for (var i = 0; i < lineCount; i++)
|
||||
{
|
||||
var lineValue = GetPortValue<string>(node.GetInputPortByName($"DefaultDialogueLine{i + 1}"));
|
||||
if (!string.IsNullOrEmpty(lineValue))
|
||||
var contentPort = node.GetInputPortByName($"DefaultDialogueContent{i + 1}");
|
||||
var contentValue = GetPortValue<DialogueContent>(contentPort);
|
||||
|
||||
if (contentValue != null)
|
||||
{
|
||||
runtimeNode.dialogueLines.Add(lineValue);
|
||||
// Add to dialogueContent list
|
||||
runtimeNode.dialogueContent.Add(contentValue);
|
||||
|
||||
// Also add to legacy dialogueLines list for backward compatibility
|
||||
if (contentValue.ContentType == DialogueContentType.Text && !string.IsNullOrEmpty(contentValue.Text))
|
||||
{
|
||||
runtimeNode.dialogueLines.Add(contentValue.Text);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var lineValue = GetPortValue<string>(node.GetInputPortByName("DefaultDialogueLine"));
|
||||
if (!string.IsNullOrEmpty(lineValue))
|
||||
var contentPort = node.GetInputPortByName("DefaultDialogueContent");
|
||||
var contentValue = GetPortValue<DialogueContent>(contentPort);
|
||||
|
||||
if (contentValue != null)
|
||||
{
|
||||
runtimeNode.dialogueLines.Add(lineValue);
|
||||
// Add to dialogueContent list
|
||||
runtimeNode.dialogueContent.Add(contentValue);
|
||||
|
||||
// Also add to legacy dialogueLines list for backward compatibility
|
||||
if (contentValue.ContentType == DialogueContentType.Text && !string.IsNullOrEmpty(contentValue.Text))
|
||||
{
|
||||
runtimeNode.dialogueLines.Add(contentValue.Text);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -169,60 +187,98 @@ namespace Editor.Dialogue
|
||||
runtimeNode.slotItemID = slot.itemId;
|
||||
}
|
||||
|
||||
// Process incorrect item lines
|
||||
// Get line type and count options for incorrect items
|
||||
var incorrectItemLineTypeOption = node.GetNodeOptionByName("IncorrectItemDialogueLineType");
|
||||
incorrectItemLineTypeOption.TryGetValue<DialogueType>(out var incorrectItemLineType);
|
||||
|
||||
var incorrectItemLineCountOption = node.GetNodeOptionByName("IncorrectItemNoLines");
|
||||
incorrectItemLineCountOption.TryGetValue<int>(out var incorrectItemLineCount);
|
||||
|
||||
// Process incorrect item content
|
||||
if (incorrectItemLineType == DialogueType.SayMultipleLines)
|
||||
{
|
||||
for (var i = 0; i < incorrectItemLineCount; i++)
|
||||
{
|
||||
var lineValue = GetPortValue<string>(node.GetInputPortByName($"IncorrectItemDialogueLine{i + 1}"));
|
||||
if (!string.IsNullOrEmpty(lineValue))
|
||||
var contentPort = node.GetInputPortByName($"IncorrectItemDialogueContent{i + 1}");
|
||||
var contentValue = GetPortValue<DialogueContent>(contentPort);
|
||||
|
||||
if (contentValue != null)
|
||||
{
|
||||
runtimeNode.incorrectItemLines.Add(lineValue);
|
||||
// Add to incorrectItemContent list
|
||||
runtimeNode.incorrectItemContent.Add(contentValue);
|
||||
|
||||
// Also add to legacy incorrectItemLines list for backward compatibility
|
||||
if (contentValue.ContentType == DialogueContentType.Text && !string.IsNullOrEmpty(contentValue.Text))
|
||||
{
|
||||
runtimeNode.incorrectItemLines.Add(contentValue.Text);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var lineValue = GetPortValue<string>(node.GetInputPortByName("IncorrectItemDialogueLine"));
|
||||
if (!string.IsNullOrEmpty(lineValue))
|
||||
var contentPort = node.GetInputPortByName("IncorrectItemDialogueContent");
|
||||
var contentValue = GetPortValue<DialogueContent>(contentPort);
|
||||
|
||||
if (contentValue != null)
|
||||
{
|
||||
runtimeNode.incorrectItemLines.Add(lineValue);
|
||||
// Add to incorrectItemContent list
|
||||
runtimeNode.incorrectItemContent.Add(contentValue);
|
||||
|
||||
// Also add to legacy incorrectItemLines list for backward compatibility
|
||||
if (contentValue.ContentType == DialogueContentType.Text && !string.IsNullOrEmpty(contentValue.Text))
|
||||
{
|
||||
runtimeNode.incorrectItemLines.Add(contentValue.Text);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
runtimeNode.loopThroughIncorrectLines =
|
||||
GetPortValue<bool>(node.GetInputPortByName("LoopThroughIncorrectItemLines"));
|
||||
|
||||
// Process forbidden item lines
|
||||
// Get line type and count options for forbidden items
|
||||
var forbiddenItemLineTypeOption = node.GetNodeOptionByName("ForbiddenItemDialogueLineType");
|
||||
forbiddenItemLineTypeOption.TryGetValue<DialogueType>(out var forbiddenItemLineType);
|
||||
|
||||
var forbiddenItemLineCountOption = node.GetNodeOptionByName("ForbiddenItemNoLines");
|
||||
forbiddenItemLineCountOption.TryGetValue<int>(out var forbiddenItemLineCount);
|
||||
|
||||
// Process forbidden item content
|
||||
if (forbiddenItemLineType == DialogueType.SayMultipleLines)
|
||||
{
|
||||
for (var i = 0; i < forbiddenItemLineCount; i++)
|
||||
{
|
||||
var lineValue = GetPortValue<string>(node.GetInputPortByName($"ForbiddenItemDialogueLine{i + 1}"));
|
||||
if (!string.IsNullOrEmpty(lineValue))
|
||||
var contentPort = node.GetInputPortByName($"ForbiddenItemDialogueContent{i + 1}");
|
||||
var contentValue = GetPortValue<DialogueContent>(contentPort);
|
||||
|
||||
if (contentValue != null)
|
||||
{
|
||||
runtimeNode.forbiddenItemLines.Add(lineValue);
|
||||
// Add to forbiddenItemContent list
|
||||
runtimeNode.forbiddenItemContent.Add(contentValue);
|
||||
|
||||
// Also add to legacy forbiddenItemLines list for backward compatibility
|
||||
if (contentValue.ContentType == DialogueContentType.Text && !string.IsNullOrEmpty(contentValue.Text))
|
||||
{
|
||||
runtimeNode.forbiddenItemLines.Add(contentValue.Text);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var lineValue = GetPortValue<string>(node.GetInputPortByName("ForbiddenItemDialogueLine"));
|
||||
if (!string.IsNullOrEmpty(lineValue))
|
||||
var contentPort = node.GetInputPortByName("ForbiddenItemDialogueContent");
|
||||
var contentValue = GetPortValue<DialogueContent>(contentPort);
|
||||
|
||||
if (contentValue != null)
|
||||
{
|
||||
runtimeNode.forbiddenItemLines.Add(lineValue);
|
||||
// Add to forbiddenItemContent list
|
||||
runtimeNode.forbiddenItemContent.Add(contentValue);
|
||||
|
||||
// Also add to legacy forbiddenItemLines list for backward compatibility
|
||||
if (contentValue.ContentType == DialogueContentType.Text && !string.IsNullOrEmpty(contentValue.Text))
|
||||
{
|
||||
runtimeNode.forbiddenItemLines.Add(contentValue.Text);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -259,4 +315,4 @@ namespace Editor.Dialogue
|
||||
return fallbackValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using UnityEngine;
|
||||
using Unity.GraphToolkit.Editor;
|
||||
using System;
|
||||
using Dialogue;
|
||||
|
||||
namespace Editor.Dialogue
|
||||
{
|
||||
@@ -37,8 +38,7 @@ namespace Editor.Dialogue
|
||||
const string LineTypeOptionName = "DialogueLineType";
|
||||
const string NoLinesOptionName = "NoLines";
|
||||
const string LoopThroughDefaultLinesOptionName = "LoopThroughDefaultLines";
|
||||
const string DefaultDialogueLineOptionName = "DefaultDialogueLine";
|
||||
|
||||
const string DefaultDialogueContentOptionName = "DefaultDialogueContent";
|
||||
|
||||
protected override void OnDefineOptions(IOptionDefinitionContext context)
|
||||
{
|
||||
@@ -47,7 +47,6 @@ namespace Editor.Dialogue
|
||||
.WithDefaultValue(DialogueType.SayOneLine)
|
||||
.Delayed();
|
||||
|
||||
|
||||
context.AddOption<int>(NoLinesOptionName)
|
||||
.WithDisplayName("Number of Default Lines")
|
||||
.WithDefaultValue(1)
|
||||
@@ -59,6 +58,7 @@ namespace Editor.Dialogue
|
||||
context.AddInputPort("in").Build();
|
||||
context.AddOutputPort("out").Build();
|
||||
|
||||
// Get line type and count options
|
||||
var lineTypeOption = GetNodeOptionByName(LineTypeOptionName);
|
||||
lineTypeOption.TryGetValue<DialogueType>(out var lineType);
|
||||
var lineCountOption = GetNodeOptionByName(NoLinesOptionName);
|
||||
@@ -68,15 +68,21 @@ namespace Editor.Dialogue
|
||||
{
|
||||
for (var i = 0; i < lineCount; i++)
|
||||
{
|
||||
context.AddInputPort<string>($"{DefaultDialogueLineOptionName}{i + 1}").WithDisplayName($"Default Dialogue Line {i + 1}").Build();
|
||||
context.AddInputPort<DialogueContent>($"{DefaultDialogueContentOptionName}{i + 1}")
|
||||
.WithDisplayName($"Dialogue Content {i + 1}")
|
||||
.Build();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
context.AddInputPort<string>($"{DefaultDialogueLineOptionName}").WithDisplayName("Default Dialogue Line").Build();
|
||||
context.AddInputPort<DialogueContent>($"{DefaultDialogueContentOptionName}")
|
||||
.WithDisplayName("Dialogue Content")
|
||||
.Build();
|
||||
}
|
||||
|
||||
context.AddInputPort<bool>($"{LoopThroughDefaultLinesOptionName}").WithDisplayName("Loop Through Default Lines?").Build();
|
||||
context.AddInputPort<bool>($"{LoopThroughDefaultLinesOptionName}")
|
||||
.WithDisplayName("Loop Through Content?")
|
||||
.Build();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -110,38 +116,39 @@ namespace Editor.Dialogue
|
||||
public class WaitOnSlot : DialogueNode
|
||||
{
|
||||
const string RequiredSlotOptionName = "RequiredSlot";
|
||||
// Incorrect item - i.e. not the correct one but also not forbidden
|
||||
const string IncorrectItemLineTypeOptionName = "IncorrectItemDialogueLineType";
|
||||
const string IncorrectItemNoLinesOptionName = "IncorrectItemNoLines";
|
||||
const string LoopThroughIncorrectItemLinesOptionName = "LoopThroughIncorrectItemLines";
|
||||
const string IncorrectIteDialogueLineOptionName = "IncorrectItemDialogueLine";
|
||||
// Explicitely forbidden item
|
||||
const string IncorrectItemDialogueContentOptionName = "IncorrectItemDialogueContent";
|
||||
|
||||
const string ForbiddenItemLineTypeOptionName = "ForbiddenItemDialogueLineType";
|
||||
const string ForbiddenItemNoLinesOptionName = "ForbiddenItemNoLines";
|
||||
const string LoopThroughForbiddenItemLinesOptionName = "LoopThroughForbiddenItemLines";
|
||||
const string ForbiddenIteDialogueLineOptionName = "ForbiddenItemDialogueLine";
|
||||
const string ForbiddenItemDialogueContentOptionName = "ForbiddenItemDialogueContent";
|
||||
|
||||
protected override void OnDefineOptions(IOptionDefinitionContext context)
|
||||
{
|
||||
base.OnDefineOptions(context);
|
||||
|
||||
// Incorrect
|
||||
// Incorrect item options
|
||||
context.AddOption<DialogueType>(IncorrectItemLineTypeOptionName)
|
||||
.WithDisplayName("Incorrect Item Line Type")
|
||||
.WithDefaultValue(DialogueType.SayOneLine)
|
||||
.Delayed();
|
||||
|
||||
context.AddOption<int>(IncorrectItemNoLinesOptionName)
|
||||
.WithDisplayName("Number of Incorrect Item Lines")
|
||||
.WithDefaultValue(1)
|
||||
.Delayed();
|
||||
|
||||
// Forbidden
|
||||
|
||||
// Forbidden item options
|
||||
context.AddOption<DialogueType>(ForbiddenItemLineTypeOptionName)
|
||||
.WithDisplayName("Forbidden Item Line Type")
|
||||
.WithDefaultValue(DialogueType.SayOneLine)
|
||||
.Delayed();
|
||||
|
||||
context.AddOption<int>(ForbiddenItemNoLinesOptionName)
|
||||
.WithDisplayName("Forbidden of Incorrect Item Lines")
|
||||
.WithDisplayName("Number of Forbidden Item Lines")
|
||||
.WithDefaultValue(1)
|
||||
.Delayed();
|
||||
}
|
||||
@@ -152,45 +159,59 @@ namespace Editor.Dialogue
|
||||
|
||||
base.OnDefinePorts(context);
|
||||
|
||||
// Incorrect
|
||||
// Process Incorrect Item content
|
||||
var incorrectItemLineTypeOption = GetNodeOptionByName(IncorrectItemLineTypeOptionName);
|
||||
incorrectItemLineTypeOption.TryGetValue<DialogueType>(out var incorrectItemLineType);
|
||||
var incorrectItemLineCountOption = GetNodeOptionByName(IncorrectItemNoLinesOptionName);
|
||||
incorrectItemLineCountOption.TryGetValue<int>(out var incorrectItemLineCount);
|
||||
|
||||
// Add DialogueContent ports for incorrect item content
|
||||
if (incorrectItemLineType == DialogueType.SayMultipleLines)
|
||||
{
|
||||
for (var i = 0; i < incorrectItemLineCount; i++)
|
||||
{
|
||||
context.AddInputPort<string>($"{IncorrectIteDialogueLineOptionName}{i + 1}").WithDisplayName($"Incorrect Item Dialogue Line {i + 1}").Build();
|
||||
context.AddInputPort<DialogueContent>($"{IncorrectItemDialogueContentOptionName}{i + 1}")
|
||||
.WithDisplayName($"Incorrect Item Content {i + 1}")
|
||||
.Build();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
context.AddInputPort<string>($"{IncorrectIteDialogueLineOptionName}").WithDisplayName("Incorrect Item Dialogue Line").Build();
|
||||
context.AddInputPort<DialogueContent>($"{IncorrectItemDialogueContentOptionName}")
|
||||
.WithDisplayName("Incorrect Item Content")
|
||||
.Build();
|
||||
}
|
||||
|
||||
context.AddInputPort<bool>($"{LoopThroughIncorrectItemLinesOptionName}").WithDisplayName("Loop Through Incorrect Item Lines?").Build();
|
||||
context.AddInputPort<bool>($"{LoopThroughIncorrectItemLinesOptionName}")
|
||||
.WithDisplayName("Loop Through Incorrect Content?")
|
||||
.Build();
|
||||
|
||||
// Forbidden
|
||||
// Process Forbidden Item content
|
||||
var forbiddenItemLineTypeOption = GetNodeOptionByName(ForbiddenItemLineTypeOptionName);
|
||||
forbiddenItemLineTypeOption.TryGetValue<DialogueType>(out var forbiddenItemLineType);
|
||||
var forbiddenItemLineCountOption = GetNodeOptionByName(ForbiddenItemNoLinesOptionName);
|
||||
forbiddenItemLineCountOption.TryGetValue<int>(out var forbiddenItemLineCount);
|
||||
|
||||
// Add DialogueContent ports for forbidden item content
|
||||
if (forbiddenItemLineType == DialogueType.SayMultipleLines)
|
||||
{
|
||||
for (var i = 0; i < forbiddenItemLineCount; i++)
|
||||
{
|
||||
context.AddInputPort<string>($"{ForbiddenIteDialogueLineOptionName}{i + 1}").WithDisplayName($"Forbidden Item Dialogue Line {i + 1}").Build();
|
||||
context.AddInputPort<DialogueContent>($"{ForbiddenItemDialogueContentOptionName}{i + 1}")
|
||||
.WithDisplayName($"Forbidden Item Content {i + 1}")
|
||||
.Build();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
context.AddInputPort<string>($"{ForbiddenIteDialogueLineOptionName}").WithDisplayName("Forbidden Item Dialogue Line").Build();
|
||||
context.AddInputPort<DialogueContent>($"{ForbiddenItemDialogueContentOptionName}")
|
||||
.WithDisplayName("Forbidden Item Content")
|
||||
.Build();
|
||||
}
|
||||
|
||||
context.AddInputPort<bool>($"{LoopThroughForbiddenItemLinesOptionName}").WithDisplayName("Loop Through Forbidden Item Lines?").Build();
|
||||
context.AddInputPort<bool>($"{LoopThroughForbiddenItemLinesOptionName}")
|
||||
.WithDisplayName("Loop Through Forbidden Content?")
|
||||
.Build();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
127
Assets/Editor/InteractableEditor.cs
Normal file
@@ -0,0 +1,127 @@
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
|
||||
namespace Interactions
|
||||
{
|
||||
[CustomEditor(typeof(Interactable))]
|
||||
public class InteractableEditor : UnityEditor.Editor
|
||||
{
|
||||
SerializedProperty isOneTimeProp;
|
||||
SerializedProperty cooldownProp;
|
||||
SerializedProperty characterToInteractProp;
|
||||
SerializedProperty interactionStartedProp;
|
||||
SerializedProperty interactionInterruptedProp;
|
||||
SerializedProperty characterArrivedProp;
|
||||
SerializedProperty interactionCompleteProp;
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
isOneTimeProp = serializedObject.FindProperty("isOneTime");
|
||||
cooldownProp = serializedObject.FindProperty("cooldown");
|
||||
characterToInteractProp = serializedObject.FindProperty("characterToInteract");
|
||||
interactionStartedProp = serializedObject.FindProperty("interactionStarted");
|
||||
interactionInterruptedProp = serializedObject.FindProperty("interactionInterrupted");
|
||||
characterArrivedProp = serializedObject.FindProperty("characterArrived");
|
||||
interactionCompleteProp = serializedObject.FindProperty("interactionComplete");
|
||||
}
|
||||
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
serializedObject.Update();
|
||||
|
||||
EditorGUILayout.LabelField("Interaction Settings", EditorStyles.boldLabel);
|
||||
EditorGUILayout.PropertyField(isOneTimeProp);
|
||||
EditorGUILayout.PropertyField(cooldownProp);
|
||||
EditorGUILayout.PropertyField(characterToInteractProp);
|
||||
|
||||
// Add the buttons for creating move targets
|
||||
EditorGUILayout.Space(10);
|
||||
EditorGUILayout.LabelField("Character Move Targets", EditorStyles.boldLabel);
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
if (GUILayout.Button("Add Trafalgar Target"))
|
||||
{
|
||||
CreateMoveTarget(CharacterToInteract.Trafalgar);
|
||||
}
|
||||
if (GUILayout.Button("Add Pulver Target"))
|
||||
{
|
||||
CreateMoveTarget(CharacterToInteract.Pulver);
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
// Add a button for creating a "Both" target
|
||||
if (GUILayout.Button("Add Both Characters Target"))
|
||||
{
|
||||
CreateMoveTarget(CharacterToInteract.Both);
|
||||
}
|
||||
|
||||
// Display character target counts
|
||||
Interactable interactable = (Interactable)target;
|
||||
CharacterMoveToTarget[] moveTargets = interactable.GetComponentsInChildren<CharacterMoveToTarget>();
|
||||
int trafalgarTargets = 0;
|
||||
int pulverTargets = 0;
|
||||
int bothTargets = 0;
|
||||
|
||||
foreach (var target in moveTargets)
|
||||
{
|
||||
if (target.characterType == CharacterToInteract.Trafalgar)
|
||||
trafalgarTargets++;
|
||||
else if (target.characterType == CharacterToInteract.Pulver)
|
||||
pulverTargets++;
|
||||
else if (target.characterType == CharacterToInteract.Both)
|
||||
bothTargets++;
|
||||
}
|
||||
|
||||
EditorGUILayout.LabelField($"Trafalgar Targets: {trafalgarTargets}, Pulver Targets: {pulverTargets}, Both Targets: {bothTargets}");
|
||||
|
||||
if (trafalgarTargets > 1 || pulverTargets > 1 || bothTargets > 1 ||
|
||||
(bothTargets > 0 && (trafalgarTargets > 0 || pulverTargets > 0)))
|
||||
{
|
||||
EditorGUILayout.HelpBox("Warning: Multiple move targets found that may conflict. Priority order: Both > Character-specific targets.", MessageType.Warning);
|
||||
}
|
||||
|
||||
EditorGUILayout.Space(10);
|
||||
EditorGUILayout.LabelField("Interaction Events", EditorStyles.boldLabel);
|
||||
EditorGUILayout.PropertyField(interactionStartedProp);
|
||||
EditorGUILayout.PropertyField(interactionInterruptedProp);
|
||||
EditorGUILayout.PropertyField(characterArrivedProp);
|
||||
EditorGUILayout.PropertyField(interactionCompleteProp);
|
||||
|
||||
serializedObject.ApplyModifiedProperties();
|
||||
}
|
||||
|
||||
private void CreateMoveTarget(CharacterToInteract characterType)
|
||||
{
|
||||
Interactable interactable = (Interactable)target;
|
||||
|
||||
// Create a new GameObject
|
||||
GameObject targetObj = new GameObject($"{characterType}MoveTarget");
|
||||
|
||||
// Set parent
|
||||
targetObj.transform.SetParent(interactable.transform);
|
||||
targetObj.transform.localPosition = Vector3.zero; // Start at the same position as the interactable
|
||||
|
||||
// Add CharacterMoveToTarget component
|
||||
CharacterMoveToTarget moveTarget = targetObj.AddComponent<CharacterMoveToTarget>();
|
||||
moveTarget.characterType = characterType;
|
||||
|
||||
// Position it based on character type (offset for better visibility)
|
||||
switch (characterType)
|
||||
{
|
||||
case CharacterToInteract.Trafalgar:
|
||||
moveTarget.positionOffset = new Vector3(1.0f, 0, 0);
|
||||
break;
|
||||
case CharacterToInteract.Pulver:
|
||||
moveTarget.positionOffset = new Vector3(0, 0, 1.0f);
|
||||
break;
|
||||
case CharacterToInteract.Both:
|
||||
moveTarget.positionOffset = new Vector3(0.7f, 0, 0.7f);
|
||||
break;
|
||||
}
|
||||
|
||||
// Select the newly created object
|
||||
Selection.activeGameObject = targetObj;
|
||||
Undo.RegisterCreatedObjectUndo(targetObj, $"Create {characterType} Move Target");
|
||||
}
|
||||
}
|
||||
}
|
||||
3
Assets/Editor/InteractableEditor.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e2011e96b1b84886825d0509dd0a5cee
|
||||
timeCreated: 1759744192
|
||||
184
Assets/Editor/InteractionTimelineActionEditor.cs
Normal file
@@ -0,0 +1,184 @@
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using UnityEditor.Playables;
|
||||
using UnityEngine.Playables;
|
||||
|
||||
namespace Interactions
|
||||
{
|
||||
[CustomEditor(typeof(InteractionTimelineAction))]
|
||||
public class InteractionTimelineActionEditor : UnityEditor.Editor
|
||||
{
|
||||
private SerializedProperty respondToEventsProp;
|
||||
private SerializedProperty pauseInteractionFlowProp;
|
||||
private SerializedProperty playableDirectorProp;
|
||||
private SerializedProperty timelineMappingsProp;
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
respondToEventsProp = serializedObject.FindProperty("respondToEvents");
|
||||
pauseInteractionFlowProp = serializedObject.FindProperty("pauseInteractionFlow");
|
||||
playableDirectorProp = serializedObject.FindProperty("playableDirector");
|
||||
timelineMappingsProp = serializedObject.FindProperty("timelineMappings");
|
||||
}
|
||||
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
serializedObject.Update();
|
||||
|
||||
// Basic properties from the base class
|
||||
EditorGUILayout.LabelField("Basic Settings", EditorStyles.boldLabel);
|
||||
|
||||
// Show the pause interaction flow property
|
||||
EditorGUILayout.PropertyField(pauseInteractionFlowProp, new GUIContent("Pause Interaction Flow",
|
||||
"If true, the interaction will wait for the timeline to complete before proceeding"));
|
||||
|
||||
// Show the respondToEvents list
|
||||
EditorGUILayout.PropertyField(respondToEventsProp, new GUIContent("Respond To Events",
|
||||
"Select which interaction events this timeline action should respond to"), true);
|
||||
|
||||
// Show the playable director reference
|
||||
EditorGUILayout.PropertyField(playableDirectorProp, new GUIContent("Playable Director",
|
||||
"The director component that will play the timeline. Auto-assigned if not specified."));
|
||||
|
||||
// Show the timeline mappings
|
||||
EditorGUILayout.Space(10);
|
||||
EditorGUILayout.LabelField("Timeline Mappings", EditorStyles.boldLabel);
|
||||
|
||||
if (timelineMappingsProp.arraySize == 0)
|
||||
{
|
||||
EditorGUILayout.HelpBox("No timeline mappings added yet. Add one to assign timeline assets to specific interaction events.", MessageType.Info);
|
||||
}
|
||||
|
||||
EditorGUILayout.PropertyField(timelineMappingsProp, new GUIContent("Timeline Mappings"), true);
|
||||
|
||||
// Add buttons for quickly adding timeline mappings for common events
|
||||
EditorGUILayout.Space(10);
|
||||
EditorGUILayout.LabelField("Quick Add Mappings", EditorStyles.boldLabel);
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
if (GUILayout.Button("Add Player Arrival"))
|
||||
{
|
||||
AddTimelineMapping(InteractionEventType.PlayerArrived);
|
||||
}
|
||||
if (GUILayout.Button("Add Interacting Character"))
|
||||
{
|
||||
AddTimelineMapping(InteractionEventType.InteractingCharacterArrived);
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
if (GUILayout.Button("Add Interaction Started"))
|
||||
{
|
||||
AddTimelineMapping(InteractionEventType.InteractionStarted);
|
||||
}
|
||||
if (GUILayout.Button("Add Interaction Complete"))
|
||||
{
|
||||
AddTimelineMapping(InteractionEventType.InteractionComplete);
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
// Check for configuration issues
|
||||
InteractionTimelineAction timelineAction = (InteractionTimelineAction)target;
|
||||
ValidateConfiguration(timelineAction);
|
||||
|
||||
serializedObject.ApplyModifiedProperties();
|
||||
}
|
||||
|
||||
private void AddTimelineMapping(InteractionEventType eventType)
|
||||
{
|
||||
int index = timelineMappingsProp.arraySize;
|
||||
timelineMappingsProp.InsertArrayElementAtIndex(index);
|
||||
SerializedProperty newElement = timelineMappingsProp.GetArrayElementAtIndex(index);
|
||||
|
||||
// Set default values
|
||||
newElement.FindPropertyRelative("eventType").enumValueIndex = (int)eventType;
|
||||
|
||||
// Create a default array with one empty slot for the timeline
|
||||
SerializedProperty timelinesArray = newElement.FindPropertyRelative("timelines");
|
||||
timelinesArray.ClearArray();
|
||||
timelinesArray.InsertArrayElementAtIndex(0);
|
||||
timelinesArray.GetArrayElementAtIndex(0).objectReferenceValue = null;
|
||||
|
||||
// Set default binding values
|
||||
newElement.FindPropertyRelative("bindPlayerCharacter").boolValue = false;
|
||||
newElement.FindPropertyRelative("bindPulverCharacter").boolValue = false;
|
||||
newElement.FindPropertyRelative("playerTrackName").stringValue = "Player";
|
||||
newElement.FindPropertyRelative("pulverTrackName").stringValue = "Pulver";
|
||||
newElement.FindPropertyRelative("timeoutSeconds").floatValue = 30f;
|
||||
newElement.FindPropertyRelative("loopLast").boolValue = false;
|
||||
newElement.FindPropertyRelative("loopAll").boolValue = false;
|
||||
|
||||
// Also add the event to the respondToEvents list if it's not already there
|
||||
bool found = false;
|
||||
for (int i = 0; i < respondToEventsProp.arraySize; i++)
|
||||
{
|
||||
if (respondToEventsProp.GetArrayElementAtIndex(i).enumValueIndex == (int)eventType)
|
||||
{
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!found)
|
||||
{
|
||||
int responseIndex = respondToEventsProp.arraySize;
|
||||
respondToEventsProp.InsertArrayElementAtIndex(responseIndex);
|
||||
respondToEventsProp.GetArrayElementAtIndex(responseIndex).enumValueIndex = (int)eventType;
|
||||
}
|
||||
}
|
||||
|
||||
private void ValidateConfiguration(InteractionTimelineAction timelineAction)
|
||||
{
|
||||
// Check if we have a PlayableDirector component
|
||||
PlayableDirector director = timelineAction.GetComponent<PlayableDirector>();
|
||||
if (director == null)
|
||||
{
|
||||
EditorGUILayout.HelpBox("This GameObject is missing a PlayableDirector component, which is required for timeline playback.", MessageType.Error);
|
||||
}
|
||||
|
||||
// Check if we have mappings but no events to respond to
|
||||
if (timelineMappingsProp.arraySize > 0 && respondToEventsProp.arraySize == 0)
|
||||
{
|
||||
EditorGUILayout.HelpBox("You have timeline mappings but no events to respond to. Add events to the 'Respond To Events' list.", MessageType.Warning);
|
||||
}
|
||||
|
||||
// Check if we have events to respond to but no mappings for them
|
||||
bool hasUnmappedEvents = false;
|
||||
for (int i = 0; i < respondToEventsProp.arraySize; i++)
|
||||
{
|
||||
InteractionEventType eventType = (InteractionEventType)respondToEventsProp.GetArrayElementAtIndex(i).enumValueIndex;
|
||||
bool found = false;
|
||||
|
||||
for (int j = 0; j < timelineMappingsProp.arraySize; j++)
|
||||
{
|
||||
SerializedProperty mappingProp = timelineMappingsProp.GetArrayElementAtIndex(j);
|
||||
InteractionEventType mappingEventType = (InteractionEventType)mappingProp.FindPropertyRelative("eventType").enumValueIndex;
|
||||
|
||||
if (mappingEventType == eventType)
|
||||
{
|
||||
found = true;
|
||||
|
||||
// Check if the mapping has timelines assigned
|
||||
SerializedProperty timelinesArray = mappingProp.FindPropertyRelative("timelines");
|
||||
if (timelinesArray.arraySize == 0 || timelinesArray.GetArrayElementAtIndex(0).objectReferenceValue == null)
|
||||
{
|
||||
EditorGUILayout.HelpBox($"The mapping for {eventType} has no timeline assets assigned.", MessageType.Warning);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!found)
|
||||
{
|
||||
hasUnmappedEvents = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (hasUnmappedEvents)
|
||||
{
|
||||
EditorGUILayout.HelpBox("Some events in 'Respond To Events' have no timeline mapping.", MessageType.Warning);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
3
Assets/Editor/InteractionTimelineActionEditor.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6ab56ee48f1445529a62d30c1985f059
|
||||
timeCreated: 1759746824
|
||||
48
Assets/Editor/TimelineEventMappingDrawer.cs
Normal file
@@ -0,0 +1,48 @@
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using Interactions;
|
||||
using System;
|
||||
|
||||
[CustomPropertyDrawer(typeof(InteractionTimelineAction.TimelineEventMapping))]
|
||||
public class TimelineEventMappingDrawer : PropertyDrawer
|
||||
{
|
||||
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
|
||||
{
|
||||
// Use default property drawer, but initialize values if needed
|
||||
InitializeDefaultValues(property);
|
||||
EditorGUI.PropertyField(position, property, label, true);
|
||||
}
|
||||
|
||||
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
|
||||
{
|
||||
return EditorGUI.GetPropertyHeight(property, label, true);
|
||||
}
|
||||
|
||||
// Called when property is created to initialize default values
|
||||
private void InitializeDefaultValues(SerializedProperty property)
|
||||
{
|
||||
// Check if this is a new/empty property that needs initialization
|
||||
SerializedProperty timelinesArray = property.FindPropertyRelative("timelines");
|
||||
if (timelinesArray != null && timelinesArray.arraySize == 0)
|
||||
{
|
||||
// This appears to be a new property, so initialize default values
|
||||
|
||||
// Initialize timelines array with one empty element
|
||||
timelinesArray.ClearArray();
|
||||
timelinesArray.InsertArrayElementAtIndex(0);
|
||||
timelinesArray.GetArrayElementAtIndex(0).objectReferenceValue = null;
|
||||
|
||||
// Set default binding values
|
||||
property.FindPropertyRelative("bindPlayerCharacter").boolValue = true;
|
||||
property.FindPropertyRelative("bindPulverCharacter").boolValue = true;
|
||||
property.FindPropertyRelative("playerTrackName").stringValue = "Player";
|
||||
property.FindPropertyRelative("pulverTrackName").stringValue = "Pulver";
|
||||
property.FindPropertyRelative("timeoutSeconds").floatValue = 30f;
|
||||
property.FindPropertyRelative("loopLast").boolValue = false;
|
||||
property.FindPropertyRelative("loopAll").boolValue = false;
|
||||
|
||||
// Make sure to apply modifications
|
||||
property.serializedObject.ApplyModifiedProperties();
|
||||
}
|
||||
}
|
||||
}
|
||||
3
Assets/Editor/TimelineEventMappingDrawer.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c5a227e33ab14a0f86bf391016c57b00
|
||||
timeCreated: 1759756346
|
||||
394
Assets/Playables/PulverCucumberSmack1.playable
Normal file
@@ -0,0 +1,394 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &-7584736085941489071
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 1
|
||||
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: d21dcc2386d650c4597f3633c75a1f98, type: 3}
|
||||
m_Name: Animation Track
|
||||
m_EditorClassIdentifier: Unity.Timeline::UnityEngine.Timeline.AnimationTrack
|
||||
m_Version: 3
|
||||
m_AnimClip: {fileID: 0}
|
||||
m_Locked: 0
|
||||
m_Muted: 0
|
||||
m_CustomPlayableFullTypename:
|
||||
m_Curves: {fileID: 0}
|
||||
m_Parent: {fileID: 11400000}
|
||||
m_Children: []
|
||||
m_Clips:
|
||||
- m_Version: 1
|
||||
m_Start: 0.06666666666666667
|
||||
m_ClipIn: 0
|
||||
m_Asset: {fileID: -2070454477998879764}
|
||||
m_Duration: 1.0333333333333334
|
||||
m_TimeScale: 1
|
||||
m_ParentTrack: {fileID: -7584736085941489071}
|
||||
m_EaseInDuration: 0
|
||||
m_EaseOutDuration: 0
|
||||
m_BlendInDuration: -1
|
||||
m_BlendOutDuration: -1
|
||||
m_MixInCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 0
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
- serializedVersion: 3
|
||||
time: 1
|
||||
value: 1
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
m_MixOutCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 1
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
- serializedVersion: 3
|
||||
time: 1
|
||||
value: 0
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
m_BlendInCurveMode: 0
|
||||
m_BlendOutCurveMode: 0
|
||||
m_ExposedParameterNames: []
|
||||
m_AnimationCurves: {fileID: 0}
|
||||
m_Recordable: 0
|
||||
m_PostExtrapolationMode: 1
|
||||
m_PreExtrapolationMode: 1
|
||||
m_PostExtrapolationTime: Infinity
|
||||
m_PreExtrapolationTime: 0.06666666666666667
|
||||
m_DisplayName: BalltreeHit
|
||||
m_Markers:
|
||||
m_Objects: []
|
||||
m_InfiniteClipPreExtrapolation: 0
|
||||
m_InfiniteClipPostExtrapolation: 0
|
||||
m_InfiniteClipOffsetPosition: {x: 0, y: 0, z: 0}
|
||||
m_InfiniteClipOffsetEulerAngles: {x: 0, y: 0, z: 0}
|
||||
m_InfiniteClipTimeOffset: 0
|
||||
m_InfiniteClipRemoveOffset: 0
|
||||
m_InfiniteClipApplyFootIK: 1
|
||||
mInfiniteClipLoop: 0
|
||||
m_MatchTargetFields: 63
|
||||
m_Position: {x: 0, y: 0, z: 0}
|
||||
m_EulerAngles: {x: 0, y: 0, z: 0}
|
||||
m_AvatarMask: {fileID: 0}
|
||||
m_ApplyAvatarMask: 1
|
||||
m_TrackOffset: 0
|
||||
m_InfiniteClip: {fileID: 0}
|
||||
m_OpenClipOffsetRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_Rotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_ApplyOffsets: 0
|
||||
--- !u!114 &-4664548104421960294
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 1
|
||||
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: fde0d25a170598d46a0b9dc16b4527a5, type: 3}
|
||||
m_Name: ActivationPlayableAsset
|
||||
m_EditorClassIdentifier: Unity.Timeline::UnityEngine.Timeline.ActivationPlayableAsset
|
||||
--- !u!114 &-2395336864975438248
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 1
|
||||
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: d21dcc2386d650c4597f3633c75a1f98, type: 3}
|
||||
m_Name: Animation Track (1)
|
||||
m_EditorClassIdentifier: Unity.Timeline::UnityEngine.Timeline.AnimationTrack
|
||||
m_Version: 3
|
||||
m_AnimClip: {fileID: 0}
|
||||
m_Locked: 0
|
||||
m_Muted: 0
|
||||
m_CustomPlayableFullTypename:
|
||||
m_Curves: {fileID: 0}
|
||||
m_Parent: {fileID: 11400000}
|
||||
m_Children: []
|
||||
m_Clips:
|
||||
- m_Version: 1
|
||||
m_Start: 0
|
||||
m_ClipIn: 0
|
||||
m_Asset: {fileID: 3115908604919352715}
|
||||
m_Duration: 0.8333333333333334
|
||||
m_TimeScale: 1
|
||||
m_ParentTrack: {fileID: -2395336864975438248}
|
||||
m_EaseInDuration: 0
|
||||
m_EaseOutDuration: 0
|
||||
m_BlendInDuration: -1
|
||||
m_BlendOutDuration: -1
|
||||
m_MixInCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 0
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
- serializedVersion: 3
|
||||
time: 1
|
||||
value: 1
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
m_MixOutCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 1
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
- serializedVersion: 3
|
||||
time: 1
|
||||
value: 0
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
m_BlendInCurveMode: 0
|
||||
m_BlendOutCurveMode: 0
|
||||
m_ExposedParameterNames: []
|
||||
m_AnimationCurves: {fileID: 0}
|
||||
m_Recordable: 0
|
||||
m_PostExtrapolationMode: 1
|
||||
m_PreExtrapolationMode: 1
|
||||
m_PostExtrapolationTime: Infinity
|
||||
m_PreExtrapolationTime: 0
|
||||
m_DisplayName: Pulver_Cucumbatacc
|
||||
m_Markers:
|
||||
m_Objects: []
|
||||
m_InfiniteClipPreExtrapolation: 0
|
||||
m_InfiniteClipPostExtrapolation: 0
|
||||
m_InfiniteClipOffsetPosition: {x: 0, y: 0, z: 0}
|
||||
m_InfiniteClipOffsetEulerAngles: {x: 0, y: 0, z: 0}
|
||||
m_InfiniteClipTimeOffset: 0
|
||||
m_InfiniteClipRemoveOffset: 0
|
||||
m_InfiniteClipApplyFootIK: 1
|
||||
mInfiniteClipLoop: 0
|
||||
m_MatchTargetFields: 63
|
||||
m_Position: {x: 0, y: 0, z: 0}
|
||||
m_EulerAngles: {x: 0, y: 0, z: 0}
|
||||
m_AvatarMask: {fileID: 0}
|
||||
m_ApplyAvatarMask: 1
|
||||
m_TrackOffset: 0
|
||||
m_InfiniteClip: {fileID: 0}
|
||||
m_OpenClipOffsetRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_Rotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_ApplyOffsets: 0
|
||||
--- !u!114 &-2070454477998879764
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 1
|
||||
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: 030f85c3f73729f4f976f66ffb23b875, type: 3}
|
||||
m_Name: AnimationPlayableAsset
|
||||
m_EditorClassIdentifier: Unity.Timeline::UnityEngine.Timeline.AnimationPlayableAsset
|
||||
m_Clip: {fileID: 7400000, guid: c77ba8b4bbb8013478339a542995d25b, type: 2}
|
||||
m_Position: {x: 0, y: 0, z: 0}
|
||||
m_EulerAngles: {x: 0, y: 0, z: 0}
|
||||
m_UseTrackMatchFields: 1
|
||||
m_MatchTargetFields: 63
|
||||
m_RemoveStartOffset: 1
|
||||
m_ApplyFootIK: 1
|
||||
m_Loop: 0
|
||||
m_Version: 1
|
||||
m_Rotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
--- !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: bfda56da833e2384a9677cd3c976a436, type: 3}
|
||||
m_Name: PulverCucumberSmack1
|
||||
m_EditorClassIdentifier: Unity.Timeline::UnityEngine.Timeline.TimelineAsset
|
||||
m_Version: 0
|
||||
m_Tracks:
|
||||
- {fileID: -7584736085941489071}
|
||||
- {fileID: -2395336864975438248}
|
||||
- {fileID: 3942302933360259000}
|
||||
m_FixedDuration: 0
|
||||
m_EditorSettings:
|
||||
m_Framerate: 60
|
||||
m_ScenePreview: 1
|
||||
m_DurationMode: 0
|
||||
m_MarkerTrack: {fileID: 0}
|
||||
--- !u!114 &3115908604919352715
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 1
|
||||
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: 030f85c3f73729f4f976f66ffb23b875, type: 3}
|
||||
m_Name: AnimationPlayableAsset
|
||||
m_EditorClassIdentifier: Unity.Timeline::UnityEngine.Timeline.AnimationPlayableAsset
|
||||
m_Clip: {fileID: 7400000, guid: 09d7dd4e84cbed54bb4ca4e63ad0c6fa, type: 2}
|
||||
m_Position: {x: 0, y: 0, z: 0}
|
||||
m_EulerAngles: {x: 0, y: 0, z: 0}
|
||||
m_UseTrackMatchFields: 1
|
||||
m_MatchTargetFields: 63
|
||||
m_RemoveStartOffset: 1
|
||||
m_ApplyFootIK: 1
|
||||
m_Loop: 0
|
||||
m_Version: 1
|
||||
m_Rotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
--- !u!114 &3942302933360259000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 1
|
||||
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: 21bf7f712d84d26478ebe6a299f21738, type: 3}
|
||||
m_Name: Activation Track
|
||||
m_EditorClassIdentifier: Unity.Timeline::UnityEngine.Timeline.ActivationTrack
|
||||
m_Version: 3
|
||||
m_AnimClip: {fileID: 0}
|
||||
m_Locked: 0
|
||||
m_Muted: 0
|
||||
m_CustomPlayableFullTypename:
|
||||
m_Curves: {fileID: 0}
|
||||
m_Parent: {fileID: 11400000}
|
||||
m_Children: []
|
||||
m_Clips:
|
||||
- m_Version: 1
|
||||
m_Start: 1.0166666666666666
|
||||
m_ClipIn: 0
|
||||
m_Asset: {fileID: -4664548104421960294}
|
||||
m_Duration: 0.8999999999999999
|
||||
m_TimeScale: 1
|
||||
m_ParentTrack: {fileID: 3942302933360259000}
|
||||
m_EaseInDuration: 0
|
||||
m_EaseOutDuration: 0
|
||||
m_BlendInDuration: 0
|
||||
m_BlendOutDuration: 0
|
||||
m_MixInCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 0
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
- serializedVersion: 3
|
||||
time: 1
|
||||
value: 1
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
m_MixOutCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 1
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
- serializedVersion: 3
|
||||
time: 1
|
||||
value: 0
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
m_BlendInCurveMode: 0
|
||||
m_BlendOutCurveMode: 0
|
||||
m_ExposedParameterNames: []
|
||||
m_AnimationCurves: {fileID: 0}
|
||||
m_Recordable: 0
|
||||
m_PostExtrapolationMode: 0
|
||||
m_PreExtrapolationMode: 0
|
||||
m_PostExtrapolationTime: 0
|
||||
m_PreExtrapolationTime: 0
|
||||
m_DisplayName: Active
|
||||
m_Markers:
|
||||
m_Objects: []
|
||||
m_PostPlaybackState: 3
|
||||
8
Assets/Playables/PulverCucumberSmack1.playable.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1791fd5a24a3142418ed441a2a25b374
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
197
Assets/Playables/PulverCucumberSmack_empty.playable
Normal file
@@ -0,0 +1,197 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &-7584736085941489071
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 1
|
||||
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: d21dcc2386d650c4597f3633c75a1f98, type: 3}
|
||||
m_Name: Animation Track
|
||||
m_EditorClassIdentifier: Unity.Timeline::UnityEngine.Timeline.AnimationTrack
|
||||
m_Version: 3
|
||||
m_AnimClip: {fileID: 0}
|
||||
m_Locked: 0
|
||||
m_Muted: 0
|
||||
m_CustomPlayableFullTypename:
|
||||
m_Curves: {fileID: 0}
|
||||
m_Parent: {fileID: 11400000}
|
||||
m_Children: []
|
||||
m_Clips: []
|
||||
m_Markers:
|
||||
m_Objects: []
|
||||
m_InfiniteClipPreExtrapolation: 0
|
||||
m_InfiniteClipPostExtrapolation: 0
|
||||
m_InfiniteClipOffsetPosition: {x: 0, y: 0, z: 0}
|
||||
m_InfiniteClipOffsetEulerAngles: {x: 0, y: 0, z: 0}
|
||||
m_InfiniteClipTimeOffset: 0
|
||||
m_InfiniteClipRemoveOffset: 0
|
||||
m_InfiniteClipApplyFootIK: 1
|
||||
mInfiniteClipLoop: 0
|
||||
m_MatchTargetFields: 63
|
||||
m_Position: {x: 0, y: 0, z: 0}
|
||||
m_EulerAngles: {x: 0, y: 0, z: 0}
|
||||
m_AvatarMask: {fileID: 0}
|
||||
m_ApplyAvatarMask: 1
|
||||
m_TrackOffset: 0
|
||||
m_InfiniteClip: {fileID: 0}
|
||||
m_OpenClipOffsetRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_Rotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_ApplyOffsets: 0
|
||||
--- !u!114 &-2395336864975438248
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 1
|
||||
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: d21dcc2386d650c4597f3633c75a1f98, type: 3}
|
||||
m_Name: Animation Track (1)
|
||||
m_EditorClassIdentifier: Unity.Timeline::UnityEngine.Timeline.AnimationTrack
|
||||
m_Version: 3
|
||||
m_AnimClip: {fileID: 0}
|
||||
m_Locked: 0
|
||||
m_Muted: 0
|
||||
m_CustomPlayableFullTypename:
|
||||
m_Curves: {fileID: 0}
|
||||
m_Parent: {fileID: 11400000}
|
||||
m_Children: []
|
||||
m_Clips:
|
||||
- m_Version: 1
|
||||
m_Start: 0
|
||||
m_ClipIn: 0
|
||||
m_Asset: {fileID: 3115908604919352715}
|
||||
m_Duration: 0.8333333333333334
|
||||
m_TimeScale: 1
|
||||
m_ParentTrack: {fileID: -2395336864975438248}
|
||||
m_EaseInDuration: 0
|
||||
m_EaseOutDuration: 0
|
||||
m_BlendInDuration: -1
|
||||
m_BlendOutDuration: -1
|
||||
m_MixInCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 0
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
- serializedVersion: 3
|
||||
time: 1
|
||||
value: 1
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
m_MixOutCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 1
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
- serializedVersion: 3
|
||||
time: 1
|
||||
value: 0
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0
|
||||
outWeight: 0
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
m_BlendInCurveMode: 0
|
||||
m_BlendOutCurveMode: 0
|
||||
m_ExposedParameterNames: []
|
||||
m_AnimationCurves: {fileID: 0}
|
||||
m_Recordable: 0
|
||||
m_PostExtrapolationMode: 1
|
||||
m_PreExtrapolationMode: 1
|
||||
m_PostExtrapolationTime: Infinity
|
||||
m_PreExtrapolationTime: 0
|
||||
m_DisplayName: Pulver_Cucumbatacc
|
||||
m_Markers:
|
||||
m_Objects: []
|
||||
m_InfiniteClipPreExtrapolation: 0
|
||||
m_InfiniteClipPostExtrapolation: 0
|
||||
m_InfiniteClipOffsetPosition: {x: 0, y: 0, z: 0}
|
||||
m_InfiniteClipOffsetEulerAngles: {x: 0, y: 0, z: 0}
|
||||
m_InfiniteClipTimeOffset: 0
|
||||
m_InfiniteClipRemoveOffset: 0
|
||||
m_InfiniteClipApplyFootIK: 1
|
||||
mInfiniteClipLoop: 0
|
||||
m_MatchTargetFields: 63
|
||||
m_Position: {x: 0, y: 0, z: 0}
|
||||
m_EulerAngles: {x: 0, y: 0, z: 0}
|
||||
m_AvatarMask: {fileID: 0}
|
||||
m_ApplyAvatarMask: 1
|
||||
m_TrackOffset: 0
|
||||
m_InfiniteClip: {fileID: 0}
|
||||
m_OpenClipOffsetRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_Rotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_ApplyOffsets: 0
|
||||
--- !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: bfda56da833e2384a9677cd3c976a436, type: 3}
|
||||
m_Name: PulverCucumberSmack_empty
|
||||
m_EditorClassIdentifier: Unity.Timeline::UnityEngine.Timeline.TimelineAsset
|
||||
m_Version: 0
|
||||
m_Tracks:
|
||||
- {fileID: -7584736085941489071}
|
||||
- {fileID: -2395336864975438248}
|
||||
m_FixedDuration: 0
|
||||
m_EditorSettings:
|
||||
m_Framerate: 60
|
||||
m_ScenePreview: 1
|
||||
m_DurationMode: 0
|
||||
m_MarkerTrack: {fileID: 0}
|
||||
--- !u!114 &3115908604919352715
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 1
|
||||
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: 030f85c3f73729f4f976f66ffb23b875, type: 3}
|
||||
m_Name: AnimationPlayableAsset
|
||||
m_EditorClassIdentifier: Unity.Timeline::UnityEngine.Timeline.AnimationPlayableAsset
|
||||
m_Clip: {fileID: 7400000, guid: 09d7dd4e84cbed54bb4ca4e63ad0c6fa, type: 2}
|
||||
m_Position: {x: 0, y: 0, z: 0}
|
||||
m_EulerAngles: {x: 0, y: 0, z: 0}
|
||||
m_UseTrackMatchFields: 1
|
||||
m_MatchTargetFields: 63
|
||||
m_RemoveStartOffset: 1
|
||||
m_ApplyFootIK: 1
|
||||
m_Loop: 0
|
||||
m_Version: 1
|
||||
m_Rotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
8
Assets/Playables/PulverCucumberSmack_empty.playable.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ee609df51f47bd541a23d5425e289e30
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -313,6 +313,14 @@ PrefabInstance:
|
||||
propertyPath: m_Layer
|
||||
value: 7
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6109476811019011833, guid: 361ccc9ef82acef4784b24b72013d971, type: 3}
|
||||
propertyPath: m_Size.x
|
||||
value: 3.8700001
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6109476811019011833, guid: 361ccc9ef82acef4784b24b72013d971, type: 3}
|
||||
propertyPath: m_Size.y
|
||||
value: 7.55122
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6109476811019011833, guid: 361ccc9ef82acef4784b24b72013d971, type: 3}
|
||||
propertyPath: m_SortingOrder
|
||||
value: 1
|
||||
|
||||
@@ -136,7 +136,7 @@ MonoBehaviour:
|
||||
radius: 2
|
||||
height: 2
|
||||
canMove: 1
|
||||
maxSpeed: 15
|
||||
maxSpeed: 30
|
||||
gravity: {x: 0, y: 0, z: 0}
|
||||
groundMask:
|
||||
serializedVersion: 2
|
||||
@@ -236,6 +236,8 @@ SpriteRenderer:
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
@@ -257,6 +259,7 @@ SpriteRenderer:
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 2
|
||||
|
||||
@@ -1,5 +1,51 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &1646387898454772943
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 7371967679236352629}
|
||||
- component: {fileID: 2280359367130513804}
|
||||
m_Layer: 0
|
||||
m_Name: PulverMoveTarget
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &7371967679236352629
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1646387898454772943}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: -4.4615383, y: 0.61538696, z: 0}
|
||||
m_LocalScale: {x: 0.7692308, y: 0.7692308, z: 0.7692308}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4937390562043858043}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &2280359367130513804
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1646387898454772943}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 2bcf343b3ef74f0fb3c64be6fd2893b6, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: AppleHillsScripts::Interactions.CharacterMoveToTarget
|
||||
characterType: 2
|
||||
positionOffset: {x: 0, y: 0, z: 1}
|
||||
--- !u!1 &3591802784221671576
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -94,6 +140,11 @@ GameObject:
|
||||
- component: {fileID: 4937390562043858043}
|
||||
- component: {fileID: 2720557426779044373}
|
||||
- component: {fileID: 8897661028274890141}
|
||||
- component: {fileID: 8437452310832126615}
|
||||
- component: {fileID: 492578671844741631}
|
||||
- component: {fileID: 8984729148657672365}
|
||||
- component: {fileID: 1569498917964935965}
|
||||
- component: {fileID: 3871210969445384207}
|
||||
m_Layer: 10
|
||||
m_Name: BallTree
|
||||
m_TagString: Untagged
|
||||
@@ -115,6 +166,7 @@ Transform:
|
||||
m_ConstrainProportionsScale: 1
|
||||
m_Children:
|
||||
- {fileID: 6631072601870453588}
|
||||
- {fileID: 7371967679236352629}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!212 &2720557426779044373
|
||||
@@ -137,6 +189,8 @@ SpriteRenderer:
|
||||
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||
m_RayTracingAccelStructBuildFlags: 1
|
||||
m_SmallMeshCulling: 1
|
||||
m_ForceMeshLod: -1
|
||||
m_MeshLodSelectionBias: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
@@ -158,6 +212,7 @@ SpriteRenderer:
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_GlobalIlluminationMeshLod: 0
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 1
|
||||
@@ -218,3 +273,115 @@ BoxCollider2D:
|
||||
m_AutoTiling: 0
|
||||
m_Size: {x: 3.437712, y: 7.532383}
|
||||
m_EdgeRadius: 0
|
||||
--- !u!114 &8437452310832126615
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7379304988657006554}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 73d6494a73174ffabc6a7d3089d51e73, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
isOneTime: 0
|
||||
cooldown: -1
|
||||
characterToInteract: 2
|
||||
interactionStarted:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
interactionInterrupted:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
characterArrived:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
interactionComplete:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
--- !u!114 &492578671844741631
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7379304988657006554}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 1101f6c4eb04423b89dc78dc7c9f1aae, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
stepData: {fileID: 11400000, guid: 8ac614a698631554ab8ac39aed04a189, type: 2}
|
||||
puzzleIndicator: {fileID: 0}
|
||||
drawPromptRangeGizmo: 1
|
||||
--- !u!114 &8984729148657672365
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7379304988657006554}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 42e77a0c97604b6eb7674e58726c831a, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: AppleHillsScripts::Interactions.InteractionTimelineAction
|
||||
respondToEvents: 04000000
|
||||
pauseInteractionFlow: 1
|
||||
playableDirector: {fileID: 0}
|
||||
timelineMappings:
|
||||
- eventType: 4
|
||||
timelines: []
|
||||
bindPlayerCharacter: 0
|
||||
bindPulverCharacter: 0
|
||||
playerTrackName:
|
||||
pulverTrackName:
|
||||
timeoutSeconds: 30
|
||||
loopLast: 0
|
||||
loopAll: 0
|
||||
--- !u!320 &1569498917964935965
|
||||
PlayableDirector:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7379304988657006554}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_PlayableAsset: {fileID: 11400000, guid: dd9566026364e814a8dad109e6c365ca, type: 2}
|
||||
m_InitialState: 0
|
||||
m_WrapMode: 2
|
||||
m_DirectorUpdateMode: 1
|
||||
m_InitialTime: 0
|
||||
m_SceneBindings:
|
||||
- key: {fileID: -7584736085941489071, guid: dd9566026364e814a8dad109e6c365ca, type: 2}
|
||||
value: {fileID: 3871210969445384207}
|
||||
- key: {fileID: -2395336864975438248, guid: dd9566026364e814a8dad109e6c365ca, type: 2}
|
||||
value: {fileID: 0}
|
||||
- key: {fileID: -7231857257271738743, guid: dd9566026364e814a8dad109e6c365ca, type: 2}
|
||||
value: {fileID: 0}
|
||||
m_ExposedReferences:
|
||||
m_References: []
|
||||
--- !u!95 &3871210969445384207
|
||||
Animator:
|
||||
serializedVersion: 7
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7379304988657006554}
|
||||
m_Enabled: 1
|
||||
m_Avatar: {fileID: 0}
|
||||
m_Controller: {fileID: 0}
|
||||
m_CullingMode: 0
|
||||
m_UpdateMode: 0
|
||||
m_ApplyRootMotion: 0
|
||||
m_LinearVelocityBlending: 0
|
||||
m_StabilizeFeet: 0
|
||||
m_AnimatePhysics: 0
|
||||
m_WarningMessage:
|
||||
m_HasTransformHierarchy: 1
|
||||
m_AllowConstantClipSamplingOptimization: 1
|
||||
m_KeepAnimatorStateOnDisable: 0
|
||||
m_WriteDefaultValuesOnDisable: 0
|
||||
|
||||
@@ -267,7 +267,7 @@ SpriteRenderer:
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_Sprite: {fileID: 2640071299338251634, guid: 7c4c9881382767047aac78ca51b82923, type: 3}
|
||||
m_Sprite: {fileID: -1125559343802010594, guid: 46b2fe6896b27cc4c8bd9f0da3f0de50, type: 3}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_FlipX: 0
|
||||
m_FlipY: 0
|
||||
@@ -315,8 +315,8 @@ BoxCollider2D:
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_SpriteTilingProperty:
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
oldSize: {x: 5.75, y: 2.78}
|
||||
pivot: {x: 0.5088555, y: 0.82942355}
|
||||
oldSize: {x: 28.869999, y: 14.16}
|
||||
newSize: {x: 5.75, y: 2.78}
|
||||
adaptiveTilingThreshold: 0.5
|
||||
drawMode: 0
|
||||
|
||||
@@ -262,7 +262,7 @@ SpriteRenderer:
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_Sprite: {fileID: 3009302558630513478, guid: 3aefb78ee1b7f6e4685d0fff00e24e3d, type: 3}
|
||||
m_Sprite: {fileID: -642587728066523507, guid: 95d6dbee5cb1f694c971791ee60cad14, type: 3}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_FlipX: 0
|
||||
m_FlipY: 0
|
||||
@@ -310,8 +310,8 @@ BoxCollider2D:
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_SpriteTilingProperty:
|
||||
border: {x: 0, y: 0, z: 0, w: 0}
|
||||
pivot: {x: 0.5, y: 0.5}
|
||||
oldSize: {x: 5.75, y: 3.38}
|
||||
pivot: {x: 0.491691, y: 0.83455706}
|
||||
oldSize: {x: 24.630001, y: 13.68}
|
||||
newSize: {x: 5.75, y: 2.78}
|
||||
adaptiveTilingThreshold: 0.5
|
||||
drawMode: 0
|
||||
|
||||
@@ -94,11 +94,11 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3070149615425714466, guid: bf4b9d7045397f946b2125b1ad4a3fbd, type: 3}
|
||||
propertyPath: m_SpriteTilingProperty.oldSize.x
|
||||
value: 1.34
|
||||
value: 3.68
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3070149615425714466, guid: bf4b9d7045397f946b2125b1ad4a3fbd, type: 3}
|
||||
propertyPath: m_SpriteTilingProperty.oldSize.y
|
||||
value: 1.53
|
||||
value: 3.96
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3070149615425714466, guid: bf4b9d7045397f946b2125b1ad4a3fbd, type: 3}
|
||||
propertyPath: m_SpriteTilingProperty.adaptiveTilingThreshold
|
||||
@@ -119,7 +119,7 @@ PrefabInstance:
|
||||
- target: {fileID: 7494677664706785084, guid: bf4b9d7045397f946b2125b1ad4a3fbd, type: 3}
|
||||
propertyPath: m_Sprite
|
||||
value:
|
||||
objectReference: {fileID: -509776585262497855, guid: c648336c825f7d7479582bbe4d95d0bc, type: 3}
|
||||
objectReference: {fileID: -3811075571101519331, guid: 4a1a1ea0011e5644c917aaa7255ab48f, type: 3}
|
||||
- target: {fileID: 7494677664706785084, guid: bf4b9d7045397f946b2125b1ad4a3fbd, type: 3}
|
||||
propertyPath: m_WasSpriteAssigned
|
||||
value: 1
|
||||
|
||||
@@ -12,6 +12,7 @@ GameObject:
|
||||
- component: {fileID: 9002038557409323574}
|
||||
- component: {fileID: 4498241824153346754}
|
||||
- component: {fileID: 3123748273643935430}
|
||||
- component: {fileID: 8484489322432759371}
|
||||
m_Layer: 5
|
||||
m_Name: SpeechBubble
|
||||
m_TagString: Untagged
|
||||
@@ -34,11 +35,11 @@ RectTransform:
|
||||
- {fileID: 1539728007164444029}
|
||||
m_Father: {fileID: 3484825090253933040}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 50}
|
||||
m_SizeDelta: {x: 400, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 1}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 600, y: 0}
|
||||
m_Pivot: {x: 0, y: 0}
|
||||
--- !u!114 &9002038557409323574
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -99,6 +100,123 @@ MonoBehaviour:
|
||||
m_FlexibleWidth: -1
|
||||
m_FlexibleHeight: -1
|
||||
m_LayoutPriority: 1
|
||||
--- !u!114 &8484489322432759371
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1494212192306772670}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: cb3605ae81a54d2689504e0cd456ac27, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: AppleHillsScripts::Dialogue.SpeechBubble
|
||||
textDisplay: {fileID: 4573570654593171780}
|
||||
imageDisplay: {fileID: 4814676392695871198}
|
||||
displayMode: 1
|
||||
typewriterSpeed: 0.05
|
||||
typingSoundSource: {fileID: 0}
|
||||
typingSoundFrequency: 3
|
||||
useRichText: 1
|
||||
dialogueDisplayTime: 3
|
||||
dialoguePromptText: . . .
|
||||
--- !u!1 &3571537114331005905
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 7453431659909988258}
|
||||
- component: {fileID: 7239040132725875785}
|
||||
- component: {fileID: 4814676392695871198}
|
||||
- component: {fileID: 7738447742327076413}
|
||||
m_Layer: 5
|
||||
m_Name: Image
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 0
|
||||
--- !u!224 &7453431659909988258
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3571537114331005905}
|
||||
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: 1539728007164444029}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 300, y: -125}
|
||||
m_SizeDelta: {x: 200, y: 200}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &7239040132725875785
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3571537114331005905}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &4814676392695871198
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3571537114331005905}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: -9213056636207805707, guid: 00354ded9d8f8d643acc14837a229544, type: 3}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 1
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!114 &7738447742327076413
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3571537114331005905}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.LayoutElement
|
||||
m_IgnoreLayout: 0
|
||||
m_MinWidth: -1
|
||||
m_MinHeight: -1
|
||||
m_PreferredWidth: 200
|
||||
m_PreferredHeight: 200
|
||||
m_FlexibleWidth: -1
|
||||
m_FlexibleHeight: -1
|
||||
m_LayoutPriority: 1
|
||||
--- !u!1 &5048280843231724144
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -164,7 +282,7 @@ MonoBehaviour:
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_text: Hey there buster!
|
||||
m_text: Hey there, buster!
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
@@ -191,8 +309,8 @@ MonoBehaviour:
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 35
|
||||
m_fontSizeBase: 35
|
||||
m_fontSize: 55
|
||||
m_fontSizeBase: 55
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_fontSizeMin: 18
|
||||
@@ -364,18 +482,19 @@ RectTransform:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8341977934938436915}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: -1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: -0.9999999}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 7704981663008171144}
|
||||
- {fileID: 7453431659909988258}
|
||||
m_Father: {fileID: 8307219291215824345}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
m_Pivot: {x: 0, y: 0}
|
||||
--- !u!222 &2528298462582055986
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -433,7 +552,7 @@ MonoBehaviour:
|
||||
m_Bottom: 70
|
||||
m_ChildAlignment: 4
|
||||
m_Spacing: 0
|
||||
m_ChildForceExpandWidth: 1
|
||||
m_ChildForceExpandWidth: 0
|
||||
m_ChildForceExpandHeight: 0
|
||||
m_ChildControlWidth: 1
|
||||
m_ChildControlHeight: 1
|
||||
|
||||
@@ -309,7 +309,7 @@ PrefabInstance:
|
||||
objectReference: {fileID: 517425340}
|
||||
- target: {fileID: 6254953093500072797, guid: b5fc01af35233eb4cbeede05e50a7c34, type: 3}
|
||||
propertyPath: characterToInteract
|
||||
value: 1
|
||||
value: 2
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6303063351359542479, guid: b5fc01af35233eb4cbeede05e50a7c34, type: 3}
|
||||
propertyPath: m_Sprite
|
||||
@@ -603,7 +603,7 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6254953093500072797, guid: b5fc01af35233eb4cbeede05e50a7c34, type: 3}
|
||||
propertyPath: characterToInteract
|
||||
value: 1
|
||||
value: 2
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6350287859698694726, guid: b5fc01af35233eb4cbeede05e50a7c34, type: 3}
|
||||
propertyPath: m_Name
|
||||
@@ -777,7 +777,7 @@ PrefabInstance:
|
||||
objectReference: {fileID: 11400000, guid: 9de0c57af6191384e96e2ba7c04a3d0d, type: 2}
|
||||
- target: {fileID: 6254953093500072797, guid: b5fc01af35233eb4cbeede05e50a7c34, type: 3}
|
||||
propertyPath: characterToInteract
|
||||
value: 1
|
||||
value: 2
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6303063351359542479, guid: b5fc01af35233eb4cbeede05e50a7c34, type: 3}
|
||||
propertyPath: m_Sprite
|
||||
@@ -972,11 +972,11 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3484825090253933040, guid: a8b0a1c6cf21352439dc24d3b03182db, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 2.55
|
||||
value: 0.6806664
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3484825090253933040, guid: a8b0a1c6cf21352439dc24d3b03182db, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 3.17
|
||||
value: 1.4252888
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3484825090253933040, guid: a8b0a1c6cf21352439dc24d3b03182db, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
@@ -1068,6 +1068,7 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: AppleHillsScripts::Dialogue.SpeechBubble
|
||||
textDisplay: {fileID: 677854361}
|
||||
imageDisplay: {fileID: 0}
|
||||
displayMode: 1
|
||||
typewriterSpeed: 0.02
|
||||
typingSoundSource: {fileID: 0}
|
||||
@@ -1286,7 +1287,7 @@ PrefabInstance:
|
||||
objectReference: {fileID: 11400000, guid: a84cbe9804e13f74e857c55d90cc10d1, type: 2}
|
||||
- target: {fileID: 6254953093500072797, guid: b5fc01af35233eb4cbeede05e50a7c34, type: 3}
|
||||
propertyPath: characterToInteract
|
||||
value: 1
|
||||
value: 2
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6303063351359542479, guid: b5fc01af35233eb4cbeede05e50a7c34, type: 3}
|
||||
propertyPath: m_Sprite
|
||||
@@ -1411,7 +1412,7 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7616859841301711022, guid: bf4b9d7045397f946b2125b1ad4a3fbd, type: 3}
|
||||
propertyPath: characterToInteract
|
||||
value: 1
|
||||
value: 2
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
@@ -1832,6 +1833,7 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: AppleHillsScripts::Dialogue.SpeechBubble
|
||||
textDisplay: {fileID: 614125440}
|
||||
imageDisplay: {fileID: 0}
|
||||
displayMode: 1
|
||||
typewriterSpeed: 0.02
|
||||
typingSoundSource: {fileID: 0}
|
||||
@@ -1970,7 +1972,7 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7616859841301711022, guid: bf4b9d7045397f946b2125b1ad4a3fbd, type: 3}
|
||||
propertyPath: characterToInteract
|
||||
value: 1
|
||||
value: 2
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents:
|
||||
- {fileID: 592045584872845087, guid: bf4b9d7045397f946b2125b1ad4a3fbd, type: 3}
|
||||
@@ -2281,7 +2283,7 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7616859841301711022, guid: bf4b9d7045397f946b2125b1ad4a3fbd, type: 3}
|
||||
propertyPath: characterToInteract
|
||||
value: 1
|
||||
value: 2
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
@@ -2892,11 +2894,11 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3484825090253933040, guid: a8b0a1c6cf21352439dc24d3b03182db, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 2.55
|
||||
value: 0.5560436
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3484825090253933040, guid: a8b0a1c6cf21352439dc24d3b03182db, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 3.17
|
||||
value: 1.3006666
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3484825090253933040, guid: a8b0a1c6cf21352439dc24d3b03182db, type: 3}
|
||||
propertyPath: m_LocalEulerAnglesHint.x
|
||||
|
||||
@@ -6,6 +6,7 @@ public class BirdEyesBehavior : MonoBehaviour
|
||||
private StateMachine statemachine;
|
||||
private Animator animator;
|
||||
public bool correctItemIsIn;
|
||||
[SerializeField] private Animator bushAnimator; // Assign in Inspector
|
||||
// Start is called once before the first execution of Update after the MonoBehaviour is created
|
||||
void Start()
|
||||
{
|
||||
@@ -36,6 +37,7 @@ public class BirdEyesBehavior : MonoBehaviour
|
||||
}
|
||||
public void BirdReveal()
|
||||
{
|
||||
statemachine.ChangeState ("BirdSpawned");
|
||||
bushAnimator.SetTrigger("wolterisout");
|
||||
statemachine.ChangeState ("BirdSpawned");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -159,72 +159,10 @@ public class GameManager : MonoBehaviour
|
||||
{
|
||||
return DeveloperSettingsProvider.Instance?.GetSettings<T>();
|
||||
}
|
||||
|
||||
// PLAYER & FOLLOWER SETTINGS
|
||||
|
||||
// Player settings
|
||||
public float MoveSpeed => GetSettings<IPlayerFollowerSettings>()?.MoveSpeed ?? 5f;
|
||||
public float StopDistance => GetSettings<IPlayerFollowerSettings>()?.StopDistance ?? 0.1f;
|
||||
public bool UseRigidbody => GetSettings<IPlayerFollowerSettings>()?.UseRigidbody ?? true;
|
||||
public HoldMovementMode DefaultHoldMovementMode =>
|
||||
GetSettings<IPlayerFollowerSettings>()?.DefaultHoldMovementMode ?? HoldMovementMode.Pathfinding;
|
||||
|
||||
// Follower settings
|
||||
public float FollowDistance => GetSettings<IPlayerFollowerSettings>()?.FollowDistance ?? 1.5f;
|
||||
public float ManualMoveSmooth => GetSettings<IPlayerFollowerSettings>()?.ManualMoveSmooth ?? 8f;
|
||||
public float ThresholdFar => GetSettings<IPlayerFollowerSettings>()?.ThresholdFar ?? 2.5f;
|
||||
public float ThresholdNear => GetSettings<IPlayerFollowerSettings>()?.ThresholdNear ?? 0.5f;
|
||||
public float StopThreshold => GetSettings<IPlayerFollowerSettings>()?.StopThreshold ?? 0.1f;
|
||||
public float FollowUpdateInterval => GetSettings<IPlayerFollowerSettings>()?.FollowUpdateInterval ?? 0.1f;
|
||||
public float FollowerSpeedMultiplier => GetSettings<IPlayerFollowerSettings>()?.FollowerSpeedMultiplier ?? 1.2f;
|
||||
public float HeldIconDisplayHeight => GetSettings<IPlayerFollowerSettings>()?.HeldIconDisplayHeight ?? 2.0f;
|
||||
|
||||
// INTERACTION SETTINGS
|
||||
|
||||
// LEFTOVER LEGACY SETTINGS
|
||||
public float PlayerStopDistance => GetSettings<IInteractionSettings>()?.PlayerStopDistance ?? 6.0f;
|
||||
public float PlayerStopDistanceDirectInteraction => GetSettings<IInteractionSettings>()?.PlayerStopDistanceDirectInteraction ?? 2.0f;
|
||||
public float FollowerPickupDelay => GetSettings<IInteractionSettings>()?.FollowerPickupDelay ?? 0.2f;
|
||||
public LayerMask InteractableLayerMask => GetSettings<IInteractionSettings>()?.InteractableLayerMask ?? -1;
|
||||
public GameObject BasePickupPrefab => GetSettings<IInteractionSettings>()?.BasePickupPrefab;
|
||||
public GameObject LevelSwitchMenuPrefab => GetSettings<IInteractionSettings>()?.LevelSwitchMenuPrefab;
|
||||
|
||||
// PUZZLE SETTINGS
|
||||
|
||||
public float DefaultPuzzlePromptRange => GetSettings<IInteractionSettings>()?.DefaultPuzzlePromptRange ?? 3.0f;
|
||||
public GameObject DefaultPuzzleIndicatorPrefab => GetSettings<IInteractionSettings>()?.DefaultPuzzleIndicatorPrefab;
|
||||
|
||||
/// <summary>
|
||||
/// Returns the combination rule for two items, if any.
|
||||
/// </summary>
|
||||
public CombinationRule GetCombinationRule(PickupItemData item1, PickupItemData item2)
|
||||
{
|
||||
var settings = GetSettings<IInteractionSettings>();
|
||||
if (settings == null || settings.CombinationRules == null) return null;
|
||||
|
||||
foreach (var rule in settings.CombinationRules)
|
||||
{
|
||||
if ((PickupItemData.AreEquivalent(rule.itemA, item1) && PickupItemData.AreEquivalent(rule.itemB, item2)) ||
|
||||
(PickupItemData.AreEquivalent(rule.itemA, item2) && PickupItemData.AreEquivalent(rule.itemB, item1)))
|
||||
{
|
||||
return rule;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the slot item config for a given slot item.
|
||||
/// </summary>
|
||||
public SlotItemConfig GetSlotItemConfig(PickupItemData slotItem)
|
||||
{
|
||||
var settings = GetSettings<IInteractionSettings>();
|
||||
if (settings == null || settings.SlotItemConfigs == null || slotItem == null) return null;
|
||||
|
||||
foreach (var config in settings.SlotItemConfigs)
|
||||
{
|
||||
if (PickupItemData.AreEquivalent(slotItem, config.slotItem))
|
||||
return config;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,5 +53,38 @@ namespace AppleHills.Core.Settings
|
||||
followerPickupDelay = Mathf.Max(0f, followerPickupDelay);
|
||||
defaultPuzzlePromptRange = Mathf.Max(0.1f, defaultPuzzlePromptRange);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the combination rule for two items, if any.
|
||||
/// </summary>
|
||||
public CombinationRule GetCombinationRule(PickupItemData item1, PickupItemData item2)
|
||||
{
|
||||
if (combinationRules == null) return null;
|
||||
|
||||
foreach (var rule in combinationRules)
|
||||
{
|
||||
if ((PickupItemData.AreEquivalent(rule.itemA, item1) && PickupItemData.AreEquivalent(rule.itemB, item2)) ||
|
||||
(PickupItemData.AreEquivalent(rule.itemA, item2) && PickupItemData.AreEquivalent(rule.itemB, item1)))
|
||||
{
|
||||
return rule;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the slot item config for a given slot item.
|
||||
/// </summary>
|
||||
public SlotItemConfig GetSlotItemConfig(PickupItemData slotItem)
|
||||
{
|
||||
if (slotItemConfigs == null || slotItem == null) return null;
|
||||
|
||||
foreach (var config in slotItemConfigs)
|
||||
{
|
||||
if (PickupItemData.AreEquivalent(slotItem, config.slotItem))
|
||||
return config;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,6 +43,10 @@ namespace AppleHills.Core.Settings
|
||||
// Puzzle settings
|
||||
GameObject DefaultPuzzleIndicatorPrefab { get; }
|
||||
float DefaultPuzzlePromptRange { get; }
|
||||
|
||||
// Methods to query item configurations
|
||||
CombinationRule GetCombinationRule(PickupItemData item1, PickupItemData item2);
|
||||
SlotItemConfig GetSlotItemConfig(PickupItemData slotItem);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -19,7 +19,7 @@ public class PicnicBehaviour : MonoBehaviour
|
||||
// Start is called once before the first execution of Update after the MonoBehaviour is created
|
||||
void Start()
|
||||
{
|
||||
StartCoroutine(RandomFirstMethodRoutine());
|
||||
StartCoroutine(StateCycleRoutine());
|
||||
}
|
||||
|
||||
void Awake()
|
||||
@@ -34,38 +34,24 @@ public class PicnicBehaviour : MonoBehaviour
|
||||
|
||||
}
|
||||
|
||||
private IEnumerator RandomFirstMethodRoutine()
|
||||
private IEnumerator StateCycleRoutine()
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
float waitTime = Random.Range(getDistractedMin, getDistractedMax);
|
||||
yield return new WaitForSeconds(waitTime);
|
||||
FirstMethod();
|
||||
// Distracted state
|
||||
float distractedWait = Random.Range(getDistractedMin, getDistractedMax);
|
||||
stateMachine.ChangeState("Picnic PPL Distracted");
|
||||
animator.SetBool("theyDistracted", true);
|
||||
yield return new WaitForSeconds(distractedWait);
|
||||
|
||||
// Chilling state
|
||||
float chillingWait = Random.Range(getFlirtyMin, getFlirtyMax);
|
||||
stateMachine.ChangeState("Picnic PPL Chilling");
|
||||
animator.SetBool("theyDistracted", false);
|
||||
yield return new WaitForSeconds(chillingWait);
|
||||
}
|
||||
}
|
||||
|
||||
private void FirstMethod()
|
||||
{
|
||||
Debug.Log("First method called!");
|
||||
stateMachine.ChangeState("Picnic PPL Distracted");
|
||||
animator.SetBool("theyDistracted", true);
|
||||
StartCoroutine(RandomSecondMethodRoutine());
|
||||
}
|
||||
|
||||
private IEnumerator RandomSecondMethodRoutine()
|
||||
{
|
||||
float waitTime = Random.Range(getFlirtyMin, getFlirtyMax);
|
||||
yield return new WaitForSeconds(waitTime);
|
||||
SecondMethod();
|
||||
}
|
||||
|
||||
private void SecondMethod()
|
||||
{
|
||||
Debug.Log("Second method called!");
|
||||
stateMachine.ChangeState("Picnic PPL Chilling");
|
||||
animator.SetBool("theyDistracted", false);
|
||||
}
|
||||
|
||||
public void triedToStealChocolate()
|
||||
{
|
||||
animator.SetTrigger("theyAngry");
|
||||
|
||||
@@ -74,19 +74,96 @@ namespace Dialogue
|
||||
|
||||
private void OnCharacterArrived()
|
||||
{
|
||||
if (speechBubble == null || ! HasAnyLines()) return;
|
||||
if (speechBubble == null || !HasAnyLines()) return;
|
||||
|
||||
// Advance the dialogue state to move to the next content
|
||||
AdvanceDialogueState();
|
||||
|
||||
// Get the current dialogue line
|
||||
string line = GetCurrentDialogueLine();
|
||||
// Check if we have DialogueContent available (prioritizing the new content system)
|
||||
DialogueContent content = GetCurrentDialogueContent();
|
||||
|
||||
// Display the line with the new method that handles timed updates
|
||||
speechBubble.DisplayDialogueLine(line, HasAnyLines());
|
||||
|
||||
// Advance dialogue state for next interaction
|
||||
if (content != null)
|
||||
{
|
||||
// Display the content with the method that handles both text and images
|
||||
// and pass whether there are more lines available for prompt display
|
||||
speechBubble.DisplayDialogueContent(content, HasAnyLines());
|
||||
|
||||
// Log the content type for debugging
|
||||
Debug.Log($"Displaying content type: {content.ContentType} - {(content.ContentType == DialogueContentType.Text ? content.Text : content.Image?.name)}");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Fall back to legacy text-only method if no DialogueContent is available
|
||||
string line = GetCurrentDialogueLine();
|
||||
speechBubble.DisplayDialogueLine(line, HasAnyLines());
|
||||
|
||||
// Log for debugging
|
||||
Debug.Log($"Displaying legacy text: {line}");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the current dialogue content (text or image)
|
||||
/// </summary>
|
||||
/// <returns>DialogueContent or null if only legacy text content is available</returns>
|
||||
private DialogueContent GetCurrentDialogueContent()
|
||||
{
|
||||
// Initialize if needed
|
||||
if (!initialized)
|
||||
{
|
||||
StartDialogue();
|
||||
}
|
||||
|
||||
if (!IsActive || IsCompleted || currentNode == null)
|
||||
return null;
|
||||
|
||||
// Check if we have DialogueContent available
|
||||
if (currentNode.dialogueContent != null && currentNode.dialogueContent.Count > 0)
|
||||
{
|
||||
// For WaitOnSlot nodes, use the appropriate content based on slot state
|
||||
if (currentNode.nodeType == RuntimeDialogueNodeType.WaitOnSlot)
|
||||
{
|
||||
// Choose the appropriate content collection based on the current slot state
|
||||
List<DialogueContent> contentForState = currentNode.dialogueContent; // Default content
|
||||
|
||||
switch (_currentSlotState)
|
||||
{
|
||||
case ItemSlotState.Incorrect:
|
||||
// Use incorrect item content if available
|
||||
if (currentNode.incorrectItemContent != null && currentNode.incorrectItemContent.Count > 0)
|
||||
contentForState = currentNode.incorrectItemContent;
|
||||
break;
|
||||
|
||||
case ItemSlotState.Forbidden:
|
||||
// Use forbidden item content if available
|
||||
if (currentNode.forbiddenItemContent != null && currentNode.forbiddenItemContent.Count > 0)
|
||||
contentForState = currentNode.forbiddenItemContent;
|
||||
break;
|
||||
}
|
||||
|
||||
// If we have content for this state, return the current one
|
||||
if (contentForState != null && contentForState.Count > 0)
|
||||
{
|
||||
// Make sure index is within bounds
|
||||
int index = Mathf.Clamp(currentLineIndex, 0, contentForState.Count - 1);
|
||||
return contentForState[index];
|
||||
}
|
||||
return null; // No content for this slot state
|
||||
}
|
||||
else
|
||||
{
|
||||
// For other node types, use the default dialogueContent
|
||||
if (currentLineIndex >= 0 && currentLineIndex < currentNode.dialogueContent.Count)
|
||||
{
|
||||
return currentNode.dialogueContent[currentLineIndex];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// No DialogueContent available, will fall back to legacy text handling
|
||||
return null;
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
// Unregister from events
|
||||
@@ -205,7 +282,7 @@ namespace Dialogue
|
||||
{
|
||||
if (!IsActive || IsCompleted || currentNode == null)
|
||||
return;
|
||||
|
||||
|
||||
// If the condition was satisfied earlier, move to the next node immediately
|
||||
if (_conditionSatisfiedPendingAdvance)
|
||||
{
|
||||
@@ -213,21 +290,44 @@ namespace Dialogue
|
||||
MoveToNextNode();
|
||||
return;
|
||||
}
|
||||
|
||||
// First check if we have any dialogueContent to process
|
||||
bool hasDialogueContent = currentNode.dialogueContent != null && currentNode.dialogueContent.Count > 0;
|
||||
|
||||
// If we have more lines in the current node, advance to the next line
|
||||
if (currentLineIndex < currentNode.dialogueLines.Count - 1)
|
||||
if (hasDialogueContent)
|
||||
{
|
||||
currentLineIndex++;
|
||||
return;
|
||||
// If we have dialogueContent and there are more entries, advance to the next one
|
||||
if (currentLineIndex < currentNode.dialogueContent.Count - 1)
|
||||
{
|
||||
currentLineIndex++;
|
||||
return;
|
||||
}
|
||||
|
||||
// If we should loop through content, reset the index
|
||||
if (currentNode.loopThroughLines && currentNode.dialogueContent.Count > 0)
|
||||
{
|
||||
currentLineIndex = 0;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// If we should loop through lines, reset the index
|
||||
if (currentNode.loopThroughLines && currentNode.dialogueLines.Count > 0)
|
||||
else
|
||||
{
|
||||
currentLineIndex = 0;
|
||||
return;
|
||||
// Fall back to legacy dialogueLines
|
||||
// If we have more lines in the current node, advance to the next line
|
||||
if (currentLineIndex < currentNode.dialogueLines.Count - 1)
|
||||
{
|
||||
currentLineIndex++;
|
||||
return;
|
||||
}
|
||||
|
||||
// If we should loop through lines, reset the index
|
||||
if (currentNode.loopThroughLines && currentNode.dialogueLines.Count > 0)
|
||||
{
|
||||
currentLineIndex = 0;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// If we're at a node that doesn't have a next node, we're done
|
||||
if (string.IsNullOrEmpty(currentNode.nextNodeID))
|
||||
{
|
||||
@@ -235,7 +335,7 @@ namespace Dialogue
|
||||
IsCompleted = true;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// Move to the next node only if no conditions to wait for
|
||||
if (!IsWaitingForCondition())
|
||||
{
|
||||
@@ -560,60 +660,110 @@ namespace Dialogue
|
||||
// Special case: if condition has been satisfied but not yet advanced, we should show lines
|
||||
if (_conditionSatisfiedPendingAdvance && !string.IsNullOrEmpty(currentNode.nextNodeID))
|
||||
{
|
||||
// Check if the next node would have lines
|
||||
// Check if the next node would have lines or content
|
||||
RuntimeDialogueNode nextNode = dialogueGraph.GetNodeByID(currentNode.nextNodeID);
|
||||
return nextNode != null && (nextNode.dialogueLines.Count > 0 || nextNode.nodeType != RuntimeDialogueNodeType.End);
|
||||
return nextNode != null &&
|
||||
((nextNode.dialogueLines != null && nextNode.dialogueLines.Count > 0) ||
|
||||
(nextNode.dialogueContent != null && nextNode.dialogueContent.Count > 0) ||
|
||||
nextNode.nodeType != RuntimeDialogueNodeType.End);
|
||||
}
|
||||
|
||||
// For WaitOnSlot nodes, check for lines based on current slot state
|
||||
// For WaitOnSlot nodes, check for lines or content based on current slot state
|
||||
if (currentNode.nodeType == RuntimeDialogueNodeType.WaitOnSlot)
|
||||
{
|
||||
// Choose the appropriate line collection based on the current slot state
|
||||
List<string> linesForState = currentNode.dialogueLines; // Default lines
|
||||
// First check for DialogueContent
|
||||
if (currentNode.dialogueContent != null && currentNode.dialogueContent.Count > 0)
|
||||
{
|
||||
// Choose the appropriate content collection based on the current slot state
|
||||
List<DialogueContent> contentForState = currentNode.dialogueContent;
|
||||
|
||||
switch (_currentSlotState)
|
||||
{
|
||||
case ItemSlotState.Incorrect:
|
||||
if (currentNode.incorrectItemContent != null && currentNode.incorrectItemContent.Count > 0)
|
||||
contentForState = currentNode.incorrectItemContent;
|
||||
break;
|
||||
|
||||
case ItemSlotState.Forbidden:
|
||||
if (currentNode.forbiddenItemContent != null && currentNode.forbiddenItemContent.Count > 0)
|
||||
contentForState = currentNode.forbiddenItemContent;
|
||||
break;
|
||||
}
|
||||
|
||||
if (contentForState.Count > 0)
|
||||
{
|
||||
if (currentLineIndex < contentForState.Count - 1 || currentNode.loopThroughLines)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Fall back to legacy text lines
|
||||
List<string> linesForState = currentNode.dialogueLines;
|
||||
|
||||
switch (_currentSlotState)
|
||||
{
|
||||
case ItemSlotState.Incorrect:
|
||||
// Use incorrect item lines if available, otherwise fall back to default lines
|
||||
if (currentNode.incorrectItemLines != null && currentNode.incorrectItemLines.Count > 0)
|
||||
linesForState = currentNode.incorrectItemLines;
|
||||
break;
|
||||
|
||||
case ItemSlotState.Forbidden:
|
||||
// Use forbidden item lines if available, otherwise fall back to default lines
|
||||
if (currentNode.forbiddenItemLines != null && currentNode.forbiddenItemLines.Count > 0)
|
||||
linesForState = currentNode.forbiddenItemLines;
|
||||
break;
|
||||
}
|
||||
|
||||
// Check if we have any lines for the current state
|
||||
if (linesForState != null && linesForState.Count > 0)
|
||||
{
|
||||
// If we're not at the end of the lines or we loop through them
|
||||
if (currentLineIndex < linesForState.Count - 1 || currentNode.loopThroughLines)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
// For other node types, use the standard check
|
||||
else if (currentNode.dialogueLines.Count > 0)
|
||||
// For other node types, check for DialogueContent first, then fall back to legacy text
|
||||
else
|
||||
{
|
||||
// If we're not at the end of the lines or we loop through them
|
||||
if (currentLineIndex < currentNode.dialogueLines.Count - 1 || currentNode.loopThroughLines)
|
||||
// Check for DialogueContent
|
||||
if (currentNode.dialogueContent != null && currentNode.dialogueContent.Count > 0)
|
||||
{
|
||||
return true;
|
||||
if (currentLineIndex < currentNode.dialogueContent.Count - 1 || currentNode.loopThroughLines)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// If we're at the end of content but not waiting for a condition and have a next node
|
||||
if (!IsWaitingForCondition() && !string.IsNullOrEmpty(currentNode.nextNodeID))
|
||||
{
|
||||
RuntimeDialogueNode nextNode = dialogueGraph.GetNodeByID(currentNode.nextNodeID);
|
||||
return nextNode != null &&
|
||||
((nextNode.dialogueContent != null && nextNode.dialogueContent.Count > 0) ||
|
||||
(nextNode.dialogueLines != null && nextNode.dialogueLines.Count > 0) ||
|
||||
nextNode.nodeType != RuntimeDialogueNodeType.End);
|
||||
}
|
||||
}
|
||||
|
||||
// If we're at the end of lines but not waiting for a condition and have a next node
|
||||
if (!IsWaitingForCondition() && !string.IsNullOrEmpty(currentNode.nextNodeID))
|
||||
// Fall back to legacy text lines
|
||||
if (currentNode.dialogueLines != null && currentNode.dialogueLines.Count > 0)
|
||||
{
|
||||
// We need to check if the next node would have lines
|
||||
RuntimeDialogueNode nextNode = dialogueGraph.GetNodeByID(currentNode.nextNodeID);
|
||||
return nextNode != null && (nextNode.dialogueLines.Count > 0 || nextNode.nodeType != RuntimeDialogueNodeType.End);
|
||||
if (currentLineIndex < currentNode.dialogueLines.Count - 1 || currentNode.loopThroughLines)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// If we're at the end of lines but not waiting for a condition and have a next node
|
||||
if (!IsWaitingForCondition() && !string.IsNullOrEmpty(currentNode.nextNodeID))
|
||||
{
|
||||
RuntimeDialogueNode nextNode = dialogueGraph.GetNodeByID(currentNode.nextNodeID);
|
||||
return nextNode != null &&
|
||||
((nextNode.dialogueContent != null && nextNode.dialogueContent.Count > 0) ||
|
||||
(nextNode.dialogueLines != null && nextNode.dialogueLines.Count > 0) ||
|
||||
nextNode.nodeType != RuntimeDialogueNodeType.End);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
76
Assets/Scripts/Dialogue/DialogueContent.cs
Normal file
@@ -0,0 +1,76 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Dialogue
|
||||
{
|
||||
/// <summary>
|
||||
/// Content type for dialogue entries
|
||||
/// </summary>
|
||||
public enum DialogueContentType
|
||||
{
|
||||
Text,
|
||||
Image
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Wrapper class for dialogue content that can be either text or image
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
public class DialogueContent
|
||||
{
|
||||
[SerializeField] private DialogueContentType _contentType = DialogueContentType.Text;
|
||||
[SerializeField] private string _text = string.Empty;
|
||||
[SerializeField] private Sprite _image = null;
|
||||
|
||||
/// <summary>
|
||||
/// The type of content this entry contains
|
||||
/// </summary>
|
||||
public DialogueContentType ContentType => _contentType;
|
||||
|
||||
/// <summary>
|
||||
/// The text content (valid when ContentType is Text)
|
||||
/// </summary>
|
||||
public string Text => _text;
|
||||
|
||||
/// <summary>
|
||||
/// The image content (valid when ContentType is Image)
|
||||
/// </summary>
|
||||
public Sprite Image => _image;
|
||||
|
||||
/// <summary>
|
||||
/// Create text content
|
||||
/// </summary>
|
||||
/// <param name="text">The text to display</param>
|
||||
public static DialogueContent CreateText(string text)
|
||||
{
|
||||
return new DialogueContent
|
||||
{
|
||||
_contentType = DialogueContentType.Text,
|
||||
_text = text
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create image content
|
||||
/// </summary>
|
||||
/// <param name="image">The image to display</param>
|
||||
public static DialogueContent CreateImage(Sprite image)
|
||||
{
|
||||
return new DialogueContent
|
||||
{
|
||||
_contentType = DialogueContentType.Image,
|
||||
_image = image
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a string representation of this content
|
||||
/// </summary>
|
||||
public override string ToString()
|
||||
{
|
||||
return ContentType == DialogueContentType.Text
|
||||
? $"Text: {_text}"
|
||||
: $"Image: {_image?.name ?? "None"}";
|
||||
}
|
||||
}
|
||||
}
|
||||
3
Assets/Scripts/Dialogue/DialogueContent.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6b479dc736d44dea83d4d2cf4d940d8b
|
||||
timeCreated: 1759912630
|
||||
@@ -36,10 +36,14 @@ namespace Dialogue
|
||||
public RuntimeDialogueNodeType nodeType;
|
||||
public string nextNodeID;
|
||||
|
||||
// Basic dialogue
|
||||
// Basic dialogue - legacy text-only field
|
||||
[HideInInspector]
|
||||
public List<string> dialogueLines = new List<string>();
|
||||
public bool loopThroughLines;
|
||||
|
||||
// New mixed content field that supports both text and images
|
||||
public List<DialogueContent> dialogueContent = new List<DialogueContent>();
|
||||
|
||||
// Conditional nodes
|
||||
public string puzzleStepID; // For WaitOnPuzzleStep
|
||||
public string pickupItemID; // For WaitOnPickup
|
||||
@@ -47,9 +51,14 @@ namespace Dialogue
|
||||
public string combinationResultItemID; // For WaitOnCombination
|
||||
|
||||
// For WaitOnSlot - different responses
|
||||
[HideInInspector]
|
||||
public List<string> incorrectItemLines = new List<string>();
|
||||
public bool loopThroughIncorrectLines;
|
||||
public List<DialogueContent> incorrectItemContent = new List<DialogueContent>();
|
||||
|
||||
[HideInInspector]
|
||||
public List<string> forbiddenItemLines = new List<string>();
|
||||
public bool loopThroughForbiddenLines;
|
||||
public List<DialogueContent> forbiddenItemContent = new List<DialogueContent>();
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@
|
||||
using System.Collections;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace Dialogue
|
||||
{
|
||||
@@ -18,6 +19,7 @@ namespace Dialogue
|
||||
public class SpeechBubble : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private TextMeshProUGUI textDisplay;
|
||||
[SerializeField] private Image imageDisplay; // New field for displaying images
|
||||
[SerializeField] private TextDisplayMode displayMode = TextDisplayMode.Typewriter;
|
||||
[SerializeField] private float typewriterSpeed = 0.05f; // Time between characters in seconds
|
||||
[SerializeField] private AudioSource typingSoundSource;
|
||||
@@ -29,11 +31,18 @@ namespace Dialogue
|
||||
private Coroutine typewriterCoroutine;
|
||||
private Coroutine promptUpdateCoroutine;
|
||||
private string currentFullText = string.Empty;
|
||||
private Sprite currentImage = null;
|
||||
private bool isVisible = false;
|
||||
private DialogueContentType currentContentType = DialogueContentType.Text;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
|
||||
// Ensure we have both components
|
||||
if (textDisplay == null)
|
||||
Debug.LogError("SpeechBubble: TextMeshProUGUI component is not assigned!");
|
||||
|
||||
if (imageDisplay == null)
|
||||
Debug.LogError("SpeechBubble: Image component is not assigned!");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -92,6 +101,7 @@ namespace Dialogue
|
||||
}
|
||||
|
||||
currentFullText = text;
|
||||
currentContentType = DialogueContentType.Text;
|
||||
|
||||
// Stop any existing typewriter effect
|
||||
if (typewriterCoroutine != null)
|
||||
@@ -100,6 +110,13 @@ namespace Dialogue
|
||||
typewriterCoroutine = null;
|
||||
}
|
||||
|
||||
// Activate text display, deactivate image display
|
||||
textDisplay.gameObject.SetActive(true);
|
||||
if (imageDisplay != null)
|
||||
{
|
||||
imageDisplay.gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
// Display text based on the selected mode
|
||||
if (displayMode == TextDisplayMode.Instant)
|
||||
{
|
||||
@@ -259,5 +276,117 @@ namespace Dialogue
|
||||
|
||||
typewriterCoroutine = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Set the image to display in the speech bubble
|
||||
/// </summary>
|
||||
/// <param name="sprite">Sprite to display</param>
|
||||
public void SetImage(Sprite sprite)
|
||||
{
|
||||
if (imageDisplay == null)
|
||||
{
|
||||
Debug.LogError("SpeechBubble: Image component is not assigned!");
|
||||
return;
|
||||
}
|
||||
|
||||
currentImage = sprite;
|
||||
currentContentType = DialogueContentType.Image;
|
||||
|
||||
// Activate image display, set the sprite
|
||||
imageDisplay.gameObject.SetActive(true);
|
||||
imageDisplay.sprite = sprite;
|
||||
|
||||
// Deactivate text display
|
||||
if (textDisplay != null)
|
||||
{
|
||||
textDisplay.gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
// Make sure the bubble is visible when setting image
|
||||
if (!isVisible)
|
||||
Show();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Clear the displayed image
|
||||
/// </summary>
|
||||
public void ClearImage()
|
||||
{
|
||||
SetImage(null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Set the content of the speech bubble (text or image)
|
||||
/// </summary>
|
||||
/// <param name="text">Text content</param>
|
||||
/// <param name="image">Image content</param>
|
||||
public void SetContent(string text, Sprite image)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(text))
|
||||
{
|
||||
currentContentType = DialogueContentType.Text;
|
||||
SetText(text);
|
||||
}
|
||||
else if (image != null)
|
||||
{
|
||||
currentContentType = DialogueContentType.Image;
|
||||
SetImage(image);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the current content type of the speech bubble
|
||||
/// </summary>
|
||||
/// <returns>Current content type</returns>
|
||||
public DialogueContentType GetCurrentContentType()
|
||||
{
|
||||
return currentContentType;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Display dialogue content (text or image)
|
||||
/// </summary>
|
||||
/// <param name="content">The dialogue content to display</param>
|
||||
/// <param name="hasMoreDialogue">Whether there are more dialogue content items available</param>
|
||||
public void DisplayDialogueContent(DialogueContent content, bool hasMoreDialogue)
|
||||
{
|
||||
// Cancel any existing prompt update
|
||||
if (promptUpdateCoroutine != null)
|
||||
{
|
||||
StopCoroutine(promptUpdateCoroutine);
|
||||
promptUpdateCoroutine = null;
|
||||
}
|
||||
|
||||
if (content == null)
|
||||
{
|
||||
UpdatePromptVisibility(hasMoreDialogue);
|
||||
return;
|
||||
}
|
||||
|
||||
// Display the content based on its type
|
||||
currentContentType = content.ContentType;
|
||||
|
||||
if (content.ContentType == DialogueContentType.Text)
|
||||
{
|
||||
// Show text display, hide image display
|
||||
textDisplay.gameObject.SetActive(true);
|
||||
if (imageDisplay != null) imageDisplay.gameObject.SetActive(false);
|
||||
|
||||
// Display the text
|
||||
DisplayDialogueLine(content.Text, hasMoreDialogue);
|
||||
}
|
||||
else // Image content
|
||||
{
|
||||
// Hide text display, show image display
|
||||
textDisplay.gameObject.SetActive(false);
|
||||
if (imageDisplay != null) imageDisplay.gameObject.SetActive(true);
|
||||
|
||||
// Set the image
|
||||
SetImage(content.Image);
|
||||
|
||||
// After a delay, update the prompt visibility
|
||||
promptUpdateCoroutine = StartCoroutine(UpdatePromptAfterDelay(hasMoreDialogue));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 877344c7a0014922bc3a2a469e03792d
|
||||
timeCreated: 1759050622
|
||||
@@ -3,6 +3,7 @@ using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
using UnityEngine.InputSystem;
|
||||
using UnityEngine.SceneManagement;
|
||||
using AppleHills.Core.Settings; // Added for IInteractionSettings
|
||||
|
||||
namespace Input
|
||||
{
|
||||
@@ -44,6 +45,9 @@ namespace Input
|
||||
}
|
||||
}
|
||||
|
||||
// Settings reference
|
||||
private IInteractionSettings _interactionSettings;
|
||||
|
||||
private PlayerInput playerInput;
|
||||
private InputAction tapMoveAction;
|
||||
private InputAction holdMoveAction;
|
||||
@@ -55,6 +59,10 @@ namespace Input
|
||||
{
|
||||
_instance = this;
|
||||
// DontDestroyOnLoad(gameObject);
|
||||
|
||||
// Initialize settings reference
|
||||
_interactionSettings = GameManager.GetSettingsObject<IInteractionSettings>();
|
||||
|
||||
playerInput = GetComponent<PlayerInput>();
|
||||
if (playerInput == null)
|
||||
{
|
||||
@@ -217,7 +225,7 @@ namespace Input
|
||||
/// </summary>
|
||||
private bool TryDelegateToInteractable(Vector2 worldPos)
|
||||
{
|
||||
LayerMask mask = GameManager.Instance != null ? GameManager.Instance.InteractableLayerMask : -1;
|
||||
LayerMask mask = _interactionSettings != null ? _interactionSettings.InteractableLayerMask : -1;
|
||||
Collider2D hit = Physics2D.OverlapPoint(worldPos, mask);
|
||||
if (hit != null)
|
||||
{
|
||||
|
||||
58
Assets/Scripts/Interactions/CharacterMoveToTarget.cs
Normal file
@@ -0,0 +1,58 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace Interactions
|
||||
{
|
||||
/// <summary>
|
||||
/// Defines a target position for character movement during interaction.
|
||||
/// Attach this to an interactable object's child to specify where
|
||||
/// characters should move during interaction rather than using the default calculations.
|
||||
/// </summary>
|
||||
public class CharacterMoveToTarget : MonoBehaviour
|
||||
{
|
||||
[Tooltip("Which character this target position is for")]
|
||||
public CharacterToInteract characterType = CharacterToInteract.Pulver;
|
||||
|
||||
[Tooltip("Optional offset from this transform's position")]
|
||||
public Vector3 positionOffset = Vector3.zero;
|
||||
|
||||
/// <summary>
|
||||
/// Get the target position for this character to move to
|
||||
/// </summary>
|
||||
public Vector3 GetTargetPosition()
|
||||
{
|
||||
return transform.position + positionOffset;
|
||||
}
|
||||
|
||||
#if UNITY_EDITOR
|
||||
private void OnDrawGizmos()
|
||||
{
|
||||
// Draw a different colored sphere based on which character this target is for
|
||||
switch (characterType)
|
||||
{
|
||||
case CharacterToInteract.Trafalgar:
|
||||
Gizmos.color = new Color(0f, 0.5f, 1f, 0.8f); // Blue for player
|
||||
break;
|
||||
case CharacterToInteract.Pulver:
|
||||
Gizmos.color = new Color(1f, 0.5f, 0f, 0.8f); // Orange for follower
|
||||
break;
|
||||
case CharacterToInteract.Both:
|
||||
Gizmos.color = new Color(0.7f, 0f, 0.7f, 0.8f); // Purple for both
|
||||
break;
|
||||
default:
|
||||
Gizmos.color = new Color(0.5f, 0.5f, 0.5f, 0.8f); // Gray for none
|
||||
break;
|
||||
}
|
||||
|
||||
Vector3 targetPos = GetTargetPosition();
|
||||
Gizmos.DrawSphere(targetPos, 0.2f);
|
||||
|
||||
// Draw a line from the parent interactable to this target
|
||||
Interactable parentInteractable = GetComponentInParent<Interactable>();
|
||||
if (parentInteractable != null)
|
||||
{
|
||||
Gizmos.DrawLine(parentInteractable.transform.position, targetPos);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2bcf343b3ef74f0fb3c64be6fd2893b6
|
||||
timeCreated: 1759744130
|
||||
@@ -1,22 +1,27 @@
|
||||
using Input;
|
||||
using UnityEngine;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine.Events;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Interactions
|
||||
{
|
||||
public enum CharacterToInteract
|
||||
{
|
||||
None,
|
||||
Trafalgar,
|
||||
Pulver
|
||||
Pulver,
|
||||
Both
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents an interactable object that can respond to tap input events.
|
||||
/// </summary>
|
||||
public class Interactable : MonoBehaviour, ITouchInputConsumer
|
||||
{
|
||||
[Header("Interaction Settings")]
|
||||
public bool isOneTime = false;
|
||||
public bool isOneTime;
|
||||
public float cooldown = -1f;
|
||||
public CharacterToInteract characterToInteract = CharacterToInteract.Pulver;
|
||||
|
||||
@@ -30,15 +35,64 @@ namespace Interactions
|
||||
private bool _interactionInProgress;
|
||||
private PlayerTouchController _playerRef;
|
||||
private FollowerController _followerController;
|
||||
|
||||
private bool _isActive = true;
|
||||
private InteractionEventType _currentEventType;
|
||||
|
||||
// Action component system
|
||||
private List<InteractionActionBase> _registeredActions = new List<InteractionActionBase>();
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
// Subscribe to interactionComplete event
|
||||
interactionComplete.AddListener(OnInteractionComplete);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Register an action component with this interactable
|
||||
/// </summary>
|
||||
public void RegisterAction(InteractionActionBase action)
|
||||
{
|
||||
if (!_registeredActions.Contains(action))
|
||||
{
|
||||
_registeredActions.Add(action);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Unregister an action component from this interactable
|
||||
/// </summary>
|
||||
public void UnregisterAction(InteractionActionBase action)
|
||||
{
|
||||
_registeredActions.Remove(action);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Dispatch an interaction event to all registered actions and await their completion
|
||||
/// </summary>
|
||||
private async Task DispatchEventAsync(InteractionEventType eventType)
|
||||
{
|
||||
_currentEventType = eventType;
|
||||
|
||||
// Collect all tasks from actions that want to respond
|
||||
List<Task<bool>> tasks = new List<Task<bool>>();
|
||||
|
||||
foreach (var action in _registeredActions)
|
||||
{
|
||||
Task<bool> task = action.OnInteractionEvent(eventType, _playerRef, _followerController);
|
||||
if (task != null)
|
||||
{
|
||||
tasks.Add(task);
|
||||
}
|
||||
}
|
||||
|
||||
if (tasks.Count > 0)
|
||||
{
|
||||
// Wait for all tasks to complete
|
||||
await Task.WhenAll(tasks);
|
||||
}
|
||||
// If no tasks were added, the method will complete immediately (no need for await)
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handles tap input. Triggers interaction logic.
|
||||
/// </summary>
|
||||
@@ -50,11 +104,12 @@ namespace Interactions
|
||||
return;
|
||||
}
|
||||
Debug.Log($"[Interactable] OnTap at {worldPosition} on {gameObject.name}");
|
||||
// Broadcast interaction started event
|
||||
TryInteract();
|
||||
|
||||
// Start the interaction process asynchronously
|
||||
_ = TryInteractAsync();
|
||||
}
|
||||
|
||||
public void TryInteract()
|
||||
private async Task TryInteractAsync()
|
||||
{
|
||||
_interactionInProgress = true;
|
||||
|
||||
@@ -63,68 +118,302 @@ namespace Interactions
|
||||
|
||||
interactionStarted?.Invoke(_playerRef, _followerController);
|
||||
|
||||
// Dispatch the InteractionStarted event to action components
|
||||
await DispatchEventAsync(InteractionEventType.InteractionStarted);
|
||||
|
||||
// After all InteractionStarted actions complete, proceed to player movement
|
||||
await StartPlayerMovementAsync();
|
||||
}
|
||||
|
||||
private async Task StartPlayerMovementAsync()
|
||||
{
|
||||
if (_playerRef == null)
|
||||
{
|
||||
Debug.Log($"[Interactable] Player character could not be found. Aborting interaction.");
|
||||
interactionInterrupted.Invoke();
|
||||
await DispatchEventAsync(InteractionEventType.InteractionInterrupted);
|
||||
return;
|
||||
}
|
||||
|
||||
// If characterToInteract is None, immediately trigger the characterArrived event
|
||||
if (characterToInteract == CharacterToInteract.None)
|
||||
{
|
||||
await BroadcastCharacterArrivedAsync();
|
||||
return;
|
||||
}
|
||||
|
||||
// Compute closest point on the interaction radius
|
||||
Vector3 interactablePos = transform.position;
|
||||
Vector3 playerPos = _playerRef.transform.position;
|
||||
float stopDistance = characterToInteract == CharacterToInteract.Pulver
|
||||
? GameManager.Instance.PlayerStopDistance
|
||||
: GameManager.Instance.PlayerStopDistanceDirectInteraction;
|
||||
Vector3 toPlayer = (playerPos - interactablePos).normalized;
|
||||
Vector3 stopPoint = interactablePos + toPlayer * stopDistance;
|
||||
// Check for a CharacterMoveToTarget component for Trafalgar (player) or Both
|
||||
Vector3 stopPoint;
|
||||
bool customTargetFound = false;
|
||||
|
||||
CharacterMoveToTarget[] moveTargets = GetComponentsInChildren<CharacterMoveToTarget>();
|
||||
foreach (var target in moveTargets)
|
||||
{
|
||||
// Target is valid if it matches Trafalgar specifically or is set to Both
|
||||
if (target.characterType == CharacterToInteract.Trafalgar || target.characterType == CharacterToInteract.Both)
|
||||
{
|
||||
stopPoint = target.GetTargetPosition();
|
||||
customTargetFound = true;
|
||||
|
||||
// We need to wait for the player to arrive, so use a TaskCompletionSource
|
||||
var tcs = new TaskCompletionSource<bool>();
|
||||
|
||||
// Use local functions instead of circular lambda references
|
||||
void OnPlayerArrivedLocal()
|
||||
{
|
||||
// First remove both event handlers to prevent memory leaks
|
||||
if (_playerRef != null)
|
||||
{
|
||||
_playerRef.OnArrivedAtTarget -= OnPlayerArrivedLocal;
|
||||
_playerRef.OnMoveToCancelled -= OnPlayerMoveCancelledLocal;
|
||||
}
|
||||
|
||||
// Then continue with the interaction flow
|
||||
OnPlayerArrivedAsync().ContinueWith(_ => tcs.TrySetResult(true));
|
||||
}
|
||||
|
||||
void OnPlayerMoveCancelledLocal()
|
||||
{
|
||||
// First remove both event handlers to prevent memory leaks
|
||||
if (_playerRef != null)
|
||||
{
|
||||
_playerRef.OnArrivedAtTarget -= OnPlayerArrivedLocal;
|
||||
_playerRef.OnMoveToCancelled -= OnPlayerMoveCancelledLocal;
|
||||
}
|
||||
|
||||
// Then handle the cancellation
|
||||
OnPlayerMoveCancelledAsync().ContinueWith(_ => tcs.TrySetResult(false));
|
||||
}
|
||||
|
||||
// Unsubscribe previous handlers (if any)
|
||||
_playerRef.OnArrivedAtTarget -= OnPlayerArrived;
|
||||
_playerRef.OnMoveToCancelled -= OnPlayerMoveCancelled;
|
||||
|
||||
// Subscribe our new handlers
|
||||
_playerRef.OnArrivedAtTarget += OnPlayerArrivedLocal;
|
||||
_playerRef.OnMoveToCancelled += OnPlayerMoveCancelledLocal;
|
||||
|
||||
// Start the player movement
|
||||
_playerRef.MoveToAndNotify(stopPoint);
|
||||
|
||||
// Await player arrival
|
||||
await tcs.Task;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// If no custom target was found, use the default behavior
|
||||
if (!customTargetFound)
|
||||
{
|
||||
// Compute closest point on the interaction radius
|
||||
Vector3 interactablePos = transform.position;
|
||||
Vector3 playerPos = _playerRef.transform.position;
|
||||
float stopDistance = characterToInteract == CharacterToInteract.Pulver
|
||||
? GameManager.Instance.PlayerStopDistance
|
||||
: GameManager.Instance.PlayerStopDistanceDirectInteraction;
|
||||
Vector3 toPlayer = (playerPos - interactablePos).normalized;
|
||||
stopPoint = interactablePos + toPlayer * stopDistance;
|
||||
|
||||
// Unsubscribe previous to avoid duplicate calls
|
||||
_playerRef.OnArrivedAtTarget -= OnPlayerArrived;
|
||||
_playerRef.OnMoveToCancelled -= OnPlayerMoveCancelled;
|
||||
_playerRef.OnArrivedAtTarget += OnPlayerArrived;
|
||||
_playerRef.OnMoveToCancelled += OnPlayerMoveCancelled;
|
||||
_playerRef.MoveToAndNotify(stopPoint);
|
||||
// We need to wait for the player to arrive, so use a TaskCompletionSource
|
||||
var tcs = new TaskCompletionSource<bool>();
|
||||
|
||||
// Use local functions instead of circular lambda references
|
||||
void OnPlayerArrivedLocal()
|
||||
{
|
||||
// First remove both event handlers to prevent memory leaks
|
||||
if (_playerRef != null)
|
||||
{
|
||||
_playerRef.OnArrivedAtTarget -= OnPlayerArrivedLocal;
|
||||
_playerRef.OnMoveToCancelled -= OnPlayerMoveCancelledLocal;
|
||||
}
|
||||
|
||||
// Then continue with the interaction flow
|
||||
OnPlayerArrivedAsync().ContinueWith(_ => tcs.TrySetResult(true));
|
||||
}
|
||||
|
||||
void OnPlayerMoveCancelledLocal()
|
||||
{
|
||||
// First remove both event handlers to prevent memory leaks
|
||||
if (_playerRef != null)
|
||||
{
|
||||
_playerRef.OnArrivedAtTarget -= OnPlayerArrivedLocal;
|
||||
_playerRef.OnMoveToCancelled -= OnPlayerMoveCancelledLocal;
|
||||
}
|
||||
|
||||
// Then handle the cancellation
|
||||
OnPlayerMoveCancelledAsync().ContinueWith(_ => tcs.TrySetResult(false));
|
||||
}
|
||||
|
||||
// Unsubscribe previous handlers (if any)
|
||||
_playerRef.OnArrivedAtTarget -= OnPlayerArrived;
|
||||
_playerRef.OnMoveToCancelled -= OnPlayerMoveCancelled;
|
||||
|
||||
// Subscribe our new handlers
|
||||
_playerRef.OnArrivedAtTarget += OnPlayerArrivedLocal;
|
||||
_playerRef.OnMoveToCancelled += OnPlayerMoveCancelledLocal;
|
||||
|
||||
// Start the player movement
|
||||
_playerRef.MoveToAndNotify(stopPoint);
|
||||
|
||||
// Await player arrival
|
||||
await tcs.Task;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnPlayerMoveCancelled()
|
||||
private async Task OnPlayerMoveCancelledAsync()
|
||||
{
|
||||
_interactionInProgress = false;
|
||||
interactionInterrupted?.Invoke();
|
||||
await DispatchEventAsync(InteractionEventType.InteractionInterrupted);
|
||||
}
|
||||
|
||||
private void OnPlayerArrived()
|
||||
private async Task OnPlayerArrivedAsync()
|
||||
{
|
||||
if (!_interactionInProgress)
|
||||
return;
|
||||
|
||||
// Unsubscribe to avoid memory leaks
|
||||
_playerRef.OnArrivedAtTarget -= OnPlayerArrived;
|
||||
// Dispatch PlayerArrived event
|
||||
await DispatchEventAsync(InteractionEventType.PlayerArrived);
|
||||
|
||||
// After all PlayerArrived actions complete, proceed to character interaction
|
||||
await HandleCharacterInteractionAsync();
|
||||
}
|
||||
|
||||
private async Task HandleCharacterInteractionAsync()
|
||||
{
|
||||
if (characterToInteract == CharacterToInteract.Pulver)
|
||||
{
|
||||
_followerController.OnPickupArrived -= OnFollowerArrived;
|
||||
_followerController.OnPickupArrived += OnFollowerArrived;
|
||||
_followerController.GoToPointAndReturn(transform.position, _playerRef.transform);
|
||||
// We need to wait for the follower to arrive, so use a TaskCompletionSource
|
||||
var tcs = new TaskCompletionSource<bool>();
|
||||
|
||||
// Create a proper local function for the event handler
|
||||
void OnFollowerArrivedLocal()
|
||||
{
|
||||
// First remove the event handler to prevent memory leaks
|
||||
if (_followerController != null)
|
||||
{
|
||||
_followerController.OnPickupArrived -= OnFollowerArrivedLocal;
|
||||
}
|
||||
|
||||
// Then continue with the interaction flow
|
||||
OnFollowerArrivedAsync().ContinueWith(_ => tcs.TrySetResult(true));
|
||||
}
|
||||
|
||||
// Register our new local function handler
|
||||
_followerController.OnPickupArrived += OnFollowerArrivedLocal;
|
||||
|
||||
// Check for a CharacterMoveToTarget component for Pulver or Both
|
||||
Vector3 targetPosition = transform.position;
|
||||
CharacterMoveToTarget[] moveTargets = GetComponentsInChildren<CharacterMoveToTarget>();
|
||||
foreach (var target in moveTargets)
|
||||
{
|
||||
if (target.characterType == CharacterToInteract.Pulver || target.characterType == CharacterToInteract.Both)
|
||||
{
|
||||
targetPosition = target.GetTargetPosition();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Use the new GoToPoint method instead of GoToPointAndReturn
|
||||
_followerController.GoToPoint(targetPosition);
|
||||
|
||||
// Await follower arrival
|
||||
await tcs.Task;
|
||||
}
|
||||
else if (characterToInteract == CharacterToInteract.Trafalgar)
|
||||
{
|
||||
BroadcastCharacterArrived();
|
||||
await BroadcastCharacterArrivedAsync();
|
||||
}
|
||||
else if (characterToInteract == CharacterToInteract.Both)
|
||||
{
|
||||
// We need to wait for the follower to arrive, so use a TaskCompletionSource
|
||||
var tcs = new TaskCompletionSource<bool>();
|
||||
|
||||
// Create a proper local function for the event handler
|
||||
void OnFollowerArrivedLocal()
|
||||
{
|
||||
// First remove the event handler to prevent memory leaks
|
||||
if (_followerController != null)
|
||||
{
|
||||
_followerController.OnPickupArrived -= OnFollowerArrivedLocal;
|
||||
}
|
||||
|
||||
// Then continue with the interaction flow
|
||||
OnFollowerArrivedAsync().ContinueWith(_ => tcs.TrySetResult(true));
|
||||
}
|
||||
|
||||
// Register our new local function handler
|
||||
_followerController.OnPickupArrived += OnFollowerArrivedLocal;
|
||||
|
||||
// Check for a CharacterMoveToTarget component for Pulver or Both
|
||||
Vector3 targetPosition = transform.position;
|
||||
CharacterMoveToTarget[] moveTargets = GetComponentsInChildren<CharacterMoveToTarget>();
|
||||
foreach (var target in moveTargets)
|
||||
{
|
||||
if (target.characterType == CharacterToInteract.Pulver || target.characterType == CharacterToInteract.Both)
|
||||
{
|
||||
targetPosition = target.GetTargetPosition();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Use the new GoToPoint method instead of GoToPointAndReturn
|
||||
_followerController.GoToPoint(targetPosition);
|
||||
|
||||
// Await follower arrival
|
||||
await tcs.Task;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnFollowerArrived()
|
||||
private async Task OnFollowerArrivedAsync()
|
||||
{
|
||||
if (!_interactionInProgress)
|
||||
return;
|
||||
|
||||
// Unsubscribe to avoid memory leaks
|
||||
_followerController.OnPickupArrived -= OnFollowerArrived;
|
||||
// Dispatch InteractingCharacterArrived event and WAIT for all actions to complete
|
||||
// This ensures we wait for any timeline animations to finish before proceeding
|
||||
Debug.Log("[Interactable] Follower arrived, dispatching InteractingCharacterArrived event and waiting for completion");
|
||||
await DispatchEventAsync(InteractionEventType.InteractingCharacterArrived);
|
||||
Debug.Log("[Interactable] All InteractingCharacterArrived actions completed, proceeding with interaction");
|
||||
|
||||
BroadcastCharacterArrived();
|
||||
// Check if we have any components that might have paused the interaction flow
|
||||
bool hasTimelineActions = false;
|
||||
foreach (var action in _registeredActions)
|
||||
{
|
||||
if (action is InteractionTimelineAction timelineAction &&
|
||||
timelineAction.respondToEvents.Contains(InteractionEventType.InteractingCharacterArrived) &&
|
||||
timelineAction.pauseInteractionFlow)
|
||||
{
|
||||
hasTimelineActions = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Tell the follower to return to the player
|
||||
if (_followerController != null && _playerRef != null)
|
||||
{
|
||||
_followerController.ReturnToPlayer(_playerRef.transform);
|
||||
}
|
||||
|
||||
// After all InteractingCharacterArrived actions complete, proceed to character arrived
|
||||
await BroadcastCharacterArrivedAsync();
|
||||
}
|
||||
|
||||
private void BroadcastCharacterArrived()
|
||||
// Legacy non-async method to maintain compatibility with existing code
|
||||
private void OnPlayerArrived()
|
||||
{
|
||||
// This is now just a wrapper for the async version
|
||||
_ = OnPlayerArrivedAsync();
|
||||
}
|
||||
|
||||
// Legacy non-async method to maintain compatibility with existing code
|
||||
private void OnPlayerMoveCancelled()
|
||||
{
|
||||
// This is now just a wrapper for the async version
|
||||
_ = OnPlayerMoveCancelledAsync();
|
||||
}
|
||||
|
||||
private async Task BroadcastCharacterArrivedAsync()
|
||||
{
|
||||
// Check for ObjectiveStepBehaviour and lock state
|
||||
var step = GetComponent<PuzzleS.ObjectiveStepBehaviour>();
|
||||
@@ -138,16 +427,24 @@ namespace Interactions
|
||||
_followerController = null;
|
||||
return;
|
||||
}
|
||||
|
||||
// Dispatch CharacterArrived event
|
||||
// await DispatchEventAsync(InteractionEventType.InteractingCharacterArrived);
|
||||
|
||||
// Broadcast appropriate event
|
||||
characterArrived?.Invoke();
|
||||
|
||||
// Reset variables for next time
|
||||
_interactionInProgress = false;
|
||||
_playerRef = null;
|
||||
_followerController = null;
|
||||
}
|
||||
|
||||
private void OnInteractionComplete(bool success)
|
||||
private async void OnInteractionComplete(bool success)
|
||||
{
|
||||
// Dispatch InteractionComplete event
|
||||
await DispatchEventAsync(InteractionEventType.InteractionComplete);
|
||||
|
||||
if (success)
|
||||
{
|
||||
if (isOneTime)
|
||||
|
||||
91
Assets/Scripts/Interactions/InteractionActionBase.cs
Normal file
@@ -0,0 +1,91 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Input;
|
||||
|
||||
namespace Interactions
|
||||
{
|
||||
/// <summary>
|
||||
/// Base class for all interaction action components
|
||||
/// These components respond to interaction events and can control the interaction flow
|
||||
/// </summary>
|
||||
public abstract class InteractionActionBase : MonoBehaviour
|
||||
{
|
||||
[Tooltip("Which interaction events this action should respond to")]
|
||||
public List<InteractionEventType> respondToEvents = new List<InteractionEventType>();
|
||||
|
||||
[Tooltip("Whether the interaction flow should wait for this action to complete")]
|
||||
public bool pauseInteractionFlow = true;
|
||||
|
||||
protected Interactable parentInteractable;
|
||||
|
||||
protected virtual void Awake()
|
||||
{
|
||||
// Get the parent interactable component
|
||||
parentInteractable = GetComponentInParent<Interactable>();
|
||||
|
||||
if (parentInteractable == null)
|
||||
{
|
||||
Debug.LogError($"[{GetType().Name}] Cannot find parent Interactable component!");
|
||||
enabled = false;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void OnEnable()
|
||||
{
|
||||
if (parentInteractable != null)
|
||||
{
|
||||
parentInteractable.RegisterAction(this);
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void OnDisable()
|
||||
{
|
||||
if (parentInteractable != null)
|
||||
{
|
||||
parentInteractable.UnregisterAction(this);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called when an interaction event occurs that this action is registered for
|
||||
/// </summary>
|
||||
/// <param name="eventType">The type of event that occurred</param>
|
||||
/// <returns>A task that completes when the action is finished, or null if action won't execute</returns>
|
||||
public Task<bool> OnInteractionEvent(InteractionEventType eventType, PlayerTouchController player, FollowerController follower)
|
||||
{
|
||||
if (respondToEvents.Contains(eventType) && ShouldExecute(eventType, player, follower))
|
||||
{
|
||||
if (pauseInteractionFlow)
|
||||
{
|
||||
return ExecuteAsync(eventType, player, follower);
|
||||
}
|
||||
else
|
||||
{
|
||||
// If we don't need to pause the flow, execute in the background
|
||||
// and return a completed task
|
||||
_ = ExecuteAsync(eventType, player, follower);
|
||||
return Task.FromResult(false);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Execute the action for the given event asynchronously
|
||||
/// </summary>
|
||||
protected abstract Task<bool> ExecuteAsync(InteractionEventType eventType, PlayerTouchController player, FollowerController follower);
|
||||
|
||||
/// <summary>
|
||||
/// Called to determine if this action should execute for the given event
|
||||
/// Override this to add additional conditions for execution
|
||||
/// </summary>
|
||||
protected virtual bool ShouldExecute(InteractionEventType eventType, PlayerTouchController player, FollowerController follower)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5cf351d32dac4169a9db20609727a70f
|
||||
timeCreated: 1759746705
|
||||
16
Assets/Scripts/Interactions/InteractionEventType.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
using System;
|
||||
|
||||
namespace Interactions
|
||||
{
|
||||
/// <summary>
|
||||
/// Defines the different types of events that can occur during an interaction
|
||||
/// </summary>
|
||||
public enum InteractionEventType
|
||||
{
|
||||
InteractionStarted,
|
||||
PlayerArrived,
|
||||
InteractingCharacterArrived,
|
||||
InteractionComplete,
|
||||
InteractionInterrupted
|
||||
}
|
||||
}
|
||||
3
Assets/Scripts/Interactions/InteractionEventType.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 78684d31bd4d4636834a494c7cb74f48
|
||||
timeCreated: 1759746690
|
||||
258
Assets/Scripts/Interactions/InteractionTimelineAction.cs
Normal file
@@ -0,0 +1,258 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Playables;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Input;
|
||||
|
||||
namespace Interactions
|
||||
{
|
||||
/// <summary>
|
||||
/// Component that plays timeline animations in response to interaction events
|
||||
/// </summary>
|
||||
[RequireComponent(typeof(PlayableDirector))]
|
||||
public class InteractionTimelineAction : InteractionActionBase
|
||||
{
|
||||
[System.Serializable]
|
||||
public class TimelineEventMapping
|
||||
{
|
||||
public InteractionEventType eventType;
|
||||
public PlayableAsset[] timelines;
|
||||
|
||||
[Tooltip("Whether to bind the player character to the track named 'Player'")]
|
||||
public bool bindPlayerCharacter = false;
|
||||
|
||||
[Tooltip("Whether to bind the follower character to the track named 'Pulver'")]
|
||||
public bool bindPulverCharacter = false;
|
||||
|
||||
[Tooltip("Custom track name for player character binding")]
|
||||
public string playerTrackName = "Player";
|
||||
|
||||
[Tooltip("Custom track name for follower character binding")]
|
||||
public string pulverTrackName = "Pulver";
|
||||
|
||||
[Tooltip("Time in seconds before the timeline is automatically completed (safety feature)")]
|
||||
public float timeoutSeconds = 30f;
|
||||
|
||||
[Tooltip("Whether to loop the last timeline in the sequence")]
|
||||
public bool loopLast = false;
|
||||
|
||||
[Tooltip("Whether to loop through all timelines in the sequence")]
|
||||
public bool loopAll = false;
|
||||
|
||||
// Helper property to check if we have valid timelines
|
||||
public bool HasValidTimelines => timelines != null && timelines.Length > 0 && timelines[0] != null;
|
||||
}
|
||||
|
||||
[Header("Timeline Configuration")] [SerializeField]
|
||||
private PlayableDirector playableDirector;
|
||||
|
||||
[SerializeField] private TimelineEventMapping[] timelineMappings;
|
||||
|
||||
private TaskCompletionSource<bool> _currentPlaybackTCS;
|
||||
private int _currentTimelineIndex = 0;
|
||||
private TimelineEventMapping _currentMapping = null;
|
||||
|
||||
protected override void Awake()
|
||||
{
|
||||
base.Awake();
|
||||
|
||||
if (playableDirector == null)
|
||||
{
|
||||
playableDirector = GetComponent<PlayableDirector>();
|
||||
}
|
||||
|
||||
if (playableDirector == null)
|
||||
{
|
||||
Debug.LogError("[InteractionTimelineAction] PlayableDirector component is missing!");
|
||||
enabled = false;
|
||||
return;
|
||||
}
|
||||
|
||||
// Subscribe to the director's stopped event
|
||||
playableDirector.stopped += OnPlayableDirectorStopped;
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
if (playableDirector != null)
|
||||
{
|
||||
playableDirector.stopped -= OnPlayableDirectorStopped;
|
||||
}
|
||||
}
|
||||
|
||||
protected override async Task<bool> ExecuteAsync(InteractionEventType eventType, PlayerTouchController player,
|
||||
FollowerController follower)
|
||||
{
|
||||
// Find the timeline for this event type
|
||||
TimelineEventMapping mapping = Array.Find(timelineMappings, m => m.eventType == eventType);
|
||||
|
||||
if (mapping == null || !mapping.HasValidTimelines)
|
||||
{
|
||||
// No timeline configured for this event
|
||||
return true;
|
||||
}
|
||||
|
||||
_currentMapping = mapping;
|
||||
// _currentTimelineIndex = 0;
|
||||
|
||||
return await PlayTimelineSequence(player, follower);
|
||||
}
|
||||
|
||||
private async Task<bool> PlayTimelineSequence(PlayerTouchController player, FollowerController follower)
|
||||
{
|
||||
if (_currentMapping == null || !_currentMapping.HasValidTimelines)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
follower.DropHeldItemAt(follower.transform.position);
|
||||
|
||||
// Play the current timeline in the sequence
|
||||
bool result = await PlaySingleTimeline(_currentMapping.timelines[_currentTimelineIndex], _currentMapping, player, follower);
|
||||
|
||||
// Return false if the playback failed
|
||||
if (!result)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Increment the timeline index for next playback
|
||||
_currentTimelineIndex++;
|
||||
|
||||
// Check if we've reached the end of the sequence
|
||||
if (_currentTimelineIndex >= _currentMapping.timelines.Length)
|
||||
{
|
||||
// If loop all is enabled, start over
|
||||
if (_currentMapping.loopAll)
|
||||
{
|
||||
_currentTimelineIndex = 0;
|
||||
// Don't continue automatically, wait for next interaction
|
||||
return true;
|
||||
}
|
||||
// If loop last is enabled, replay the last timeline
|
||||
else if (_currentMapping.loopLast)
|
||||
{
|
||||
_currentTimelineIndex = _currentMapping.timelines.Length - 1;
|
||||
// Don't continue automatically, wait for next interaction
|
||||
return true;
|
||||
}
|
||||
// Otherwise, we're done with the sequence
|
||||
else
|
||||
{
|
||||
_currentTimelineIndex = 0;
|
||||
_currentMapping = null;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// If we have more timelines in the sequence, we're done for now
|
||||
// Next interaction will pick up where we left off
|
||||
return true;
|
||||
}
|
||||
|
||||
private async Task<bool> PlaySingleTimeline(PlayableAsset timelineAsset, TimelineEventMapping mapping,
|
||||
PlayerTouchController player, FollowerController follower)
|
||||
{
|
||||
if (timelineAsset == null)
|
||||
{
|
||||
Debug.LogWarning("[InteractionTimelineAction] Timeline asset is null");
|
||||
return true; // Return true to continue the interaction flow
|
||||
}
|
||||
|
||||
// Set the timeline asset
|
||||
playableDirector.playableAsset = timelineAsset;
|
||||
|
||||
// Bind characters if needed
|
||||
if (mapping.bindPlayerCharacter && player != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
var trackOutput = playableDirector.playableAsset.outputs.FirstOrDefault(o => o.streamName == mapping.playerTrackName);
|
||||
if (trackOutput.sourceObject != null)
|
||||
{
|
||||
playableDirector.SetGenericBinding(trackOutput.sourceObject, player.gameObject);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogWarning($"[InteractionTimelineAction] Could not find track named '{mapping.playerTrackName}' for player binding");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.LogError($"[InteractionTimelineAction] Error binding player to timeline: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
if (mapping.bindPulverCharacter && follower != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
var trackOutput = playableDirector.playableAsset.outputs.FirstOrDefault(o => o.streamName == mapping.pulverTrackName);
|
||||
if (trackOutput.sourceObject != null)
|
||||
{
|
||||
playableDirector.SetGenericBinding(trackOutput.sourceObject, follower.gameObject);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogWarning($"[InteractionTimelineAction] Could not find track named '{mapping.pulverTrackName}' for follower binding");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.LogError($"[InteractionTimelineAction] Error binding follower to timeline: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
// Create a task completion source to await the timeline completion
|
||||
_currentPlaybackTCS = new TaskCompletionSource<bool>();
|
||||
|
||||
// Register for the stopped event if not already registered
|
||||
playableDirector.stopped -= OnPlayableDirectorStopped;
|
||||
playableDirector.stopped += OnPlayableDirectorStopped;
|
||||
|
||||
// Log the timeline playback
|
||||
Debug.Log($"[InteractionTimelineAction] Playing timeline {timelineAsset.name} for event {mapping.eventType}");
|
||||
|
||||
// Play the timeline
|
||||
playableDirector.Play();
|
||||
|
||||
// Start a timeout coroutine for safety using the mapping's timeout
|
||||
StartCoroutine(TimeoutCoroutine(mapping.timeoutSeconds));
|
||||
|
||||
// Await the timeline completion (will be signaled by the OnPlayableDirectorStopped callback)
|
||||
bool result = await _currentPlaybackTCS.Task;
|
||||
|
||||
// Log completion
|
||||
Debug.Log($"[InteractionTimelineAction] Timeline {timelineAsset.name} playback completed with result: {result}");
|
||||
|
||||
// Clear the task completion source
|
||||
_currentPlaybackTCS = null;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private void OnPlayableDirectorStopped(PlayableDirector director)
|
||||
{
|
||||
if (director != playableDirector || _currentPlaybackTCS == null)
|
||||
return;
|
||||
|
||||
Debug.Log($"[InteractionTimelineAction] PlayableDirector stopped. Signaling completion.");
|
||||
|
||||
// Signal completion when the director stops
|
||||
_currentPlaybackTCS.TrySetResult(true);
|
||||
}
|
||||
|
||||
private System.Collections.IEnumerator TimeoutCoroutine(float timeoutDuration)
|
||||
{
|
||||
yield return new WaitForSeconds(timeoutDuration);
|
||||
|
||||
// If the TCS still exists after timeout, complete it with failure
|
||||
if (_currentPlaybackTCS != null)
|
||||
{
|
||||
Debug.LogWarning($"[InteractionTimelineAction] Timeline playback timed out after {timeoutDuration} seconds");
|
||||
_currentPlaybackTCS.TrySetResult(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 42e77a0c97604b6eb7674e58726c831a
|
||||
timeCreated: 1759746720
|
||||
@@ -3,6 +3,7 @@ using UnityEngine;
|
||||
using UnityEngine.Events;
|
||||
using System; // for Action<T>
|
||||
using Core; // register with ItemManager
|
||||
using AppleHills.Core.Settings; // Added for IInteractionSettings
|
||||
|
||||
namespace Interactions
|
||||
{
|
||||
@@ -24,6 +25,10 @@ namespace Interactions
|
||||
// Tracks the current state of the slotted item
|
||||
private ItemSlotState _currentState = ItemSlotState.None;
|
||||
|
||||
// Settings reference
|
||||
private IInteractionSettings _interactionSettings;
|
||||
private IPlayerFollowerSettings _playerFollowerSettings;
|
||||
|
||||
/// <summary>
|
||||
/// Read-only access to the current slotted item state.
|
||||
/// </summary>
|
||||
@@ -64,13 +69,22 @@ namespace Interactions
|
||||
}
|
||||
}
|
||||
|
||||
public override void Awake()
|
||||
{
|
||||
base.Awake();
|
||||
|
||||
// Initialize settings references
|
||||
_interactionSettings = GameManager.GetSettingsObject<IInteractionSettings>();
|
||||
_playerFollowerSettings = GameManager.GetSettingsObject<IPlayerFollowerSettings>();
|
||||
}
|
||||
|
||||
protected override void OnCharacterArrived()
|
||||
{
|
||||
Debug.Log("[ItemSlot] OnCharacterArrived");
|
||||
|
||||
var heldItemData = FollowerController.CurrentlyHeldItemData;
|
||||
var heldItemObj = FollowerController.GetHeldPickupObject();
|
||||
var config = GameManager.Instance.GetSlotItemConfig(itemData);
|
||||
var config = _interactionSettings?.GetSlotItemConfig(itemData);
|
||||
var forbidden = config?.forbiddenItems ?? new List<PickupItemData>();
|
||||
|
||||
// Held item, slot empty -> try to slot item
|
||||
@@ -120,7 +134,7 @@ namespace Interactions
|
||||
{
|
||||
slottedItemRenderer.sprite = _currentlySlottedItemData.mapSprite;
|
||||
// Scale sprite to desired height, preserve aspect ratio, compensate for parent scale
|
||||
float desiredHeight = GameManager.Instance.HeldIconDisplayHeight;
|
||||
float desiredHeight = _playerFollowerSettings?.HeldIconDisplayHeight ?? 2.0f;
|
||||
var sprite = _currentlySlottedItemData.mapSprite;
|
||||
float spriteHeight = sprite.bounds.size.y;
|
||||
float spriteWidth = sprite.bounds.size.x;
|
||||
@@ -175,7 +189,7 @@ namespace Interactions
|
||||
|
||||
// Once an item is slotted, we know it is not forbidden, so we can skip that check, but now check if it was
|
||||
// the correct item we're looking for
|
||||
var config = GameManager.Instance.GetSlotItemConfig(itemData);
|
||||
var config = _interactionSettings?.GetSlotItemConfig(itemData);
|
||||
var allowed = config?.allowedItems ?? new List<PickupItemData>();
|
||||
if (itemToSlotData != null && PickupItemData.ListContainsEquivalent(allowed, itemToSlotData))
|
||||
{
|
||||
|
||||
@@ -26,7 +26,7 @@ namespace Interactions
|
||||
/// <summary>
|
||||
/// Unity Awake callback. Sets up icon, interactable, and event handlers.
|
||||
/// </summary>
|
||||
void Awake()
|
||||
public virtual void Awake()
|
||||
{
|
||||
if (iconRenderer == null)
|
||||
iconRenderer = GetComponent<SpriteRenderer>();
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
using Input;
|
||||
using Interactions;
|
||||
using UnityEngine;
|
||||
using AppleHills.Core.Settings; // Added for IInteractionSettings
|
||||
|
||||
/// <summary>
|
||||
/// Handles level switching when interacted with. Applies switch data and triggers scene transitions.
|
||||
@@ -14,6 +15,9 @@ public class LevelSwitch : MonoBehaviour
|
||||
public LevelSwitchData switchData;
|
||||
private SpriteRenderer _iconRenderer;
|
||||
private Interactable _interactable;
|
||||
|
||||
// Settings reference
|
||||
private IInteractionSettings _interactionSettings;
|
||||
|
||||
private bool _isActive = true;
|
||||
|
||||
@@ -30,6 +34,10 @@ public class LevelSwitch : MonoBehaviour
|
||||
{
|
||||
_interactable.characterArrived.AddListener(OnCharacterArrived);
|
||||
}
|
||||
|
||||
// Initialize settings reference
|
||||
_interactionSettings = GameManager.GetSettingsObject<IInteractionSettings>();
|
||||
|
||||
ApplySwitchData();
|
||||
}
|
||||
|
||||
@@ -78,10 +86,10 @@ public class LevelSwitch : MonoBehaviour
|
||||
if (switchData == null || string.IsNullOrEmpty(switchData.targetLevelSceneName) || !_isActive)
|
||||
return;
|
||||
|
||||
var menuPrefab = GameManager.Instance.LevelSwitchMenuPrefab;
|
||||
var menuPrefab = _interactionSettings?.LevelSwitchMenuPrefab;
|
||||
if (menuPrefab == null)
|
||||
{
|
||||
Debug.LogError("LevelSwitchMenu prefab not assigned in GameSettings!");
|
||||
Debug.LogError("LevelSwitchMenu prefab not assigned in InteractionSettings!");
|
||||
return;
|
||||
}
|
||||
// Spawn the menu overlay (assume Canvas parent is handled in prefab setup)
|
||||
|
||||
@@ -3,6 +3,7 @@ using UnityEngine;
|
||||
using Pathfinding;
|
||||
using UnityEngine.SceneManagement;
|
||||
using Utils;
|
||||
using AppleHills.Core.Settings;
|
||||
|
||||
/// <summary>
|
||||
/// Controls the follower character, including following the player, handling pickups, and managing held items.
|
||||
@@ -20,6 +21,10 @@ public class FollowerController: MonoBehaviour
|
||||
/// </summary>
|
||||
public float manualMoveSmooth = 8f;
|
||||
|
||||
// Settings reference
|
||||
private IPlayerFollowerSettings _settings;
|
||||
private IInteractionSettings _interactionSettings;
|
||||
|
||||
private GameObject _playerRef;
|
||||
private Transform _playerTransform;
|
||||
private AIPath _playerAIPath;
|
||||
@@ -80,6 +85,10 @@ public class FollowerController: MonoBehaviour
|
||||
_animator = GetComponentInChildren<Animator>(); // fallback
|
||||
_spriteRenderer = GetComponentInChildren<SpriteRenderer>();
|
||||
}
|
||||
|
||||
// Initialize settings references
|
||||
_settings = GameManager.GetSettingsObject<IPlayerFollowerSettings>();
|
||||
_interactionSettings = GameManager.GetSettingsObject<IInteractionSettings>();
|
||||
}
|
||||
|
||||
void OnEnable()
|
||||
@@ -108,7 +117,7 @@ public class FollowerController: MonoBehaviour
|
||||
}
|
||||
|
||||
_timer += Time.deltaTime;
|
||||
if (_timer >= GameManager.Instance.FollowUpdateInterval)
|
||||
if (_timer >= _settings.FollowUpdateInterval)
|
||||
{
|
||||
_timer = 0f;
|
||||
UpdateFollowTarget();
|
||||
@@ -120,24 +129,24 @@ public class FollowerController: MonoBehaviour
|
||||
Vector2 target2D = new Vector2(_targetPoint.x, _targetPoint.y);
|
||||
float dist = Vector2.Distance(current2D, target2D);
|
||||
float minSpeed = _followerMaxSpeed * 0.3f;
|
||||
float lerpFactor = GameManager.Instance.ManualMoveSmooth * Time.deltaTime;
|
||||
float lerpFactor = _settings.ManualMoveSmooth * Time.deltaTime;
|
||||
float targetSpeed = 0f;
|
||||
if (dist > GameManager.Instance.StopThreshold)
|
||||
if (dist > _settings.StopThreshold)
|
||||
{
|
||||
if (dist > GameManager.Instance.ThresholdFar)
|
||||
if (dist > _settings.ThresholdFar)
|
||||
{
|
||||
targetSpeed = _followerMaxSpeed;
|
||||
}
|
||||
else if (dist > GameManager.Instance.ThresholdNear && dist <= GameManager.Instance.ThresholdFar)
|
||||
else if (dist > _settings.ThresholdNear && dist <= _settings.ThresholdFar)
|
||||
{
|
||||
targetSpeed = _followerMaxSpeed;
|
||||
}
|
||||
else if (dist > GameManager.Instance.StopThreshold && dist <= GameManager.Instance.ThresholdNear)
|
||||
else if (dist > _settings.StopThreshold && dist <= _settings.ThresholdNear)
|
||||
{
|
||||
targetSpeed = minSpeed;
|
||||
}
|
||||
_currentSpeed = Mathf.Lerp(_currentSpeed, targetSpeed, lerpFactor);
|
||||
if (dist > GameManager.Instance.StopThreshold && dist <= GameManager.Instance.ThresholdNear)
|
||||
if (dist > _settings.StopThreshold && dist <= _settings.ThresholdNear)
|
||||
{
|
||||
_currentSpeed = Mathf.Max(_currentSpeed, minSpeed);
|
||||
}
|
||||
@@ -215,7 +224,7 @@ public class FollowerController: MonoBehaviour
|
||||
{
|
||||
_playerMaxSpeed = _playerAIPath.maxSpeed;
|
||||
_defaultFollowerMaxSpeed = _playerMaxSpeed;
|
||||
_followerMaxSpeed = _playerMaxSpeed * GameManager.Instance.FollowerSpeedMultiplier;
|
||||
_followerMaxSpeed = _playerMaxSpeed * _settings.FollowerSpeedMultiplier;
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -258,8 +267,8 @@ public class FollowerController: MonoBehaviour
|
||||
{
|
||||
moveDir = _lastMoveDir;
|
||||
}
|
||||
// Use GameSettings for followDistance
|
||||
_targetPoint = playerPos - moveDir * GameManager.Instance.FollowDistance;
|
||||
// Use settings for followDistance
|
||||
_targetPoint = playerPos - moveDir * _settings.FollowDistance;
|
||||
_targetPoint.z = 0;
|
||||
if (_aiPath != null)
|
||||
{
|
||||
@@ -268,25 +277,22 @@ public class FollowerController: MonoBehaviour
|
||||
}
|
||||
}
|
||||
|
||||
// Command follower to go to a specific point (pathfinding mode)
|
||||
/// <summary>
|
||||
/// Command follower to go to a specific point (pathfinding mode).
|
||||
/// Make the follower move to a specific point only. Will not automatically return.
|
||||
/// </summary>
|
||||
/// <param name="worldPosition">The world position to move to.</param>
|
||||
public void GoToPoint(Vector2 worldPosition)
|
||||
/// <param name="targetPosition">The position to move to.</param>
|
||||
public void GoToPoint(Vector2 targetPosition)
|
||||
{
|
||||
_isManualFollowing = false;
|
||||
if (_pickupCoroutine != null)
|
||||
StopCoroutine(_pickupCoroutine);
|
||||
if (_aiPath != null)
|
||||
{
|
||||
_aiPath.enabled = true;
|
||||
_aiPath.maxSpeed = _followerMaxSpeed;
|
||||
_aiPath.destination = new Vector3(worldPosition.x, worldPosition.y, 0);
|
||||
}
|
||||
_pickupCoroutine = StartCoroutine(GoToPointSequence(targetPosition));
|
||||
}
|
||||
|
||||
// Command follower to go to a specific point and return to player
|
||||
/// <summary>
|
||||
/// Command follower to go to a specific point and return to player.
|
||||
/// Command follower to go to a specific point and return to player after a brief delay.
|
||||
/// Legacy method that combines GoToPoint and ReturnToPlayer for backward compatibility.
|
||||
/// </summary>
|
||||
/// <param name="itemPosition">The position of the item to pick up.</param>
|
||||
/// <param name="playerTransform">The transform of the player.</param>
|
||||
@@ -299,6 +305,19 @@ public class FollowerController: MonoBehaviour
|
||||
_pickupCoroutine = StartCoroutine(PickupSequence(itemPosition, playerTransform));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Make the follower return to the player after it has reached a point.
|
||||
/// </summary>
|
||||
/// <param name="playerTransform">The transform of the player to return to.</param>
|
||||
public void ReturnToPlayer(Transform playerTransform)
|
||||
{
|
||||
if (_pickupCoroutine != null)
|
||||
StopCoroutine(_pickupCoroutine);
|
||||
if (_aiPath != null)
|
||||
_aiPath.maxSpeed = _followerMaxSpeed;
|
||||
_pickupCoroutine = StartCoroutine(ReturnToPlayerSequence(playerTransform));
|
||||
}
|
||||
|
||||
private System.Collections.IEnumerator PickupSequence(Vector2 itemPosition, Transform playerTransform)
|
||||
{
|
||||
_isManualFollowing = false;
|
||||
@@ -310,14 +329,14 @@ public class FollowerController: MonoBehaviour
|
||||
_aiPath.destination = new Vector3(itemPosition.x, itemPosition.y, 0);
|
||||
}
|
||||
// Wait until follower reaches item (2D distance)
|
||||
while (Vector2.Distance(new Vector2(transform.position.x, transform.position.y), new Vector2(itemPosition.x, itemPosition.y)) > GameManager.Instance.StopThreshold)
|
||||
while (Vector2.Distance(new Vector2(transform.position.x, transform.position.y), new Vector2(itemPosition.x, itemPosition.y)) > _settings.StopThreshold)
|
||||
{
|
||||
yield return null;
|
||||
}
|
||||
OnPickupArrived?.Invoke();
|
||||
|
||||
// Wait briefly, then return to player
|
||||
yield return new WaitForSeconds(0.2f);
|
||||
yield return new WaitForSeconds(_interactionSettings.FollowerPickupDelay);
|
||||
if (_aiPath != null && playerTransform != null)
|
||||
{
|
||||
_aiPath.maxSpeed = _followerMaxSpeed;
|
||||
@@ -325,7 +344,7 @@ public class FollowerController: MonoBehaviour
|
||||
}
|
||||
_isReturningToPlayer = true;
|
||||
// Wait until follower returns to player (2D distance)
|
||||
while (playerTransform != null && Vector2.Distance(new Vector2(transform.position.x, transform.position.y), new Vector2(playerTransform.position.x, playerTransform.position.y)) > GameManager.Instance.StopThreshold)
|
||||
while (playerTransform != null && Vector2.Distance(new Vector2(transform.position.x, transform.position.y), new Vector2(playerTransform.position.x, playerTransform.position.y)) > _settings.StopThreshold)
|
||||
{
|
||||
yield return null;
|
||||
}
|
||||
@@ -340,6 +359,63 @@ public class FollowerController: MonoBehaviour
|
||||
_aiPath.enabled = false;
|
||||
_pickupCoroutine = null;
|
||||
}
|
||||
|
||||
private System.Collections.IEnumerator GoToPointSequence(Vector2 targetPosition)
|
||||
{
|
||||
_isManualFollowing = false;
|
||||
_isReturningToPlayer = false;
|
||||
|
||||
if (_aiPath != null)
|
||||
{
|
||||
_aiPath.enabled = true;
|
||||
_aiPath.maxSpeed = _followerMaxSpeed;
|
||||
_aiPath.destination = new Vector3(targetPosition.x, targetPosition.y, 0);
|
||||
}
|
||||
|
||||
// Wait until follower reaches target
|
||||
while (Vector2.Distance(new Vector2(transform.position.x, transform.position.y),
|
||||
new Vector2(targetPosition.x, targetPosition.y)) > _settings.StopThreshold)
|
||||
{
|
||||
yield return null;
|
||||
}
|
||||
|
||||
// Signal arrival
|
||||
OnPickupArrived?.Invoke();
|
||||
|
||||
_pickupCoroutine = null;
|
||||
}
|
||||
|
||||
private System.Collections.IEnumerator ReturnToPlayerSequence(Transform playerTransform)
|
||||
{
|
||||
if (_aiPath != null && playerTransform != null)
|
||||
{
|
||||
_aiPath.maxSpeed = _followerMaxSpeed;
|
||||
_aiPath.destination = playerTransform.position;
|
||||
}
|
||||
|
||||
_isReturningToPlayer = true;
|
||||
|
||||
// Wait until follower returns to player
|
||||
while (playerTransform != null &&
|
||||
Vector2.Distance(new Vector2(transform.position.x, transform.position.y),
|
||||
new Vector2(playerTransform.position.x, playerTransform.position.y)) > _settings.StopThreshold)
|
||||
{
|
||||
yield return null;
|
||||
}
|
||||
|
||||
_isReturningToPlayer = false;
|
||||
OnPickupReturned?.Invoke();
|
||||
|
||||
// Reset follower speed to normal after pickup
|
||||
_followerMaxSpeed = _defaultFollowerMaxSpeed;
|
||||
if (_aiPath != null)
|
||||
_aiPath.maxSpeed = _followerMaxSpeed;
|
||||
_isManualFollowing = true;
|
||||
if (_aiPath != null)
|
||||
_aiPath.enabled = false;
|
||||
|
||||
_pickupCoroutine = null;
|
||||
}
|
||||
#endregion Movement
|
||||
|
||||
#region ItemInteractions
|
||||
@@ -375,15 +451,18 @@ public class FollowerController: MonoBehaviour
|
||||
{
|
||||
return CombinationResult.NotApplicable;
|
||||
}
|
||||
var rule = GameManager.Instance.GetCombinationRule(pickupA.itemData, pickupB.itemData);
|
||||
|
||||
// Use the InteractionSettings directly instead of GameManager
|
||||
CombinationRule matchingRule = _interactionSettings.GetCombinationRule(pickupA.itemData, pickupB.itemData);
|
||||
|
||||
Vector3 spawnPos = pickupA.gameObject.transform.position;
|
||||
if (rule != null && rule.resultPrefab != null)
|
||||
if (matchingRule != null && matchingRule.resultPrefab != null)
|
||||
{
|
||||
newItem = Instantiate(rule.resultPrefab, spawnPos, Quaternion.identity);
|
||||
newItem = Instantiate(matchingRule.resultPrefab, spawnPos, Quaternion.identity);
|
||||
PickupItemData itemData = newItem.GetComponent<Pickup>().itemData;
|
||||
Destroy(pickupA.gameObject);
|
||||
Destroy(pickupB.gameObject);
|
||||
TryPickupItem(newItem,itemData);
|
||||
TryPickupItem(newItem, itemData);
|
||||
return CombinationResult.Successful;
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using UnityEngine.SceneManagement;
|
||||
using AppleHills.Core.Settings; // Added for IInteractionSettings
|
||||
|
||||
namespace PuzzleS
|
||||
{
|
||||
@@ -21,6 +22,9 @@ namespace PuzzleS
|
||||
private Transform _playerTransform;
|
||||
private Coroutine _proximityCheckCoroutine;
|
||||
|
||||
// Settings reference
|
||||
private IInteractionSettings _interactionSettings;
|
||||
|
||||
/// <summary>
|
||||
/// Singleton instance of the PuzzleManager.
|
||||
/// </summary>
|
||||
@@ -58,6 +62,9 @@ namespace PuzzleS
|
||||
_instance = this;
|
||||
// DontDestroyOnLoad(gameObject);
|
||||
SceneManager.sceneLoaded += OnSceneLoaded;
|
||||
|
||||
// Initialize settings reference
|
||||
_interactionSettings = GameManager.GetSettingsObject<IInteractionSettings>();
|
||||
}
|
||||
|
||||
void Start()
|
||||
@@ -123,8 +130,8 @@ namespace PuzzleS
|
||||
{
|
||||
if (_playerTransform != null)
|
||||
{
|
||||
// Get the proximity threshold from settings (half of the prompt range)
|
||||
float proximityThreshold = GameManager.Instance.DefaultPuzzlePromptRange;
|
||||
// Get the proximity threshold from settings directly using our settings reference
|
||||
float proximityThreshold = _interactionSettings?.DefaultPuzzlePromptRange ?? 3.0f;
|
||||
|
||||
// Check distance to each step behavior
|
||||
foreach (var kvp in _stepBehaviours)
|
||||
@@ -198,16 +205,36 @@ namespace PuzzleS
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Unlocks all initial steps (those with no dependencies).
|
||||
/// Unlocks all initial steps (those with no dependencies) and any steps whose dependencies are already met.
|
||||
/// </summary>
|
||||
private void UnlockInitialSteps()
|
||||
{
|
||||
// First, unlock all steps with no dependencies (initial steps)
|
||||
var initialSteps = PuzzleGraphUtility.FindInitialSteps(_runtimeDependencies);
|
||||
foreach (var step in initialSteps)
|
||||
{
|
||||
Debug.Log($"[Puzzles] Initial step unlocked: {step.stepId}");
|
||||
UnlockStep(step);
|
||||
}
|
||||
|
||||
// Keep trying to unlock steps as long as we're making progress
|
||||
bool madeProgress;
|
||||
do
|
||||
{
|
||||
madeProgress = false;
|
||||
|
||||
// Check all steps that haven't been unlocked yet
|
||||
foreach (var step in _runtimeDependencies.Keys.Where(s => !_unlockedSteps.Contains(s)))
|
||||
{
|
||||
// Check if all dependencies have been completed
|
||||
if (AreRuntimeDependenciesMet(step))
|
||||
{
|
||||
Debug.Log($"[Puzzles] Chain step unlocked: {step.stepId}");
|
||||
UnlockStep(step);
|
||||
madeProgress = true;
|
||||
}
|
||||
}
|
||||
} while (madeProgress);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -7,10 +7,34 @@ namespace UI
|
||||
{
|
||||
public class PauseMenu : MonoBehaviour
|
||||
{
|
||||
private static PauseMenu _instance;
|
||||
private static bool _isQuitting;
|
||||
|
||||
public static PauseMenu Instance
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_instance == null && Application.isPlaying && !_isQuitting)
|
||||
{
|
||||
_instance = FindAnyObjectByType<PauseMenu>();
|
||||
if (_instance == null)
|
||||
{
|
||||
var go = new GameObject("PauseMenu");
|
||||
_instance = go.AddComponent<PauseMenu>();
|
||||
// DontDestroyOnLoad(go);
|
||||
}
|
||||
}
|
||||
return _instance;
|
||||
}
|
||||
}
|
||||
|
||||
[Header("UI References")]
|
||||
[SerializeField] private GameObject pauseMenuPanel;
|
||||
[SerializeField] private GameObject pauseButton;
|
||||
|
||||
public event Action OnGamePaused;
|
||||
public event Action OnGameResumed;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
// Subscribe to scene loaded events
|
||||
@@ -32,6 +56,11 @@ namespace UI
|
||||
}
|
||||
}
|
||||
|
||||
void OnApplicationQuit()
|
||||
{
|
||||
_isQuitting = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the pause menu game object active or inactive based on the current level
|
||||
/// </summary>
|
||||
|
||||
@@ -12,7 +12,7 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: 32cd6d14d9304d5ba0fd590da1346654, type: 3}
|
||||
m_Name: PlayerFollowerSettings
|
||||
m_EditorClassIdentifier:
|
||||
moveSpeed: 25
|
||||
moveSpeed: 15
|
||||
moveAcceleration: 10000
|
||||
stopDistance: 2
|
||||
useRigidbody: 1
|
||||
|
||||
257
README.md
@@ -1,211 +1,92 @@
|
||||
# Apple Hills Dialogue System
|
||||
# Apple Hills
|
||||
|
||||
This document provides an overview of the dialogue system used in Apple Hills, intended primarily for designers working with the dialogue creation tools.
|
||||
Apple Hills is a Unity-based adventure game featuring interactive puzzle mechanics, dialogue systems, and item interactions.
|
||||
|
||||
## Overview
|
||||
## Project Overview
|
||||
|
||||
The Apple Hills dialogue system is a node-based dialogue management system that allows for interactive conversations with NPCs. The system currently supports linear, condition-guarded dialogue paths that can respond to various game conditions such as puzzle completion, item pickups, and item combinations. While the architecture was designed to facilitate branching dialogue in future extensions, the current implementation follows a linear progression through nodes.
|
||||
Apple Hills provides a unique gaming experience with:
|
||||
|
||||
## Dialogue Structure
|
||||
- Node-based dialogue system for interactive NPC conversations
|
||||
- Puzzle mechanics with condition-based progression
|
||||
- Item pickup, combination, and interaction systems
|
||||
- Custom Universal Render Pipeline setup
|
||||
|
||||
The dialogue system uses a graph-based structure with different types of nodes that control the flow of conversation. Each dialogue is represented as a graph containing multiple nodes connected through defined paths.
|
||||
## Repository Structure
|
||||
|
||||
### Core Components
|
||||
```
|
||||
AppleHills/
|
||||
├── Assets/ # Unity asset files
|
||||
│ ├── Art/ # Visual assets, models, textures
|
||||
│ ├── Dialogue/ # Dialogue system and dialogue data
|
||||
│ ├── Scripts/ # C# code for game systems
|
||||
│ │ ├── Core/ # Core managers and services
|
||||
│ │ ├── Dialogue/ # Dialogue system implementation
|
||||
│ │ ├── Input/ # Input handling systems
|
||||
│ │ ├── Interactions/ # Object interaction systems
|
||||
│ │ ├── Movement/ # Character movement controllers
|
||||
│ │ ├── PuzzleS/ # Puzzle mechanics and systems
|
||||
│ │ └── UI/ # User interface components
|
||||
│ ├── Scenes/ # Game scenes and levels
|
||||
│ ├── Prefabs/ # Reusable game objects
|
||||
│ └── ... # Other asset folders
|
||||
├── Packages/ # Unity package dependencies
|
||||
├── ProjectSettings/ # Unity project settings
|
||||
└── docs/ # Project documentation
|
||||
├── media/ # Images and other media for documentation
|
||||
└── dialogue_readme.md # Detailed documentation about the dialogue system
|
||||
```
|
||||
|
||||
1. **RuntimeDialogueGraph**: The container for all dialogue nodes that make up a conversation
|
||||
2. **DialogueComponent**: Attached to game objects to manage dialogue state and progression
|
||||
3. **SpeechBubble**: Handles the visual presentation of dialogue text
|
||||
## Code Structure
|
||||
|
||||
## QuickStart Guide
|
||||
### Scripts Organization
|
||||
|
||||
Setting up a dialogue interaction in your scene is straightforward:
|
||||
The game's codebase is organized into several key modules:
|
||||
|
||||
### 1. Component Setup
|
||||
| Module | Purpose |
|
||||
|--------|---------|
|
||||
| Animation | Animation controllers and state machines |
|
||||
| Bootstrap | Game initialization and scene loading |
|
||||
| Core | Core game managers and services |
|
||||
| Dialogue | Dialogue tree implementation and text handling |
|
||||
| Input | Player input processing and mapping |
|
||||
| Interactions | Interactive object behaviors and triggers |
|
||||
| Movement | Character controllers and navigation |
|
||||
| Pooling | Object pooling for performance optimization |
|
||||
| PuzzleS | Puzzle mechanics, conditions, and validators |
|
||||
| Settings | Configurable game parameters and constants |
|
||||
| UI | User interface elements and controllers |
|
||||
| Utilities | Helper classes and extension methods |
|
||||
|
||||
1. **Place the Dialogue Component**:
|
||||
- Add the `DialogueComponent` to any game object that has an `Interactable` component
|
||||
- The `Interactable` component handles player proximity and interaction triggers
|
||||
- Make sure the interactable is properly configured with appropriate interaction radius
|
||||
### Core Systems Highlight
|
||||
|
||||
2. **Add DialogueCanvas**:
|
||||
- Add the "DialogueCanvas" prefab from the project assets as a child of your object
|
||||
- Position the speech bubble appropriately above or near the interactable object
|
||||
- The speech bubble should be clearly visible but not obstruct important scene elements
|
||||
- You can adjust the scale and position to fit your specific character or object
|
||||
The `Assets/Scripts/Core` directory contains critical managers that orchestrate the game's systems:
|
||||
|
||||
3. **Assign Dialogue Graph**:
|
||||
- Create a `RuntimeDialogueGraph` scriptable object (Right Click > Create > Dialogue Graph)
|
||||
- Set up your dialogue nodes in the graph (see Node Types for details)
|
||||
- Assign the created graph to the `DialogueComponent` on your object
|
||||
- Make sure to set the entry node ID in the dialogue graph
|
||||
#### Key Managers
|
||||
|
||||
### 2. Testing Your Dialogue
|
||||
- **GameManager**: Central hub managing game state, scene transitions, and system coordination
|
||||
- **ItemManager**: Handles inventory system, item pickup, combination, and usage logic
|
||||
- **SceneManagerService**: Controls scene loading, unloading, and transitions
|
||||
|
||||
1. Enter play mode and approach the interactable object
|
||||
2. When the component has any lines to serve, the speech bubble should display the prompt ("...")
|
||||
3. Interact with the object to advance through dialogue lines
|
||||
4. Test any conditional nodes by completing their requirements
|
||||
5. Verify that the dialogue progresses as expected
|
||||
#### Settings Framework
|
||||
|
||||
### 3. Common Issues
|
||||
The `Core/Settings` system provides a robust configuration framework:
|
||||
|
||||
- **No speech bubble appears**: Check that the DialogueCanvas is properly added as a child and is active
|
||||
- **Dialogue doesn't advance**: Ensure the node connections (in/out) are properly set in the dialogue graph
|
||||
- **Condition not triggering**: Verify that the condition IDs (puzzle step, item, etc.) match exactly with your game systems
|
||||
- **ServiceLocator**: Dependency injection system for accessing game services
|
||||
- **SettingsProvider**: Central access point for game configuration values
|
||||
- **BaseSettings/BaseDeveloperSettings**: Foundation for creating configurable parameters
|
||||
- **InteractionSettings**: Configuration for player-object interactions
|
||||
- **MovementModeTypes**: Movement parameters for different locomotion modes
|
||||
|
||||
## Node Types
|
||||
## Documentation
|
||||
|
||||
The dialogue system supports several node types, each serving a specific purpose in the conversation flow:
|
||||
Detailed documentation about specific systems can be found in the `docs` folder:
|
||||
|
||||
### 1. Dialogue Node
|
||||
- [Dialogue System Documentation](docs/dialogue_readme.md)
|
||||
|
||||
Simple dialogue nodes display text to the player. They can contain multiple lines that are shown sequentially when the player interacts with the NPC.
|
||||
## Development
|
||||
|
||||
**Key features:**
|
||||
- Multiple dialogue lines displayed in sequence
|
||||
- Optional looping through lines
|
||||
- Automatic progression to the next node when all lines are exhausted
|
||||
The project is structured using standard Unity practices. Key components:
|
||||
|
||||
### 2. WaitOnPuzzleStep Node
|
||||
|
||||
This node pauses dialogue progression until a specific puzzle step has been completed by the player.
|
||||
|
||||
**Key features:**
|
||||
- Automatically advances when the specified puzzle step is completed
|
||||
- Displays dialogue while waiting for the condition to be met
|
||||
- Visual prompt appears when the condition is met, indicating available dialogue
|
||||
|
||||
### 3. WaitOnPickup Node
|
||||
|
||||
This node waits until the player has picked up a specific item before advancing the dialogue.
|
||||
|
||||
**Key features:**
|
||||
- Automatically advances when the player picks up the specified item
|
||||
- Shows dialogue while waiting for the item pickup
|
||||
- Visual prompt appears when the item is picked up, indicating available dialogue
|
||||
|
||||
### 4. WaitOnSlot Node
|
||||
|
||||
This node requires the player to place a specific item in a designated slot before the dialogue can progress.
|
||||
|
||||
**Key features:**
|
||||
- Supports different dialogue lines for different slot states:
|
||||
- Default lines when no item is slotted
|
||||
- Incorrect item lines when the wrong item is placed
|
||||
- Forbidden item lines when a specifically disallowed item is placed
|
||||
- Visual prompt appears when the correct item is slotted, indicating available dialogue
|
||||
|
||||
### 5. WaitOnCombination Node
|
||||
|
||||
This node waits for the player to create a specific item through the combination system.
|
||||
|
||||
**Key features:**
|
||||
- Automatically advances when the player creates the specified item through combination
|
||||
- Shows dialogue while waiting for the item combination
|
||||
- Visual prompt appears when the item is created, indicating available dialogue
|
||||
|
||||
### 6. End Node
|
||||
|
||||
Terminates the dialogue sequence.
|
||||
|
||||
**Key features:**
|
||||
- Marks the dialogue as completed
|
||||
- No further interaction available until the dialogue is restarted
|
||||
|
||||
## Dialogue Flow
|
||||
|
||||
1. **Dialogue Initialization**
|
||||
- When a dialogue is started (often through character interaction), the system begins at the entry node
|
||||
- Each node's dialogue lines are displayed in sequence as the player interacts
|
||||
|
||||
2. **Interaction Mechanism**
|
||||
- Dialogue advances when the player interacts with the NPC
|
||||
- Each interaction displays the next line of dialogue
|
||||
- When all lines in a node are displayed, the system moves to the next node (unless waiting on a condition)
|
||||
|
||||
3. **Conditional Progress**
|
||||
- When the dialogue reaches a conditional node (like WaitOnPuzzleStep), it waits for the condition to be met
|
||||
- Once the condition is satisfied, the speech bubble shows a prompt
|
||||
- The next interaction after the condition is met advances to the next node
|
||||
|
||||
4. **Visual Indicators**
|
||||
- Speech bubbles show ellipses ("...") as a prompt when dialogue is available
|
||||
- The dialogue text can be displayed instantly or with a typewriter effect
|
||||
- The speech bubble hides when no dialogue is available
|
||||
|
||||
## Designer Tips
|
||||
|
||||
1. **Node Organization**
|
||||
- Start every dialogue graph with a standard Dialogue node as the entry point
|
||||
- End every dialogue path with an End node to properly terminate the conversation
|
||||
- Use conditional nodes strategically to create gameplay-driven dialogue experiences
|
||||
|
||||
2. **Dialogue Writing**
|
||||
- Keep individual dialogue lines concise for better readability
|
||||
- Consider using the looping option for nodes when you want to repeat information
|
||||
- For WaitOnSlot nodes, write unique dialogue for incorrect/forbidden items to provide clear feedback
|
||||
|
||||
3. **Flow Control**
|
||||
- Ensure all nodes (except End nodes) have a valid next node specified
|
||||
- Test dialogue paths to verify all conditions can be met during gameplay
|
||||
- Consider using multiple dialogue lines within a single node rather than creating separate nodes for sequential lines
|
||||
|
||||
4. **Best Practices**
|
||||
- Name your nodes descriptively in the editor for easier management
|
||||
- Group related dialogue sequences into separate dialogue graphs
|
||||
- Use the speaker name field to clearly identify who is speaking
|
||||
|
||||
## Technical Details
|
||||
|
||||
### Public Events and APIs
|
||||
|
||||
The dialogue system exposes several events that can be used by other systems:
|
||||
|
||||
#### DialogueComponent
|
||||
|
||||
- **Events**:
|
||||
- `OnDialogueChanged`: Triggered when the dialogue text changes
|
||||
|
||||
- **Properties**:
|
||||
- `IsActive`: Indicates whether the dialogue is currently active
|
||||
- `IsCompleted`: Indicates whether the dialogue has reached an End node
|
||||
- `CurrentSpeakerName`: Returns the name of the current speaker
|
||||
|
||||
- **Public Methods**:
|
||||
- `StartDialogue()`: Initiates the dialogue from the beginning
|
||||
- `GetCurrentDialogueLine()`: Retrieves the current dialogue line text
|
||||
- `HasAnyLines()`: Checks if the dialogue component has any lines available
|
||||
- `SetDialogueGraph(RuntimeDialogueGraph)`: Sets the dialogue graph for the component
|
||||
|
||||
#### SpeechBubble
|
||||
|
||||
- **Public Methods**:
|
||||
- `Show()`: Makes the speech bubble visible
|
||||
- `Hide()`: Hides the speech bubble
|
||||
- `Toggle()`: Toggles the visibility of the speech bubble
|
||||
- `SetText(string)`: Sets the text displayed in the speech bubble
|
||||
- `DisplayDialogueLine(string, bool)`: Displays a dialogue line and handles prompt visibility
|
||||
- `UpdatePromptVisibility(bool)`: Updates the speech bubble to show a prompt or hide based on dialogue availability
|
||||
- `SetDisplayMode(TextDisplayMode)`: Changes how text is displayed (instant or typewriter)
|
||||
- `SkipTypewriter()`: Immediately displays the full text, skipping the typewriter effect
|
||||
- `SetTypewriterSpeed(float)`: Sets the speed of the typewriter effect
|
||||
|
||||
### Integration with Other Systems
|
||||
|
||||
The dialogue system integrates with several other game systems:
|
||||
|
||||
1. **Puzzle System**: Monitors puzzle completion events to advance WaitOnPuzzleStep nodes
|
||||
2. **Item System**: Tracks item pickups, combinations, and slot interactions to advance respective node types
|
||||
3. **Interaction System**: Responds to player interaction with the NPC to progress through dialogue lines
|
||||
|
||||
### Technical Workflow
|
||||
|
||||
1. Create a RuntimeDialogueGraph asset in the Unity editor
|
||||
2. Add nodes and connections using the dialogue editor
|
||||
3. Assign the graph to a DialogueComponent on an NPC GameObject
|
||||
4. Ensure a SpeechBubble component is available (as a child object or referenced)
|
||||
5. Set up any necessary puzzle steps, items, or slots that the dialogue will reference
|
||||
|
||||
## Summary
|
||||
|
||||
The Apple Hills dialogue system provides a powerful and flexible way to create interactive conversations that respond to player actions and game state. By using different node types and conditions, designers can craft engaging dialogues that feel natural and responsive within the game world.
|
||||
- Universal Render Pipeline for consistent visuals
|
||||
- Input System for configurable controls
|
||||
- Addressable Assets for asset management
|
||||
|
||||
277
docs/dialogue_readme.md
Normal file
@@ -0,0 +1,277 @@
|
||||
# Apple Hills Dialogue System
|
||||
|
||||
This document provides an overview of the dialogue system used in Apple Hills, intended primarily for designers (Damian) working with the dialogue creation tools.
|
||||
|
||||
## Overview
|
||||
|
||||
The Apple Hills dialogue system is a node-based dialogue management system that allows for interactive conversations with NPCs. The system currently supports linear, condition-guarded dialogue paths that can respond to various game conditions such as puzzle completion, item pickups, and item combinations. While the architecture was designed to facilitate branching dialogue in future extensions, the current implementation follows a linear progression through nodes.
|
||||
|
||||
## Dialogue Structure
|
||||
|
||||
The dialogue system uses a graph-based structure with different types of nodes that control the flow of conversation. Each dialogue is represented as a graph containing multiple nodes connected through defined paths.
|
||||
|
||||

|
||||
|
||||
### Core Components
|
||||
|
||||
1. **RuntimeDialogueGraph**: The container for all dialogue nodes that make up a conversation
|
||||
- Defined in `Assets/Scripts/Dialogue/RuntimeDialogueGraph.cs`
|
||||
- Contains the entry point node ID and a list of all dialogue nodes
|
||||
- Holds the speaker name that appears in dialogue UI
|
||||
|
||||
2. **DialogueComponent**: Attached to game objects to manage dialogue state and progression
|
||||
- Defined in `Assets/Scripts/Dialogue/DialogueComponent.cs`
|
||||
- Manages the current state of dialogue (active node, line index)
|
||||
- Responds to game events like puzzle completion, item pickup, etc.
|
||||
- Controls dialogue advancement through player interaction
|
||||
|
||||
3. **SpeechBubble**: Handles the visual presentation of dialogue text
|
||||
- Defined in `Assets/Scripts/Dialogue/SpeechBubble.cs`
|
||||
- Manages the dialogue UI elements and text display
|
||||
- Implements typewriter effects and visual prompts
|
||||
|
||||
## QuickStart Guide
|
||||
|
||||
Setting up a dialogue interaction in your scene is straightforward:
|
||||
|
||||
### 1. Component Setup
|
||||
|
||||
1. **Place the Dialogue Component**:
|
||||
- Add the `DialogueComponent` to any game object that has an `Interactable` component
|
||||
- The `Interactable` component handles player proximity and interaction triggers
|
||||
- Make sure the interactable is properly configured with appropriate interaction radius
|
||||
|
||||

|
||||
|
||||
2. **Add DialogueCanvas**:
|
||||
- Add the "DialogueCanvas" prefab from the project assets as a child of your object
|
||||
- Position the speech bubble appropriately above or near the interactable object
|
||||
- The speech bubble should be clearly visible but not obstruct important scene elements
|
||||
- You can adjust the scale and position to fit your specific character or object
|
||||
|
||||

|
||||
|
||||
3. **Assign Dialogue Graph**:
|
||||
- Create a `RuntimeDialogueGraph` scriptable object (Right Click > Create > Dialogue Graph)
|
||||
- Set up your dialogue nodes in the graph (see Node Types for details)
|
||||
- Assign the created graph to the `DialogueComponent` on your object
|
||||
- Make sure to set the entry node ID in the dialogue graph
|
||||
|
||||

|
||||
|
||||
### 2. Testing Your Dialogue
|
||||
|
||||
1. Enter play mode and approach the interactable object
|
||||
2. When the component has any lines to serve, the speech bubble should display the prompt ("...")
|
||||
3. Interact with the object to advance through dialogue lines
|
||||
4. Test any conditional nodes by completing their requirements
|
||||
5. Verify that the dialogue progresses as expected
|
||||
|
||||

|
||||
|
||||
### 3. Common Issues
|
||||
|
||||
- **No speech bubble appears**: Check that the DialogueCanvas is properly added as a child and is active
|
||||
- **Dialogue doesn't advance**: Ensure the node connections (in/out) are properly set in the dialogue graph
|
||||
- **Condition not triggering**: Verify that the condition IDs (puzzle step, item, etc.) match exactly with your game systems
|
||||
|
||||
## Node Types
|
||||
|
||||
The dialogue system supports several node types, each serving a specific purpose in the conversation flow:
|
||||
|
||||
### 1. Dialogue Node
|
||||
|
||||
Simple dialogue nodes display text to the player. They can contain multiple lines that are shown sequentially when the player interacts with the NPC.
|
||||
|
||||
**Key features:**
|
||||
- Multiple dialogue lines displayed in sequence
|
||||
- Optional looping through lines
|
||||
- Automatic progression to the next node when all lines are exhausted
|
||||
|
||||

|
||||
|
||||
**Implementation details:**
|
||||
- Defined as `RuntimeDialogueNodeType.Dialogue` in `RuntimeDialogueGraph.cs`
|
||||
- Uses `dialogueLines` list to store sequential lines of text
|
||||
- The `loopThroughLines` boolean controls whether the dialogue returns to the first line after reaching the end
|
||||
|
||||
### 2. WaitOnPuzzleStep Node
|
||||
|
||||
This node pauses dialogue progression until a specific puzzle step has been completed by the player.
|
||||
|
||||
**Key features:**
|
||||
- Automatically advances when the specified puzzle step is completed
|
||||
- Displays dialogue while waiting for the condition to be met
|
||||
- Visual prompt appears when the condition is met, indicating available dialogue
|
||||
|
||||

|
||||
|
||||
**Implementation details:**
|
||||
- Defined as `RuntimeDialogueNodeType.WaitOnPuzzleStep` in `RuntimeDialogueGraph.cs`
|
||||
- Links to `PuzzleManager.OnStepCompleted` event through the `puzzleStepID` property
|
||||
- The `DialogueComponent` listens for puzzle completion events through `OnAnyPuzzleStepCompleted` method
|
||||
|
||||
### 3. WaitOnPickup Node
|
||||
|
||||
This node waits until the player has picked up a specific item before advancing the dialogue.
|
||||
|
||||
**Key features:**
|
||||
- Automatically advances when the player picks up the specified item
|
||||
- Shows dialogue while waiting for the item pickup
|
||||
- Visual prompt appears when the item is picked up, indicating available dialogue
|
||||
|
||||

|
||||
|
||||
**Implementation details:**
|
||||
- Defined as `RuntimeDialogueNodeType.WaitOnPickup` in `RuntimeDialogueGraph.cs`
|
||||
- Links to `ItemManager.OnItemPickedUp` event through the `pickupItemID` property
|
||||
- The `DialogueComponent` listens for item pickup events through `OnAnyItemPickedUp` method
|
||||
|
||||
### 4. WaitOnSlot Node
|
||||
|
||||
This node requires the player to place a specific item in a designated slot before the dialogue can progress.
|
||||
|
||||
**Key features:**
|
||||
- Supports different dialogue lines for different slot states:
|
||||
- Default lines when no item is slotted
|
||||
- Incorrect item lines when the wrong item is placed
|
||||
- Forbidden item lines when a specifically disallowed item is placed
|
||||
- Visual prompt appears when the correct item is slotted, indicating available dialogue
|
||||
|
||||

|
||||
|
||||
**Implementation details:**
|
||||
- Defined as `RuntimeDialogueNodeType.WaitOnSlot` in `RuntimeDialogueGraph.cs`
|
||||
- Uses multiple events from `ItemManager` including:
|
||||
- `OnCorrectItemSlotted` - Triggered when the matching `slotItemID` is placed
|
||||
- `OnIncorrectItemSlotted` - For displaying incorrect item dialogue
|
||||
- `OnForbiddenItemSlotted` - For displaying forbidden item dialogue
|
||||
- `OnItemSlotCleared` - For resetting to default dialogue
|
||||
|
||||
### 5. WaitOnCombination Node
|
||||
|
||||
This node waits for the player to create a specific item through the combination system.
|
||||
|
||||
**Key features:**
|
||||
- Automatically advances when the player creates the specified item through combination
|
||||
- Shows dialogue while waiting for the item combination
|
||||
- Visual prompt appears when the item is created, indicating available dialogue
|
||||
|
||||

|
||||
|
||||
**Implementation details:**
|
||||
- Defined as `RuntimeDialogueNodeType.WaitOnCombination` in `RuntimeDialogueGraph.cs`
|
||||
- Links to `ItemManager.OnItemsCombined` event through the `combinationResultItemID` property
|
||||
- The `DialogueComponent` listens for item combination events through `OnAnyItemsCombined` method
|
||||
|
||||
### 6. End Node
|
||||
|
||||
Terminates the dialogue sequence.
|
||||
|
||||
**Key features:**
|
||||
- Marks the dialogue as completed
|
||||
- No further interaction available until the dialogue is restarted
|
||||
|
||||

|
||||
|
||||
**Implementation details:**
|
||||
- Defined as `RuntimeDialogueNodeType.End` in `RuntimeDialogueGraph.cs`
|
||||
- When reached, sets the `IsCompleted` flag on the `DialogueComponent`
|
||||
- No next node connection is required for this node type
|
||||
|
||||
## Dialogue Editor
|
||||
|
||||
The dialogue editor is a custom Unity tool that allows for visual creation and editing of dialogue graphs.
|
||||
|
||||

|
||||
|
||||
### Key Editor Features
|
||||
|
||||
- **Visual Node Editing**: Add and connect nodes in a visual graph
|
||||
- **Node Type Selection**: Choose from the six supported node types
|
||||
- **Dialogue Text Entry**: Add multiple lines of dialogue for each node
|
||||
- **Condition Setup**: Specify condition IDs for conditional nodes
|
||||
- **Node Connections**: Create the flow between dialogue nodes
|
||||
|
||||
### Editor Workflow
|
||||
|
||||
1. **Create New Graph**: Right-click in Project view and select Create > Dialogue Graph
|
||||
2. **Open Editor**: Double-click the created asset to open the dialogue editor
|
||||
3. **Add Nodes**: Right-click in the editor and select Add Node > [Node Type]
|
||||
4. **Configure Nodes**: Enter dialogue text and set conditions as needed
|
||||
5. **Connect Nodes**: Drag from output ports to input ports to create connections
|
||||
6. **Set Entry Node**: Mark one node as the entry point for the dialogue
|
||||
7. **Save**: Save your dialogue graph when finished
|
||||
|
||||
## Designer Tips
|
||||
|
||||
1. **Node Organization**
|
||||
- Start every dialogue graph with a standard Dialogue node as the entry point
|
||||
- End every dialogue path with an End node to properly terminate the conversation
|
||||
- Use conditional nodes strategically to create gameplay-driven dialogue experiences
|
||||
|
||||
2. **Dialogue Writing**
|
||||
- Keep individual dialogue lines concise for better readability
|
||||
- Consider using the looping option for nodes when you want to repeat information
|
||||
- For WaitOnSlot nodes, write unique dialogue for incorrect/forbidden items to provide clear feedback
|
||||
|
||||
3. **Flow Control**
|
||||
- Ensure all nodes (except End nodes) have a valid next node specified
|
||||
- Test dialogue paths to verify all conditions can be met during gameplay
|
||||
- Consider using multiple dialogue lines within a single node rather than creating separate nodes for sequential lines
|
||||
|
||||
4. **Best Practices**
|
||||
- Name your nodes descriptively in the editor for easier management
|
||||
- Group related dialogue sequences into separate dialogue graphs
|
||||
- Use the speaker name field to clearly identify who is speaking
|
||||
|
||||
## Technical Details
|
||||
|
||||
### Public Events and APIs
|
||||
|
||||
The dialogue system exposes several events that can be used by other systems:
|
||||
|
||||
#### DialogueComponent
|
||||
|
||||
- **Events**:
|
||||
- `OnDialogueChanged`: Triggered when the dialogue text changes
|
||||
|
||||
- **Properties**:
|
||||
- `IsActive`: Indicates whether the dialogue is currently active
|
||||
- `IsCompleted`: Indicates whether the dialogue has reached an End node
|
||||
- `CurrentSpeakerName`: Returns the name of the current speaker
|
||||
|
||||
- **Public Methods**:
|
||||
- `StartDialogue()`: Initiates the dialogue from the beginning
|
||||
- `GetCurrentDialogueLine()`: Retrieves the current dialogue line text
|
||||
- `HasAnyLines()`: Checks if the dialogue component has any lines available
|
||||
- `SetDialogueGraph(RuntimeDialogueGraph)`: Sets the dialogue graph for the component
|
||||
|
||||
#### SpeechBubble
|
||||
|
||||
- **Public Methods**:
|
||||
- `Show()`: Makes the speech bubble visible
|
||||
- `Hide()`: Hides the speech bubble
|
||||
- `Toggle()`: Toggles the visibility of the speech bubble
|
||||
- `SetText(string)`: Sets the text displayed in the speech bubble
|
||||
- `DisplayDialogueLine(string, bool)`: Displays a dialogue line and handles prompt visibility
|
||||
- `UpdatePromptVisibility(bool)`: Updates the speech bubble to show a prompt or hide based on dialogue availability
|
||||
- `SetDisplayMode(TextDisplayMode)`: Changes how text is displayed (instant or typewriter)
|
||||
- `SkipTypewriter()`: Immediately displays the full text, skipping the typewriter effect
|
||||
- `SetTypewriterSpeed(float)`: Sets the speed of the typewriter effect
|
||||
|
||||
### Integration with Other Systems
|
||||
|
||||
The dialogue system integrates with several other game systems:
|
||||
|
||||
1. **Puzzle System**: Monitors puzzle completion events to advance WaitOnPuzzleStep nodes
|
||||
2. **Item System**: Tracks item pickups, combinations, and slot interactions to advance respective node types
|
||||
3. **Interaction System**: Responds to player interaction with the NPC to progress through dialogue lines
|
||||
|
||||
### Technical Workflow
|
||||
|
||||
1. Create a RuntimeDialogueGraph asset in the Unity editor
|
||||
2. Add nodes and connections using the dialogue editor
|
||||
3. Assign the graph to a DialogueComponent on an NPC GameObject
|
||||
4. Ensure a SpeechBubble component is available (as a child object or referenced)
|
||||
5. Set up any necessary puzzle steps, items, or slots that the dialogue will reference
|
||||
275
docs/interactables_readme.md
Normal file
@@ -0,0 +1,275 @@
|
||||
# Apple Hills Interaction System
|
||||
|
||||
This document provides a comprehensive overview of the interaction system in Apple Hills, detailing how interactions are structured, configured, and extended with custom actions.
|
||||
|
||||
## Overview
|
||||
|
||||
The Apple Hills interaction system allows players to interact with objects in the game world. It supports character movement to interaction points, timed and conditional interactions, and complex behaviors through a component-based architecture. The system is particularly powerful when combined with the Timeline feature for creating cinematic sequences during interactions.
|
||||
|
||||
## Core Components
|
||||
|
||||
The interaction system consists of several key components that work together:
|
||||
|
||||
### Interactable
|
||||
|
||||
The `Interactable` component is the foundation of the interaction system. It:
|
||||
- Handles player input (tapping/clicking)
|
||||
- Manages which character(s) should interact (Trafalgar, Pulver, or both)
|
||||
- Coordinates character movement to interaction points
|
||||
- Dispatches events during the interaction lifecycle
|
||||
- Manages one-time interactions and cooldowns
|
||||
|
||||

|
||||
|
||||
### CharacterMoveToTarget
|
||||
|
||||
The `CharacterMoveToTarget` component defines positions where characters should move when interacting:
|
||||
- Can be configured for specific characters (Trafalgar, Pulver, or both)
|
||||
- Supports position offsets for fine-tuning
|
||||
- Provides visual gizmos in the editor for easy positioning
|
||||
- Multiple targets can be set up for complex interactions
|
||||
|
||||

|
||||
|
||||
### Interaction Actions
|
||||
|
||||
Actions are components that respond to interaction events and execute custom behavior:
|
||||
- Derive from the abstract `InteractionActionBase` class
|
||||
- Can be attached to interactable objects
|
||||
- Multiple actions can be added to a single interactable
|
||||
- Actions can optionally block the interaction flow until completion
|
||||
|
||||
The inspector for all interaction action components shows the key parameters from InteractionActionBase, with custom configuration options for specific action types:
|
||||
|
||||

|
||||
|
||||
### Interaction Requirements
|
||||
|
||||
Requirements are components that determine whether an interaction can occur:
|
||||
- Derive from the abstract `InteractionRequirementBase` class
|
||||
- Can prevent interactions based on custom conditions
|
||||
- Multiple requirements can be added to a single interactable
|
||||
- Used for creating conditional interactions (e.g., requiring an item)
|
||||
|
||||
## Interaction Event Flow
|
||||
|
||||
Interactions follow a defined event flow:
|
||||
|
||||
1. **InteractionStarted**: Triggered when the player initiates an interaction
|
||||
2. **PlayerArrived**: Triggered when the player character reaches the interaction point
|
||||
3. **InteractingCharacterArrived**: Triggered when the interacting character (often Pulver) reaches the interaction point
|
||||
4. **InteractionComplete**: Triggered when the interaction is completed
|
||||
5. **InteractionInterrupted**: Triggered if the interaction is interrupted before completion
|
||||
|
||||
## InteractionActionBase
|
||||
|
||||
The `InteractionActionBase` is the abstract base class for all interaction actions. It provides the framework for creating custom behaviors that respond to interaction events.
|
||||
|
||||
### Key Features
|
||||
|
||||
- **Event Filtering**: Actions can choose which interaction events to respond to
|
||||
- **Flow Control**: Actions can optionally pause the interaction flow until completion
|
||||
- **Asynchronous Execution**: Actions use `async/await` pattern for time-consuming operations
|
||||
- **Character References**: Actions receive references to both player and follower characters
|
||||
|
||||
### Implementation
|
||||
|
||||
```csharp
|
||||
public abstract class InteractionActionBase : MonoBehaviour
|
||||
{
|
||||
// Which events this action should respond to
|
||||
public List<InteractionEventType> respondToEvents;
|
||||
|
||||
// Whether to pause the interaction flow during execution
|
||||
public bool pauseInteractionFlow;
|
||||
|
||||
// The main execution method that must be implemented by derived classes
|
||||
protected abstract Task<bool> ExecuteAsync(
|
||||
InteractionEventType eventType,
|
||||
PlayerTouchController player,
|
||||
FollowerController follower);
|
||||
|
||||
// Optional method for adding execution conditions
|
||||
protected virtual bool ShouldExecute(
|
||||
InteractionEventType eventType,
|
||||
PlayerTouchController player,
|
||||
FollowerController follower)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## InteractionTimelineAction
|
||||
|
||||
The `InteractionTimelineAction` is a powerful action that plays Unity Timeline sequences during interactions. It enables cinematic sequences, character animations, camera movements, and more.
|
||||
|
||||
### Key Features
|
||||
|
||||
- **Multiple Timeline Support**: Can play different timelines for different interaction events
|
||||
- **Timeline Sequences**: Can play multiple timelines in sequence for a single event
|
||||
- **Character Binding**: Automatically binds player and follower characters to timeline tracks
|
||||
- **Flow Control**: Waits for timeline completion before continuing interaction flow
|
||||
- **Timeout Safety**: Includes a configurable timeout to prevent interactions from getting stuck
|
||||
- **Looping Options**: Supports looping all timelines or just the last timeline in a sequence
|
||||
|
||||
### Timeline Event Mapping
|
||||
|
||||
Each mapping connects an interaction event to one or more timeline assets:
|
||||
|
||||
```csharp
|
||||
public class TimelineEventMapping
|
||||
{
|
||||
// The event that triggers this timeline
|
||||
public InteractionEventType eventType;
|
||||
|
||||
// The timeline assets to play (in sequence)
|
||||
public PlayableAsset[] timelines;
|
||||
|
||||
// Character binding options
|
||||
public bool bindPlayerCharacter;
|
||||
public bool bindPulverCharacter;
|
||||
public string playerTrackName = "Player";
|
||||
public string pulverTrackName = "Pulver";
|
||||
|
||||
// Playback options
|
||||
public float timeoutSeconds = 30f;
|
||||
public bool loopLast = false;
|
||||
public bool loopAll = false;
|
||||
}
|
||||
```
|
||||
|
||||
### Custom Editor
|
||||
|
||||
The `InteractionTimelineAction` includes a custom editor that makes it easy to configure:
|
||||
- Quick buttons to add mappings for common events
|
||||
- Character binding options
|
||||
- Timeline sequence configuration
|
||||
- Validation warnings for misconfigured timelines
|
||||
|
||||

|
||||
|
||||
### Implementation Pattern
|
||||
|
||||
For a cinematic interaction with timelines:
|
||||
|
||||
1. Add an `Interactable` component to your object
|
||||
2. Add an `InteractionTimelineAction` component to the same object
|
||||
3. Set up character move targets if needed
|
||||
4. Create timeline assets for each interaction phase
|
||||
5. Configure the timeline mappings in the inspector
|
||||
6. Test the interaction in play mode
|
||||
|
||||
### Timeline Configuration
|
||||
|
||||
When setting up a timeline for interaction, you'll need to create a Timeline asset and configure it in Unity's Timeline editor:
|
||||
|
||||

|
||||
|
||||
## Working with the Interactable Editor
|
||||
|
||||
The `Interactable` component includes a custom editor that enhances the workflow:
|
||||
|
||||
### Character Move Target Creation
|
||||
|
||||
The editor provides buttons to easily create character move targets:
|
||||
- "Add Trafalgar Target" - Creates a move target for the player character
|
||||
- "Add Pulver Target" - Creates a move target for the follower character
|
||||
- "Add Both Characters Target" - Creates a move target for both characters
|
||||
|
||||

|
||||
|
||||
### Target Visualization
|
||||
|
||||
The editor displays the number of targets for each character type and warns about potential conflicts:
|
||||
```
|
||||
Trafalgar Targets: 1, Pulver Targets: 1, Both Targets: 0
|
||||
```
|
||||
|
||||
If multiple conflicting targets are detected, a warning is displayed to help prevent unexpected behavior.
|
||||
|
||||
## Best Practices
|
||||
|
||||
### Target Positioning
|
||||
|
||||
- Place character targets with appropriate spacing to prevent characters from overlapping
|
||||
- Consider the character's facing direction (targets automatically make characters face the interactable)
|
||||
- Use the position offset for fine-tuning without moving the actual target GameObject
|
||||
|
||||

|
||||
|
||||
### Timeline Design
|
||||
|
||||
- Keep timelines modular and focused on specific actions
|
||||
- Use signals to trigger game events from timelines
|
||||
- Consider using director notification tracks for advanced timeline integration
|
||||
- Test timelines with actual characters to ensure animations blend correctly
|
||||
|
||||
### Action Combinations
|
||||
|
||||
- Combine multiple actions for complex behaviors (e.g., dialogue + timeline)
|
||||
- Order actions in the Inspector to control execution priority
|
||||
- Use the `pauseInteractionFlow` option strategically to control sequence flow
|
||||
|
||||
## Technical Reference
|
||||
|
||||
### InteractionEventType
|
||||
|
||||
```csharp
|
||||
public enum InteractionEventType
|
||||
{
|
||||
InteractionStarted, // When interaction is first triggered
|
||||
PlayerArrived, // When player arrives at interaction point
|
||||
InteractingCharacterArrived, // When interacting character arrives
|
||||
InteractionComplete, // When interaction is successfully completed
|
||||
InteractionInterrupted // When interaction is interrupted
|
||||
}
|
||||
```
|
||||
|
||||
### CharacterToInteract
|
||||
|
||||
```csharp
|
||||
public enum CharacterToInteract
|
||||
{
|
||||
None, // No character interactions
|
||||
Trafalgar, // Player character only
|
||||
Pulver, // Follower character only
|
||||
Both // Both characters
|
||||
}
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Common Issues
|
||||
|
||||
- **Characters not moving to targets**: Ensure targets have the correct CharacterToInteract type set
|
||||
- **Timeline not playing**: Check that the PlayableDirector has a reference to the timeline asset
|
||||
- **Characters not appearing in timeline**: Verify the track names match the binding configuration
|
||||
- **Interaction getting stuck**: Make sure timelines have a reasonable timeout value set
|
||||
- **Multiple timelines playing simultaneously**: Check that the event mappings are correctly configured
|
||||
|
||||
|
||||
## Setup Example
|
||||
|
||||
Here's how a typical interaction setup might look in the Inspector:
|
||||
|
||||
1. Interactable component with appropriate settings
|
||||
2. Character move targets positioned in the scene
|
||||
3. InteractionTimelineAction component configured with timeline mappings
|
||||
4. PlayableDirector component referencing timeline assets
|
||||
|
||||
## Advanced Topics
|
||||
|
||||
### Timeline Integration with Dialogue
|
||||
|
||||
Timeline actions can be synchronized with dialogue using:
|
||||
- Animation tracks to trigger dialogue displays
|
||||
- Signal tracks to advance dialogue
|
||||
- Custom markers to synchronize dialogue with character animations
|
||||
|
||||
### Interaction Sequences
|
||||
|
||||
Complex interaction sequences can be created by:
|
||||
- Using multiple interactables in sequence
|
||||
- Enabling/disabling interactables based on game state
|
||||
- Using timelines to guide the player through sequential interactions
|
||||
BIN
docs/media/character_move_target_inspector.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
docs/media/create_dialogue_graph.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
docs/media/dialogue_component_inspector.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
docs/media/dialogue_editor_interface.png
Normal file
|
After Width: | Height: | Size: 288 KiB |
BIN
docs/media/dialogue_graph_example.png
Normal file
|
After Width: | Height: | Size: 112 KiB |
BIN
docs/media/dialogue_node_example.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
docs/media/dialogue_testing_flow.png
Normal file
|
After Width: | Height: | Size: 64 KiB |
BIN
docs/media/end_node.png
Normal file
|
After Width: | Height: | Size: 10 KiB |