Compare commits
8 commits
ccf63574e4
...
3ba8dad4a2
| Author | SHA1 | Date | |
|---|---|---|---|
| 3ba8dad4a2 | |||
| 838f91ede7 | |||
| 9f2e4c1063 | |||
| b1051f30b2 | |||
| 3dbddc57ae | |||
| 2370cb670d | |||
| 016c834f21 | |||
| 2ab20b0e8c |
60 changed files with 2230 additions and 15455 deletions
BIN
.DS_Store
vendored
BIN
.DS_Store
vendored
Binary file not shown.
5
.vscode/extensions.json
vendored
Normal file
5
.vscode/extensions.json
vendored
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"recommendations": [
|
||||
"visualstudiotoolsforunity.vstuc"
|
||||
]
|
||||
}
|
||||
10
.vscode/launch.json
vendored
Normal file
10
.vscode/launch.json
vendored
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Attach to Unity",
|
||||
"type": "vstuc",
|
||||
"request": "attach"
|
||||
}
|
||||
]
|
||||
}
|
||||
60
.vscode/settings.json
vendored
Normal file
60
.vscode/settings.json
vendored
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
{
|
||||
"files.exclude": {
|
||||
"**/.DS_Store": true,
|
||||
"**/.git": true,
|
||||
"**/.vs": true,
|
||||
"**/.gitmodules": true,
|
||||
"**/.vsconfig": true,
|
||||
"**/*.booproj": true,
|
||||
"**/*.pidb": true,
|
||||
"**/*.suo": true,
|
||||
"**/*.user": true,
|
||||
"**/*.userprefs": true,
|
||||
"**/*.unityproj": true,
|
||||
"**/*.dll": true,
|
||||
"**/*.exe": true,
|
||||
"**/*.pdf": true,
|
||||
"**/*.mid": true,
|
||||
"**/*.midi": true,
|
||||
"**/*.wav": true,
|
||||
"**/*.gif": true,
|
||||
"**/*.ico": true,
|
||||
"**/*.jpg": true,
|
||||
"**/*.jpeg": true,
|
||||
"**/*.png": true,
|
||||
"**/*.psd": true,
|
||||
"**/*.tga": true,
|
||||
"**/*.tif": true,
|
||||
"**/*.tiff": true,
|
||||
"**/*.3ds": true,
|
||||
"**/*.3DS": true,
|
||||
"**/*.fbx": true,
|
||||
"**/*.FBX": true,
|
||||
"**/*.lxo": true,
|
||||
"**/*.LXO": true,
|
||||
"**/*.ma": true,
|
||||
"**/*.MA": true,
|
||||
"**/*.obj": true,
|
||||
"**/*.OBJ": true,
|
||||
"**/*.asset": true,
|
||||
"**/*.cubemap": true,
|
||||
"**/*.flare": true,
|
||||
"**/*.mat": true,
|
||||
"**/*.meta": true,
|
||||
"**/*.prefab": true,
|
||||
"**/*.unity": true,
|
||||
"build/": true,
|
||||
"Build/": true,
|
||||
"Library/": true,
|
||||
"library/": true,
|
||||
"obj/": true,
|
||||
"Obj/": true,
|
||||
"Logs/": true,
|
||||
"logs/": true,
|
||||
"ProjectSettings/": true,
|
||||
"UserSettings/": true,
|
||||
"temp/": true,
|
||||
"Temp/": true
|
||||
},
|
||||
"dotnet.defaultSolution": "GuildTycoon.sln"
|
||||
}
|
||||
|
|
@ -53,6 +53,7 @@ MonoBehaviour:
|
|||
m_AdditionalLightsShadowResolutionTierHigh: 1024
|
||||
m_ReflectionProbeBlending: 1
|
||||
m_ReflectionProbeBoxProjection: 1
|
||||
m_ReflectionProbeAtlas: 1
|
||||
m_ShadowDistance: 50
|
||||
m_ShadowCascadeCount: 4
|
||||
m_Cascade2Split: 0.25
|
||||
|
|
@ -129,6 +130,10 @@ MonoBehaviour:
|
|||
m_PrefilterScreenCoord: 1
|
||||
m_PrefilterNativeRenderPass: 1
|
||||
m_PrefilterUseLegacyLightmaps: 0
|
||||
m_PrefilterBicubicLightmapSampling: 1
|
||||
m_PrefilterReflectionProbeBlending: 0
|
||||
m_PrefilterReflectionProbeBoxProjection: 0
|
||||
m_PrefilterReflectionProbeAtlas: 0
|
||||
m_ShaderVariantLogLevel: 0
|
||||
m_ShadowCascades: 0
|
||||
m_Textures:
|
||||
|
|
|
|||
|
|
@ -55,6 +55,13 @@ MonoBehaviour:
|
|||
- rid: 8712630790384254976
|
||||
- rid: 3032807696540106752
|
||||
- rid: 3032807696540106753
|
||||
- rid: 8483784701748969479
|
||||
- rid: 8483784701748969480
|
||||
- rid: 8483784701748969481
|
||||
- rid: 8483784701748969482
|
||||
- rid: 8483784701748969483
|
||||
- rid: 8483784701748969484
|
||||
- rid: 8483784701748969485
|
||||
m_RuntimeSettings:
|
||||
m_List:
|
||||
- rid: 6852985685364965378
|
||||
|
|
@ -67,6 +74,10 @@ MonoBehaviour:
|
|||
- rid: 6852985685364965394
|
||||
- rid: 8712630790384254976
|
||||
- rid: 3032807696540106752
|
||||
- rid: 8483784701748969480
|
||||
- rid: 8483784701748969481
|
||||
- rid: 8483784701748969484
|
||||
- rid: 8483784701748969485
|
||||
m_AssetVersion: 8
|
||||
m_ObsoleteDefaultVolumeProfile: {fileID: 0}
|
||||
m_RenderingLayerNames:
|
||||
|
|
@ -120,9 +131,6 @@ MonoBehaviour:
|
|||
m_AutodeskInteractive: {fileID: 4800000, guid: 0e9d5a909a1f7e84882a534d0d11e49f, type: 3}
|
||||
m_AutodeskInteractiveTransparent: {fileID: 4800000, guid: 5c81372d981403744adbdda4433c9c11, type: 3}
|
||||
m_AutodeskInteractiveMasked: {fileID: 4800000, guid: 80aa867ac363ac043847b06ad71604cd, type: 3}
|
||||
m_TerrainDetailLit: {fileID: 4800000, guid: f6783ab646d374f94b199774402a5144, type: 3}
|
||||
m_TerrainDetailGrassBillboard: {fileID: 4800000, guid: 29868e73b638e48ca99a19ea58c48d90, type: 3}
|
||||
m_TerrainDetailGrass: {fileID: 4800000, guid: e507fdfead5ca47e8b9a768b51c291a1, type: 3}
|
||||
m_DefaultSpeedTree7Shader: {fileID: 4800000, guid: 0f4122b9a743b744abe2fb6a0a88868b, type: 3}
|
||||
m_DefaultSpeedTree8Shader: {fileID: -6465566751694194690, guid: 9920c1f1781549a46ba081a2a15a16ec, type: 3}
|
||||
m_DefaultSpeedTree9Shader: {fileID: -6465566751694194690, guid: cbd3e1cc4ae141c42a30e33b4d666a61, type: 3}
|
||||
|
|
@ -133,6 +141,8 @@ MonoBehaviour:
|
|||
m_CopyDepthPS: {fileID: 4800000, guid: d6dae50ee9e1bfa4db75f19f99355220, type: 3}
|
||||
m_CameraMotionVector: {fileID: 4800000, guid: c56b7e0d4c7cb484e959caeeedae9bbf, type: 3}
|
||||
m_StencilDeferredPS: {fileID: 4800000, guid: e9155b26e1bc55942a41e518703fe304, type: 3}
|
||||
m_ClusterDeferred: {fileID: 4800000, guid: 222cce62363a44a380c36bf03b392608, type: 3}
|
||||
m_StencilDitherMaskSeedPS: {fileID: 4800000, guid: 8c3ee818f2efa514c889881ccb2e95a2, type: 3}
|
||||
m_DBufferClear: {fileID: 4800000, guid: f056d8bd2a1c7e44e9729144b4c70395, type: 3}
|
||||
- rid: 6852985685364965379
|
||||
type: {class: UniversalRenderPipelineDebugShaders, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime}
|
||||
|
|
@ -267,6 +277,129 @@ MonoBehaviour:
|
|||
m_version: 0
|
||||
m_EnableCompilationCaching: 1
|
||||
m_EnableValidityChecks: 1
|
||||
- rid: 8483784701748969479
|
||||
type: {class: PostProcessData/ShaderResources, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime}
|
||||
data:
|
||||
stopNanPS: {fileID: 4800000, guid: 1121bb4e615ca3c48b214e79e841e823, type: 3}
|
||||
subpixelMorphologicalAntialiasingPS: {fileID: 4800000, guid: 63eaba0ebfb82cc43bde059b4a8c65f6, type: 3}
|
||||
gaussianDepthOfFieldPS: {fileID: 4800000, guid: 5e7134d6e63e0bc47a1dd2669cedb379, type: 3}
|
||||
bokehDepthOfFieldPS: {fileID: 4800000, guid: 2aed67ad60045d54ba3a00c91e2d2631, type: 3}
|
||||
cameraMotionBlurPS: {fileID: 4800000, guid: 1edcd131364091c46a17cbff0b1de97a, type: 3}
|
||||
paniniProjectionPS: {fileID: 4800000, guid: a15b78cf8ca26ca4fb2090293153c62c, type: 3}
|
||||
lutBuilderLdrPS: {fileID: 4800000, guid: 65df88701913c224d95fc554db28381a, type: 3}
|
||||
lutBuilderHdrPS: {fileID: 4800000, guid: ec9fec698a3456d4fb18cf8bacb7a2bc, type: 3}
|
||||
bloomPS: {fileID: 4800000, guid: 5f1864addb451f54bae8c86d230f736e, type: 3}
|
||||
temporalAntialiasingPS: {fileID: 4800000, guid: 9c70c1a35ff15f340b38ea84842358bf, type: 3}
|
||||
LensFlareDataDrivenPS: {fileID: 4800000, guid: 6cda457ac28612740adb23da5d39ea92, type: 3}
|
||||
LensFlareScreenSpacePS: {fileID: 4800000, guid: 701880fecb344ea4c9cd0db3407ab287, type: 3}
|
||||
scalingSetupPS: {fileID: 4800000, guid: e8ee25143a34b8c4388709ea947055d1, type: 3}
|
||||
easuPS: {fileID: 4800000, guid: 562b7ae4f629f144aa97780546fce7c6, type: 3}
|
||||
uberPostPS: {fileID: 4800000, guid: e7857e9d0c934dc4f83f270f8447b006, type: 3}
|
||||
finalPostPassPS: {fileID: 4800000, guid: c49e63ed1bbcb334780a3bd19dfed403, type: 3}
|
||||
m_ShaderResourcesVersion: 0
|
||||
- rid: 8483784701748969480
|
||||
type: {class: ScreenSpaceAmbientOcclusionPersistentResources, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime}
|
||||
data:
|
||||
m_Shader: {fileID: 4800000, guid: 0849e84e3d62649e8882e9d6f056a017, type: 3}
|
||||
m_Version: 0
|
||||
- rid: 8483784701748969481
|
||||
type: {class: ScreenSpaceAmbientOcclusionDynamicResources, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime}
|
||||
data:
|
||||
m_BlueNoise256Textures:
|
||||
- {fileID: 2800000, guid: 36f118343fc974119bee3d09e2111500, type: 3}
|
||||
- {fileID: 2800000, guid: 4b7b083e6b6734e8bb2838b0b50a0bc8, type: 3}
|
||||
- {fileID: 2800000, guid: c06cc21c692f94f5fb5206247191eeee, type: 3}
|
||||
- {fileID: 2800000, guid: cb76dd40fa7654f9587f6a344f125c9a, type: 3}
|
||||
- {fileID: 2800000, guid: e32226222ff144b24bf3a5a451de54bc, type: 3}
|
||||
- {fileID: 2800000, guid: 3302065f671a8450b82c9ddf07426f3a, type: 3}
|
||||
- {fileID: 2800000, guid: 56a77a3e8d64f47b6afe9e3c95cb57d5, type: 3}
|
||||
m_Version: 0
|
||||
- rid: 8483784701748969482
|
||||
type: {class: PostProcessData/TextureResources, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime}
|
||||
data:
|
||||
blueNoise16LTex:
|
||||
- {fileID: 2800000, guid: 81200413a40918d4d8702e94db29911c, type: 3}
|
||||
- {fileID: 2800000, guid: d50c5e07c9911a74982bddf7f3075e7b, type: 3}
|
||||
- {fileID: 2800000, guid: 1134690bf9216164dbc75050e35b7900, type: 3}
|
||||
- {fileID: 2800000, guid: 7ce2118f74614a94aa8a0cdf2e6062c3, type: 3}
|
||||
- {fileID: 2800000, guid: 2ca97df9d1801e84a8a8f2c53cb744f0, type: 3}
|
||||
- {fileID: 2800000, guid: e63eef8f54aa9dc4da9a5ac094b503b5, type: 3}
|
||||
- {fileID: 2800000, guid: 39451254daebd6d40b52899c1f1c0c1b, type: 3}
|
||||
- {fileID: 2800000, guid: c94ad916058dff743b0f1c969ddbe660, type: 3}
|
||||
- {fileID: 2800000, guid: ed5ea7ce59ca8ec4f9f14bf470a30f35, type: 3}
|
||||
- {fileID: 2800000, guid: 071e954febf155243a6c81e48f452644, type: 3}
|
||||
- {fileID: 2800000, guid: 96aaab9cc247d0b4c98132159688c1af, type: 3}
|
||||
- {fileID: 2800000, guid: fc3fa8f108657e14486697c9a84ccfc5, type: 3}
|
||||
- {fileID: 2800000, guid: bfed3e498947fcb4890b7f40f54d85b9, type: 3}
|
||||
- {fileID: 2800000, guid: d512512f4af60a442ab3458489412954, type: 3}
|
||||
- {fileID: 2800000, guid: 47a45908f6db0cb44a0d5e961143afec, type: 3}
|
||||
- {fileID: 2800000, guid: 4dcc0502f8586f941b5c4a66717205e8, type: 3}
|
||||
- {fileID: 2800000, guid: 9d92991794bb5864c8085468b97aa067, type: 3}
|
||||
- {fileID: 2800000, guid: 14381521ff11cb74abe3fe65401c23be, type: 3}
|
||||
- {fileID: 2800000, guid: d36f0fe53425e08499a2333cf423634c, type: 3}
|
||||
- {fileID: 2800000, guid: d4044ea2490d63b43aa1765f8efbf8a9, type: 3}
|
||||
- {fileID: 2800000, guid: c9bd74624d8070f429e3f46d161f9204, type: 3}
|
||||
- {fileID: 2800000, guid: d5c9b274310e5524ebe32a4e4da3df1f, type: 3}
|
||||
- {fileID: 2800000, guid: f69770e54f2823f43badf77916acad83, type: 3}
|
||||
- {fileID: 2800000, guid: 10b6c6d22e73dea46a8ab36b6eebd629, type: 3}
|
||||
- {fileID: 2800000, guid: a2ec5cbf5a9b64345ad3fab0912ddf7b, type: 3}
|
||||
- {fileID: 2800000, guid: 1c3c6d69a645b804fa232004b96b7ad3, type: 3}
|
||||
- {fileID: 2800000, guid: d18a24d7b4ed50f4387993566d9d3ae2, type: 3}
|
||||
- {fileID: 2800000, guid: c989e1ed85cf7154caa922fec53e6af6, type: 3}
|
||||
- {fileID: 2800000, guid: ff47e5a0f105eb34883b973e51f4db62, type: 3}
|
||||
- {fileID: 2800000, guid: fa042edbfc40fbd4bad0ab9d505b1223, type: 3}
|
||||
- {fileID: 2800000, guid: 896d9004736809c4fb5973b7c12eb8b9, type: 3}
|
||||
- {fileID: 2800000, guid: 179f794063d2a66478e6e726f84a65bc, type: 3}
|
||||
filmGrainTex:
|
||||
- {fileID: 2800000, guid: 654c582f7f8a5a14dbd7d119cbde215d, type: 3}
|
||||
- {fileID: 2800000, guid: dd77ffd079630404e879388999033049, type: 3}
|
||||
- {fileID: 2800000, guid: 1097e90e1306e26439701489f391a6c0, type: 3}
|
||||
- {fileID: 2800000, guid: f0b67500f7fad3b4c9f2b13e8f41ba6e, type: 3}
|
||||
- {fileID: 2800000, guid: 9930fb4528622b34687b00bbe6883de7, type: 3}
|
||||
- {fileID: 2800000, guid: bd9e8c758250ef449a4b4bfaad7a2133, type: 3}
|
||||
- {fileID: 2800000, guid: 510a2f57334933e4a8dbabe4c30204e4, type: 3}
|
||||
- {fileID: 2800000, guid: b4db8180660810945bf8d55ab44352ad, type: 3}
|
||||
- {fileID: 2800000, guid: fd2fd78b392986e42a12df2177d3b89c, type: 3}
|
||||
- {fileID: 2800000, guid: 5cdee82a77d13994f83b8fdabed7c301, type: 3}
|
||||
smaaAreaTex: {fileID: 2800000, guid: d1f1048909d55cd4fa1126ab998f617e, type: 3}
|
||||
smaaSearchTex: {fileID: 2800000, guid: 51eee22c2a633ef4aada830eed57c3fd, type: 3}
|
||||
m_TexturesResourcesVersion: 0
|
||||
- rid: 8483784701748969483
|
||||
type: {class: RenderingDebuggerRuntimeResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime}
|
||||
data:
|
||||
m_version: 0
|
||||
- rid: 8483784701748969484
|
||||
type: {class: VrsRenderPipelineRuntimeResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime}
|
||||
data:
|
||||
m_TextureComputeShader: {fileID: 7200000, guid: cacb30de6c40c7444bbc78cb0a81fd2a, type: 3}
|
||||
m_VisualizationShader: {fileID: 4800000, guid: 620b55b8040a88d468e94abe55bed5ba, type: 3}
|
||||
m_VisualizationLookupTable:
|
||||
m_Data:
|
||||
- {r: 1, g: 0, b: 0, a: 1}
|
||||
- {r: 1, g: 0.92156863, b: 0.015686275, a: 1}
|
||||
- {r: 1, g: 1, b: 1, a: 1}
|
||||
- {r: 0, g: 1, b: 0, a: 1}
|
||||
- {r: 0.75, g: 0.75, b: 0, a: 1}
|
||||
- {r: 0, g: 0.75, b: 0.55, a: 1}
|
||||
- {r: 0.5, g: 0, b: 0.5, a: 1}
|
||||
- {r: 0.5, g: 0.5, b: 0.5, a: 1}
|
||||
- {r: 0, g: 0, b: 1, a: 1}
|
||||
m_ConversionLookupTable:
|
||||
m_Data:
|
||||
- {r: 1, g: 0, b: 0, a: 1}
|
||||
- {r: 1, g: 0.92156863, b: 0.015686275, a: 1}
|
||||
- {r: 1, g: 1, b: 1, a: 1}
|
||||
- {r: 0, g: 1, b: 0, a: 1}
|
||||
- {r: 0.75, g: 0.75, b: 0, a: 1}
|
||||
- {r: 0, g: 0.75, b: 0.55, a: 1}
|
||||
- {r: 0.5, g: 0, b: 0.5, a: 1}
|
||||
- {r: 0.5, g: 0.5, b: 0.5, a: 1}
|
||||
- {r: 0, g: 0, b: 1, a: 1}
|
||||
- rid: 8483784701748969485
|
||||
type: {class: LightmapSamplingSettings, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime}
|
||||
data:
|
||||
m_Version: 1
|
||||
m_UseBicubicLightmapSampling: 0
|
||||
- rid: 8712630790384254976
|
||||
type: {class: RenderGraphUtilsResources, ns: UnityEngine.Rendering.RenderGraphModule.Util, asm: Unity.RenderPipelines.Core.Runtime}
|
||||
data:
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -135,4 +135,4 @@ MonoBehaviour:
|
|||
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
version: 9
|
||||
version: 10
|
||||
|
|
|
|||
|
|
@ -135,4 +135,4 @@ MonoBehaviour:
|
|||
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
version: 9
|
||||
version: 10
|
||||
|
|
|
|||
|
|
@ -134,4 +134,4 @@ MonoBehaviour:
|
|||
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
version: 9
|
||||
version: 10
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ MonoBehaviour:
|
|||
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
version: 9
|
||||
version: 10
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
|
|
@ -97,6 +97,7 @@ Material:
|
|||
m_Offset: {x: 0, y: 0}
|
||||
m_Ints: []
|
||||
m_Floats:
|
||||
- _AddPrecomputedVelocity: 0
|
||||
- _AlphaClip: 0
|
||||
- _AlphaToMask: 0
|
||||
- _Blend: 0
|
||||
|
|
@ -128,6 +129,7 @@ Material:
|
|||
- _Surface: 0
|
||||
- _UVSec: 0
|
||||
- _WorkflowMode: 1
|
||||
- _XRMotionVectorsPass: 1
|
||||
- _ZWrite: 1
|
||||
m_Colors:
|
||||
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ MonoBehaviour:
|
|||
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
version: 9
|
||||
version: 10
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ MonoBehaviour:
|
|||
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
version: 9
|
||||
version: 10
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
|
|
|
|||
|
|
@ -137,4 +137,4 @@ MonoBehaviour:
|
|||
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
version: 9
|
||||
version: 10
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ MonoBehaviour:
|
|||
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
version: 9
|
||||
version: 10
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
|
|
|
|||
2
Assets/_/Content/Materials/Black.mat
Executable file → Normal file
2
Assets/_/Content/Materials/Black.mat
Executable file → Normal file
|
|
@ -12,7 +12,7 @@ MonoBehaviour:
|
|||
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
version: 9
|
||||
version: 10
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
|
|
|
|||
2
Assets/_/Content/Materials/Blue.mat
Executable file → Normal file
2
Assets/_/Content/Materials/Blue.mat
Executable file → Normal file
|
|
@ -12,7 +12,7 @@ MonoBehaviour:
|
|||
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
version: 9
|
||||
version: 10
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
|
|
|
|||
2
Assets/_/Content/Materials/Gray.mat
Executable file → Normal file
2
Assets/_/Content/Materials/Gray.mat
Executable file → Normal file
|
|
@ -12,7 +12,7 @@ MonoBehaviour:
|
|||
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
version: 9
|
||||
version: 10
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
|
|
|
|||
2
Assets/_/Content/Materials/Green.mat
Executable file → Normal file
2
Assets/_/Content/Materials/Green.mat
Executable file → Normal file
|
|
@ -12,7 +12,7 @@ MonoBehaviour:
|
|||
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
version: 9
|
||||
version: 10
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
|
|
|
|||
2
Assets/_/Content/Materials/Orange.mat
Executable file → Normal file
2
Assets/_/Content/Materials/Orange.mat
Executable file → Normal file
|
|
@ -12,7 +12,7 @@ MonoBehaviour:
|
|||
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
version: 9
|
||||
version: 10
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
|
|
|
|||
2
Assets/_/Content/Materials/Pink.mat
Executable file → Normal file
2
Assets/_/Content/Materials/Pink.mat
Executable file → Normal file
|
|
@ -12,7 +12,7 @@ MonoBehaviour:
|
|||
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
version: 9
|
||||
version: 10
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
|
|
|
|||
2
Assets/_/Content/Materials/Purple.mat
Executable file → Normal file
2
Assets/_/Content/Materials/Purple.mat
Executable file → Normal file
|
|
@ -12,7 +12,7 @@ MonoBehaviour:
|
|||
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
version: 9
|
||||
version: 10
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
|
|
|
|||
2
Assets/_/Content/Materials/Red.mat
Executable file → Normal file
2
Assets/_/Content/Materials/Red.mat
Executable file → Normal file
|
|
@ -12,7 +12,7 @@ MonoBehaviour:
|
|||
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
version: 9
|
||||
version: 10
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
|
|
|
|||
2
Assets/_/Content/Materials/White.mat
Executable file → Normal file
2
Assets/_/Content/Materials/White.mat
Executable file → Normal file
|
|
@ -12,7 +12,7 @@ MonoBehaviour:
|
|||
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
version: 9
|
||||
version: 10
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
|
|
|
|||
2
Assets/_/Content/Materials/Yellow.mat
Executable file → Normal file
2
Assets/_/Content/Materials/Yellow.mat
Executable file → Normal file
|
|
@ -12,7 +12,7 @@ MonoBehaviour:
|
|||
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
version: 9
|
||||
version: 10
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 44cc5e4b4ce644394a7b14151c11fee3
|
||||
NativeFormatImporter:
|
||||
guid: 7c0ce0a4373dc0bb2ab714d658b005ad
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/_/Features/Cheat/Runtime.meta
Normal file
8
Assets/_/Features/Cheat/Runtime.meta
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 734f74e705aeba678b18ee566d42d540
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
17
Assets/_/Features/Cheat/Runtime/Cheat.Runtime.asmdef
Normal file
17
Assets/_/Features/Cheat/Runtime/Cheat.Runtime.asmdef
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"name": "Cheat.Runtime",
|
||||
"rootNamespace": "Cheat.Runtime",
|
||||
"references": [
|
||||
"GUID:2ca720bbf8aa349608caa5ce4acaa603",
|
||||
"GUID:6055be8ebefd69e48b49212b09b47b2f"
|
||||
],
|
||||
"includePlatforms": [],
|
||||
"excludePlatforms": [],
|
||||
"allowUnsafeCode": false,
|
||||
"overrideReferences": false,
|
||||
"precompiledReferences": [],
|
||||
"autoReferenced": true,
|
||||
"defineConstraints": [],
|
||||
"versionDefines": [],
|
||||
"noEngineReferences": false
|
||||
}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 5b013ac9c9f0c7681877b2ae2d0aaf36
|
||||
AssemblyDefinitionImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
230
Assets/_/Features/Cheat/Runtime/Cheat.cs
Normal file
230
Assets/_/Features/Cheat/Runtime/Cheat.cs
Normal file
|
|
@ -0,0 +1,230 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Core.Runtime;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.SceneManagement;
|
||||
|
||||
namespace Cheat.Runtime
|
||||
{
|
||||
public class Cheat : BaseMonobehaviour
|
||||
{
|
||||
|
||||
#region Publics
|
||||
|
||||
//
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region Unity API
|
||||
|
||||
void OnValidate()
|
||||
{
|
||||
# if UNITY_EDITOR
|
||||
|
||||
if (!Application.isPlaying)
|
||||
{
|
||||
GetComponentInChildren<Canvas>().enabled = false;
|
||||
}
|
||||
|
||||
# endif
|
||||
}
|
||||
|
||||
void Awake()
|
||||
{
|
||||
// Liste des actions possibles
|
||||
_commands.Add("quit", args => Application.Quit());
|
||||
_commands.Add("add money", args =>
|
||||
{
|
||||
if (args.Length == 0)
|
||||
{
|
||||
Warning("Usage: add money <amount>");
|
||||
return;
|
||||
}
|
||||
if (!int.TryParse(args[0], out int amount))
|
||||
{
|
||||
Warning($"Invalid amount: {args[0]}");
|
||||
return;
|
||||
}
|
||||
AddMoney(amount);
|
||||
});
|
||||
|
||||
_commands.Add("help", args => CommandsList());
|
||||
|
||||
_canvas = GetComponentInChildren<Canvas>();
|
||||
_canvas.enabled = false;
|
||||
_historyZone = GetComponentInChildren<TMP_Text>();
|
||||
}
|
||||
|
||||
void Start()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
if (Input.GetKeyDown(KeyCode.Tab))
|
||||
{
|
||||
ToggleConsole();
|
||||
}
|
||||
|
||||
if (_consoleOpen)
|
||||
{
|
||||
foreach (char c in Input.inputString)
|
||||
{
|
||||
if (c == '\b') // Backspace
|
||||
{
|
||||
if (_input.Length > 0)
|
||||
_input = _input.Substring(0, _input.Length - 1);
|
||||
}
|
||||
else if (c == '\n' || c == '\r') // Entrée
|
||||
{
|
||||
ProcessCommand(_input);
|
||||
_input = string.Empty;
|
||||
}
|
||||
else
|
||||
{
|
||||
_input += c;
|
||||
}
|
||||
RefreshUI();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region Main Methods
|
||||
|
||||
//
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region Utils
|
||||
|
||||
/* Fonctions privées utiles */
|
||||
|
||||
void RefreshUI()
|
||||
{
|
||||
if (_historyZone == null) return;
|
||||
_historyZone.text = string.Join("\n", _history.ToArray());
|
||||
}
|
||||
|
||||
void CommandsList()
|
||||
{
|
||||
AppendHistory("Rappel des commandes ");
|
||||
foreach (var cmd in _commands)
|
||||
{
|
||||
AppendHistory(cmd.Key);
|
||||
}
|
||||
}
|
||||
|
||||
// Ajoute une ligne d'historique et limite à _historyMaxLines
|
||||
void AppendHistory(string line)
|
||||
{
|
||||
if (string.IsNullOrEmpty(line)) return;
|
||||
|
||||
_history.Enqueue(line);
|
||||
while (_history.Count > _historyMaxLines)
|
||||
_history.Dequeue();
|
||||
}
|
||||
|
||||
void ProcessCommand(string input)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(input)) return;
|
||||
string raw = input.Trim();
|
||||
string lower = raw.ToLower();
|
||||
|
||||
// Find the longest matching command key at the start of the input
|
||||
string matchedKey = _commands.Keys
|
||||
.OrderByDescending(k => k.Length)
|
||||
.FirstOrDefault(k => lower.StartsWith(k));
|
||||
|
||||
if (!string.IsNullOrEmpty(matchedKey))
|
||||
{
|
||||
string argString = lower.Substring(matchedKey.Length).Trim();
|
||||
string[] args = string.IsNullOrEmpty(argString)
|
||||
? Array.Empty<string>()
|
||||
: argString.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
|
||||
AppendHistory(raw);
|
||||
try
|
||||
{
|
||||
_commands[matchedKey].Invoke(args);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Warning($"Error executing '{matchedKey}': {e.Message}");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Warning($"🚨‼️ Command '{lower}' not found");
|
||||
}
|
||||
|
||||
_input = string.Empty;
|
||||
}
|
||||
|
||||
void ToggleConsole()
|
||||
{
|
||||
_consoleOpen = !_consoleOpen;
|
||||
_canvas.enabled = _consoleOpen;
|
||||
GameManager.Instance.IsOnPause = _consoleOpen;
|
||||
|
||||
if (_consoleOpen)
|
||||
{
|
||||
TextCaptured();
|
||||
}
|
||||
}
|
||||
|
||||
void TextCaptured()
|
||||
{
|
||||
foreach (char c in Input.inputString)
|
||||
{
|
||||
_input += c;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Commands Console
|
||||
|
||||
void AddMoney(int amount)
|
||||
{
|
||||
// Update or create a Money fact
|
||||
int current;
|
||||
bool hasMoney = true;
|
||||
try
|
||||
{
|
||||
current = GetFact<int>("Money");
|
||||
}
|
||||
catch
|
||||
{
|
||||
current = 0;
|
||||
hasMoney = false;
|
||||
}
|
||||
|
||||
int newValue = current + amount;
|
||||
SetFact("Money", newValue, FactPersistence.Persistent);
|
||||
AppendHistory($"Money set to {newValue}");
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Privates and Protected
|
||||
|
||||
// Variables privées
|
||||
bool _consoleOpen = false;
|
||||
Canvas _canvas;
|
||||
string _input = string.Empty;
|
||||
Dictionary<string, Action<string[]>> _commands = new Dictionary<string, Action<string[]>>();
|
||||
Queue<string> _history = new Queue<string>();
|
||||
const int _historyMaxLines = 5;
|
||||
TMP_Text _historyZone;
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
2
Assets/_/Features/Cheat/Runtime/Cheat.cs.meta
Normal file
2
Assets/_/Features/Cheat/Runtime/Cheat.cs.meta
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 3d81aa295d15c46f5b729d9afa859acb
|
||||
|
|
@ -10,11 +10,6 @@ namespace Core.Runtime
|
|||
public class GameManager: BaseMonobehaviour
|
||||
{
|
||||
|
||||
/*
|
||||
* Appel depuis ici
|
||||
* Localization => A FAIRE
|
||||
*/
|
||||
|
||||
#region Publics
|
||||
|
||||
public static GameManager Instance { get; private set; }
|
||||
|
|
@ -31,11 +26,11 @@ namespace Core.Runtime
|
|||
{
|
||||
get
|
||||
{
|
||||
return _fact;
|
||||
return m_gameFacts;
|
||||
}
|
||||
set
|
||||
{
|
||||
_fact = value;
|
||||
m_gameFacts = value;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -134,15 +129,13 @@ namespace Core.Runtime
|
|||
// Chargement ou création des paramètres
|
||||
if (m_gameFacts.SaveFileExists("GeneralSettings"))
|
||||
{
|
||||
Debug.Log("<color=green>GeneralSettings exist</color>");
|
||||
LoadFacts("GeneralSettings");
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Log("<color=orange>GeneralSettings does not exist</color>");
|
||||
GeneralSettings settings = new GeneralSettings
|
||||
{
|
||||
Language = EnumLanguage.English,
|
||||
Language = EnumLanguage.French,
|
||||
};
|
||||
SetFact("GeneralSettings", settings, FactPersistence.Persistent);
|
||||
SaveFacts("GeneralSettings");
|
||||
|
|
@ -152,6 +145,16 @@ namespace Core.Runtime
|
|||
LocalizationSystem.Instance.LoadLanguage(CurrentLanguage);
|
||||
}
|
||||
|
||||
void Start()
|
||||
{
|
||||
Debug.Log("Chemin des sauvegardes : " + Application.persistentDataPath);
|
||||
}
|
||||
|
||||
void OnDestroy()
|
||||
{
|
||||
Destroy(Instance);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,8 @@
|
|||
"GUID:2ca720bbf8aa349608caa5ce4acaa603",
|
||||
"GUID:d01b71ecbce444a299cc1623f29e9d35",
|
||||
"GUID:4a640bb60ad60478bba0cc41f9b80929",
|
||||
"GUID:f5d0434d9e8c34eb1a16f4c57b172b85"
|
||||
"GUID:f5d0434d9e8c34eb1a16f4c57b172b85",
|
||||
"GUID:239153993e9574192a1980e14075369e"
|
||||
],
|
||||
"includePlatforms": [],
|
||||
"excludePlatforms": [],
|
||||
|
|
|
|||
91
Assets/_/Features/Decor/Runtime/QuestSign.cs
Normal file
91
Assets/_/Features/Decor/Runtime/QuestSign.cs
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Core.Runtime;
|
||||
using EventSystem.Runtime;
|
||||
using Player.Runtime;
|
||||
using Quests.Runtime;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Decor.Runtime
|
||||
{
|
||||
public class QuestSign: BaseMonobehaviour
|
||||
{
|
||||
#region private & protected
|
||||
|
||||
[SerializeField] GameObject _parchment;
|
||||
int _quests;
|
||||
PlayerClass _player;
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region Unity API
|
||||
|
||||
void Awake()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
void Start()
|
||||
{
|
||||
_player = GetFact<PlayerClass>(GameManager.Instance.Profile);
|
||||
QuestManager.Instance.NotifyAvailableQuestsUpdated(_player.GuildLevel);
|
||||
UpdateParchmentState();
|
||||
}
|
||||
|
||||
void OnEnable()
|
||||
{
|
||||
QuestManager.OnAvailableQuestsUpdated += HandleAvailableChanged;
|
||||
QuestManager.OnQuestCompleted += HandleQuestCompleted;
|
||||
}
|
||||
|
||||
void OnDisable()
|
||||
{
|
||||
QuestManager.OnAvailableQuestsUpdated -= HandleAvailableChanged;
|
||||
QuestManager.OnQuestCompleted -= HandleQuestCompleted;
|
||||
}
|
||||
|
||||
void HandleAvailableChanged(System.Collections.Generic.List<QuestTemplate> _)
|
||||
{
|
||||
UpdateParchmentState();
|
||||
}
|
||||
|
||||
void HandleQuestCompleted(QuestClass _)
|
||||
{
|
||||
UpdateParchmentState();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Main Methods
|
||||
|
||||
//
|
||||
|
||||
#endregion
|
||||
|
||||
#region Utils
|
||||
|
||||
void UpdateParchmentState()
|
||||
{
|
||||
List<QuestTemplate> availableTemplates = QuestManager.Instance.GetAvailableQuests(_player.GuildLevel);
|
||||
var allPossibleQuests = QuestManager.Instance.GetAvailableQuests(_player.GuildLevel);
|
||||
|
||||
// 2. Quêtes déjà démarrées (actives OU complétées)
|
||||
var startedQuests = (QuestManager.Instance.ActiveQuests ?? new List<QuestClass>())
|
||||
.Concat(QuestManager.Instance.CompletedQuests ?? Enumerable.Empty<QuestClass>())
|
||||
.ToList();
|
||||
|
||||
// 3. Quêtes vraiment disponibles = possibles - déjà démarrées
|
||||
bool hasTrulyAvailableQuests = allPossibleQuests
|
||||
.Any(possibleQuest =>
|
||||
!startedQuests.Any(startedQuest =>
|
||||
startedQuest.Name == possibleQuest.data.Name
|
||||
)
|
||||
);
|
||||
_parchment.SetActive(hasTrulyAvailableQuests);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
2
Assets/_/Features/Decor/Runtime/QuestSign.cs.meta
Normal file
2
Assets/_/Features/Decor/Runtime/QuestSign.cs.meta
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
fileFormatVersion: 2
|
||||
guid: ee4d7e155702f0836847d55f31276d2f
|
||||
|
|
@ -7,6 +7,7 @@ namespace EventSystem.Runtime
|
|||
{
|
||||
public static event Action<QuestClass> OnInfoQuestPanel;
|
||||
public static event Action OnRefresh;
|
||||
public static event Action OnNewQuestRegistered;
|
||||
|
||||
public static void RaiseInfoQuestPanel(QuestClass questClass)
|
||||
{
|
||||
|
|
@ -17,5 +18,10 @@ namespace EventSystem.Runtime
|
|||
{
|
||||
OnRefresh?.Invoke();
|
||||
}
|
||||
|
||||
public static void RaiseNewQuestRegistered()
|
||||
{
|
||||
OnNewQuestRegistered?.Invoke();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ namespace MenuSystem.Runtime
|
|||
SetFact<PlayerClass>(saveName, newPlayerClass, FactPersistence.Persistent);
|
||||
SetFact<GameTime>("game_time", new GameTime(), FactPersistence.Persistent);
|
||||
SetFact<List<AdventurerClass>>("my_adventurers", new List<AdventurerClass>(), FactPersistence.Persistent);
|
||||
SetFact<List<QuestClass>>("quests", new List<QuestClass>(), FactPersistence.Persistent);
|
||||
SetFact<List<QuestClass>>("accepted_quests", new List<QuestClass>(), FactPersistence.Persistent);
|
||||
SetFact<List<QuestClass>>("active_quests", new List<QuestClass>(), FactPersistence.Persistent);
|
||||
SetFact<List<QuestClass>>("completed_quests", new List<QuestClass>(), FactPersistence.Persistent);
|
||||
SetFact<Dictionary<Guid, List<QuestEventLog>>>("events_quests_history", new Dictionary<Guid, List<QuestEventLog>>(), FactPersistence.Persistent);
|
||||
|
|
|
|||
|
|
@ -74,7 +74,11 @@ namespace Quests.Runtime
|
|||
case TargetingType.AllHeroes:
|
||||
return assignedAdventurers;
|
||||
case TargetingType.RandomHero:
|
||||
return new List<AdventurerClass> { assignedAdventurers[UnityEngine.Random.Range(0, assignedAdventurers.Count)] };
|
||||
if (assignedAdventurers == null || assignedAdventurers.Count == 0)
|
||||
return new List<AdventurerClass>();
|
||||
int count = assignedAdventurers.Count;
|
||||
int idx = UnityEngine.Random.Range(0, count);
|
||||
return new List<AdventurerClass> { assignedAdventurers[idx] };
|
||||
case TargetingType.LowestHp:
|
||||
return assignedAdventurers
|
||||
.OrderBy(adventurer => adventurer.Health)
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ namespace Quests.Runtime
|
|||
public List<ItemReward> Rewards
|
||||
{
|
||||
get { return _rewards; }
|
||||
set { _rewards = new List<ItemReward>(); }
|
||||
set { _rewards = value ?? new List<ItemReward>(); }
|
||||
}
|
||||
|
||||
public QuestStateEnum State
|
||||
|
|
@ -168,17 +168,31 @@ namespace Quests.Runtime
|
|||
public void InitializeEvents(QuestEventPackSO pack)
|
||||
{
|
||||
ActiveEvents.Clear();
|
||||
|
||||
|
||||
if (pack == null || pack.availableEvents == null || pack.availableEvents.Count == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var pool = new List<QuestEventSO>(pack.availableEvents);
|
||||
int toPick = Mathf.Min(pack.maxEventsToPick, pool.Count);
|
||||
|
||||
int currentTime = 0;
|
||||
if (QuestManager.Instance != null)
|
||||
{
|
||||
currentTime = QuestManager.Instance.currentTimeInQuest;
|
||||
}
|
||||
|
||||
for (int i = 0; i < toPick; i++)
|
||||
{
|
||||
int index = UnityEngine.Random.Range(0, pool.Count);
|
||||
var pickedSO = pool[index];
|
||||
pool.RemoveAt(index);
|
||||
|
||||
ActiveEvents.Add(pickedSO.ToQuestEventClass(QuestManager.Instance.currentTimeInQuest));
|
||||
if (pickedSO != null)
|
||||
{
|
||||
ActiveEvents.Add(pickedSO.ToQuestEventClass(currentTime));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -201,12 +215,35 @@ namespace Quests.Runtime
|
|||
|
||||
public static AdventurerClass GetOneAdventurerFromId(Guid adventurerId)
|
||||
{
|
||||
if (GameManager.Instance.Fact.GetFact<List<AdventurerClass>>("my_adventurers") == null)
|
||||
// Guard against GameManager or Fact system not ready
|
||||
Debug.Log($"ID recherché : {adventurerId}");
|
||||
if (GameManager.Instance == null)
|
||||
{
|
||||
Debug.Log("GameManager introuvable ou pas initialisé");
|
||||
return null;
|
||||
}
|
||||
List<AdventurerClass> currentAdventurers = GameManager.Instance.Fact.GetFact<List<AdventurerClass>>("my_adventurers");
|
||||
return currentAdventurers.Find(adventurer => adventurer.ID == adventurerId);
|
||||
|
||||
if (GameManager.Instance.Fact == null)
|
||||
{
|
||||
Debug.Log("Fact introuvable ou null");
|
||||
return null;
|
||||
}
|
||||
|
||||
var list = GameManager.Instance.Fact.GetFact<List<AdventurerClass>>("my_adventurers");
|
||||
if (list == null)
|
||||
{
|
||||
Debug.Log("Liste des aventuriers est null");
|
||||
return null;
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Log($"Nombre d'Aventuriers : {list.Count}");
|
||||
}
|
||||
|
||||
var adventurer = list.Find(adventurer => adventurer != null && adventurer.ID == adventurerId);
|
||||
Debug.Log($"retourne : {adventurer}");
|
||||
|
||||
return list.Find(adventurer => adventurer != null && adventurer.ID == adventurerId);
|
||||
}
|
||||
|
||||
public static List<Guid> GetIdFromAdventurers(List<AdventurerClass> adventurers)
|
||||
|
|
@ -221,8 +258,13 @@ namespace Quests.Runtime
|
|||
|
||||
public static Guid GetOneIdFromAdventurer(AdventurerClass adventurer)
|
||||
{
|
||||
List<AdventurerClass> currentAdventurers = GameManager.Instance.Fact.GetFact<List<AdventurerClass>>("my_adventurers");
|
||||
return currentAdventurers.Find(adv => adv.ID == adventurer.ID).ID;
|
||||
if (adventurer == null || GameManager.Instance == null || GameManager.Instance.Fact == null)
|
||||
{
|
||||
return Guid.Empty;
|
||||
}
|
||||
var currentAdventurers = GameManager.Instance.Fact.GetFact<List<AdventurerClass>>("my_adventurers");
|
||||
var adv = currentAdventurers?.Find(a => a != null && a.ID == adventurer.ID);
|
||||
return adv != null ? adv.ID : Guid.Empty;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Adventurer.Runtime;
|
||||
|
|
@ -12,9 +13,16 @@ namespace Quests.Runtime
|
|||
public class QuestManager : BaseMonobehaviour
|
||||
{
|
||||
#region Singleton
|
||||
|
||||
public static QuestManager Instance { get; set; }
|
||||
|
||||
static QuestManager _instance;
|
||||
public static QuestManager Instance => _instance ??= new QuestManager();
|
||||
void OnDestroy()
|
||||
{
|
||||
if (Instance == this)
|
||||
{
|
||||
Instance = null;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
|
@ -23,26 +31,81 @@ namespace Quests.Runtime
|
|||
public static event Action<QuestClass> OnQuestCompleted;
|
||||
public static event Action<QuestEvent> OnEventReceived;
|
||||
public static event Action<QuestClass> OnEventFromQuest;
|
||||
public static event Action<List<QuestTemplate>> OnAvailableQuestsUpdated;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Unity API
|
||||
|
||||
void Awake()
|
||||
{
|
||||
if (Instance != null && Instance != this)
|
||||
{
|
||||
Destroy(gameObject);
|
||||
return;
|
||||
}
|
||||
Instance = this;
|
||||
if (_activeEvents == null) _activeEvents = new List<QuestEvent>();
|
||||
}
|
||||
|
||||
void OnEnable()
|
||||
{
|
||||
GameManager.OnTimeAdvanced += CheckMissionsProgress;
|
||||
}
|
||||
|
||||
void OnDisable()
|
||||
{
|
||||
GameManager.OnTimeAdvanced -= CheckMissionsProgress;
|
||||
}
|
||||
|
||||
void Start()
|
||||
{
|
||||
if (_questDatabase != null)
|
||||
{
|
||||
_disponibleQuests = _questDatabase
|
||||
.GetAll()
|
||||
.SelectMany(f => f.questTemplates)
|
||||
.Select(t => t.ToQuestClass(QuestStateEnum.Disponible))
|
||||
.ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
_disponibleQuests = new List<QuestClass>();
|
||||
}
|
||||
|
||||
// Ensure quest lists are initialized to avoid null issues in consumers
|
||||
if (_activeQuests == null) _activeQuests = new List<QuestClass>();
|
||||
if (_completedQuests == null) _completedQuests = new List<QuestClass>();
|
||||
if (_disponibleQuests == null) _disponibleQuests = new List<QuestClass>();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
QuestClass _currentQuest;
|
||||
List<QuestClass> _activeQuests;
|
||||
List<QuestClass> _disponibleQuests;
|
||||
List<QuestClass> _completedQuests;
|
||||
QuestClass _currentQuest;
|
||||
|
||||
public QuestClass CurrentQuest
|
||||
{
|
||||
get => _currentQuest;
|
||||
set => _currentQuest = value;
|
||||
}
|
||||
|
||||
public List<QuestClass> DisponibleQuests
|
||||
{
|
||||
get => _disponibleQuests;
|
||||
set => _disponibleQuests = value;
|
||||
}
|
||||
|
||||
List<QuestClass> _activeQuests;
|
||||
public List<QuestClass> ActiveQuests
|
||||
{
|
||||
get => _activeQuests;
|
||||
set => _activeQuests = value;
|
||||
}
|
||||
|
||||
List<QuestClass> _completedQuests;
|
||||
public List<QuestClass> CompletedQuests
|
||||
{
|
||||
get => _completedQuests;
|
||||
|
|
@ -71,7 +134,7 @@ namespace Quests.Runtime
|
|||
|
||||
public QuestManager()
|
||||
{
|
||||
GameManager.OnTimeAdvanced += CheckMissionsProgress;
|
||||
// Unity will call constructor before Awake; avoid subscribing here.
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
|
@ -83,6 +146,12 @@ namespace Quests.Runtime
|
|||
/// </summary>
|
||||
public void StartQuest(QuestClass quest, List<AdventurerClass> team, GameTime gameTime)
|
||||
{
|
||||
// Enforce state order: must be Accepted before starting
|
||||
if (quest.State != QuestStateEnum.Accepted)
|
||||
{
|
||||
Debug.LogWarning($"Cannot start quest '{quest.Name}' because it is not in Accepted state (current: {quest.State}).");
|
||||
return;
|
||||
}
|
||||
AssignAdventurersToQuest(quest, team);
|
||||
SetQuestTimings(quest, gameTime);
|
||||
UpdateQuestStatus(quest);
|
||||
|
|
@ -93,7 +162,7 @@ namespace Quests.Runtime
|
|||
/// </summary>
|
||||
public void CompleteQuest(QuestClass quest, List<Guid> team)
|
||||
{
|
||||
if (quest.State != QuestStateEnum.Active) return;
|
||||
if (quest.State != QuestStateEnum.InProgress) return;
|
||||
|
||||
ReleaseAdventurers(team);
|
||||
UpdateQuestCompletionStatus(quest);
|
||||
|
|
@ -118,7 +187,16 @@ namespace Quests.Runtime
|
|||
{
|
||||
QuestClass quest = GetQuestById(questId);
|
||||
|
||||
List<QuestEventLog> events = GetFact<Dictionary<Guid, List<QuestEventLog>>>("events_quests_history")[questId];
|
||||
var dict = GetFact<Dictionary<Guid, List<QuestEventLog>>>("events_quests_history");
|
||||
List<QuestEventLog> events = null;
|
||||
if (dict != null && dict.TryGetValue(questId, out var history))
|
||||
{
|
||||
events = history;
|
||||
}
|
||||
else
|
||||
{
|
||||
events = new List<QuestEventLog>();
|
||||
}
|
||||
|
||||
return new QuestSummary(quest, events);
|
||||
}
|
||||
|
|
@ -128,7 +206,8 @@ namespace Quests.Runtime
|
|||
/// </summary>
|
||||
public bool CanSelectedAdventurers()
|
||||
{
|
||||
return _currentQuest != null && _currentQuest.State == QuestStateEnum.Disponible;
|
||||
// Adventurers can be selected only when the quest has been accepted
|
||||
return _currentQuest != null && _currentQuest.State == QuestStateEnum.Accepted;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -136,8 +215,8 @@ namespace Quests.Runtime
|
|||
/// </summary>
|
||||
public bool IsQuestCompleted(string questName)
|
||||
{
|
||||
return ActiveQuests != null
|
||||
&& ActiveQuests.Any(q => q.Name == questName && q.State == QuestStateEnum.Completed);
|
||||
return CompletedQuests != null
|
||||
&& CompletedQuests.Any(q => q.Name == questName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -146,18 +225,44 @@ namespace Quests.Runtime
|
|||
public List<QuestClass> ResolveQuestsList(List<QuestClass> questsFromSave)
|
||||
{
|
||||
List<QuestClass> quests = new List<QuestClass>();
|
||||
foreach (var quest in questsFromSave)
|
||||
foreach (var saved in questsFromSave)
|
||||
{
|
||||
QuestTemplate template = _questDatabase.GetTemplatesByName(quest.Name);
|
||||
QuestTemplate template = _questDatabase.GetTemplatesByName(saved.Name);
|
||||
if (template == null) continue;
|
||||
quests.Add(template.ToQuestClass(quest.State, quest.ID));
|
||||
|
||||
var rebuilt = template.ToQuestClass(saved.State, saved.ID);
|
||||
|
||||
// Restaurer les infos runtime utiles
|
||||
rebuilt.StartSeconds = saved.StartSeconds;
|
||||
rebuilt.EndSeconds = saved.EndSeconds;
|
||||
if (saved.AssignedAdventurersID != null)
|
||||
rebuilt.AssignedAdventurersID = new List<Guid>(saved.AssignedAdventurersID);
|
||||
|
||||
quests.Add(rebuilt);
|
||||
}
|
||||
return quests;
|
||||
}
|
||||
|
||||
public List<QuestTemplate> GetAvailableQuests(int level)
|
||||
{
|
||||
var factory = _questDatabase.GetFactoryForLevel(level);
|
||||
if (factory == null)
|
||||
return new List<QuestTemplate>();
|
||||
return factory.questTemplates
|
||||
.Where(q => q.data.MinLevel <= level)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
|
||||
public void NotifyAvailableQuestsUpdated(int level)
|
||||
{
|
||||
var available = GetAvailableQuests(level);
|
||||
OnAvailableQuestsUpdated?.Invoke(available);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
#region Utils
|
||||
|
||||
/// <summary>
|
||||
/// Assigne des aventuriers à une quête
|
||||
|
|
@ -171,6 +276,18 @@ namespace Quests.Runtime
|
|||
quest.AssignedAdventurersID = new List<Guid>();
|
||||
quest.AssignedAdventurersID.Add(adventurer.ID);
|
||||
}
|
||||
|
||||
// Synchroniser la sauvegarde de la quête avec les aventuriers assignés
|
||||
var saveQuests = GetFact<List<QuestClass>>("accepted_quests");
|
||||
if (saveQuests != null)
|
||||
{
|
||||
var saveQuest = saveQuests.FirstOrDefault(q => q.ID == quest.ID);
|
||||
if (saveQuest != null)
|
||||
{
|
||||
saveQuest.AssignedAdventurersID = new List<Guid>(quest.AssignedAdventurersID);
|
||||
}
|
||||
SaveFacts();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -178,7 +295,7 @@ namespace Quests.Runtime
|
|||
/// </summary>
|
||||
void SetQuestTimings(QuestClass quest, GameTime gameTime)
|
||||
{
|
||||
quest.State = QuestStateEnum.Active;
|
||||
quest.State = QuestStateEnum.InProgress;
|
||||
quest.StartSeconds = gameTime.TotalSeconds;
|
||||
quest.EndSeconds = gameTime.TotalSeconds + (quest.Duration * 60);
|
||||
}
|
||||
|
|
@ -188,13 +305,17 @@ namespace Quests.Runtime
|
|||
/// </summary>
|
||||
void UpdateQuestStatus(QuestClass quest)
|
||||
{
|
||||
_activeQuests.Add(quest);
|
||||
List<QuestClass> saveQuests = GetFact<List<QuestClass>>("quests");
|
||||
// Avoid duplicates in active quests
|
||||
if (_activeQuests.All(q => q.ID != quest.ID))
|
||||
{
|
||||
_activeQuests.Add(quest);
|
||||
}
|
||||
List<QuestClass> saveQuests = GetFact<List<QuestClass>>(("accepted_quests"));
|
||||
foreach (var saveQuest in saveQuests)
|
||||
{
|
||||
if (saveQuest.Name == quest.Name)
|
||||
{
|
||||
saveQuest.State = QuestStateEnum.Active;
|
||||
saveQuest.State = QuestStateEnum.InProgress;
|
||||
saveQuest.StartSeconds = quest.StartSeconds;
|
||||
saveQuest.EndSeconds = quest.EndSeconds;
|
||||
}
|
||||
|
|
@ -207,11 +328,26 @@ namespace Quests.Runtime
|
|||
/// </summary>
|
||||
void ReleaseAdventurers(List<Guid> team)
|
||||
{
|
||||
bool anyChanged = false;
|
||||
foreach (var adventurerId in team)
|
||||
{
|
||||
AdventurerClass adventurer = QuestClass.GetOneAdventurerFromId(adventurerId);
|
||||
if (adventurer != null)
|
||||
if (adventurer == null)
|
||||
{
|
||||
Info($"<color=orange>Aventurer {adventurerId} introuvable</color>");
|
||||
continue;
|
||||
}
|
||||
Info($"<color=orange>{adventurer.Name} est dans la team avec le status dispo : {adventurer.IsAvailable}</color>");
|
||||
if (adventurer != null && adventurer.IsAvailable == false)
|
||||
{
|
||||
adventurer.IsAvailable = true;
|
||||
anyChanged = true;
|
||||
}
|
||||
}
|
||||
if (anyChanged)
|
||||
{
|
||||
Info("<color=cyan>Comme les données on changées, on les sauvegarde.</color>");
|
||||
SaveFacts();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -224,7 +360,7 @@ namespace Quests.Runtime
|
|||
_activeQuests.RemoveAll(q => q.Name == quest.Name);
|
||||
_completedQuests.Add(quest);
|
||||
|
||||
List<QuestClass> quests = GetFact<List<QuestClass>>("quests");
|
||||
List<QuestClass> quests = GetFact<List<QuestClass>>(("accepted_quests"));
|
||||
QuestClass questToUpdate = quests.FirstOrDefault(q => q.ID == quest.ID);
|
||||
if (questToUpdate != null)
|
||||
{
|
||||
|
|
@ -248,16 +384,17 @@ namespace Quests.Runtime
|
|||
void CheckMissionsProgress(int currentSeconds)
|
||||
{
|
||||
if(_activeQuests == null) return;
|
||||
|
||||
|
||||
|
||||
var questsToComplete = new List<QuestClass>();
|
||||
var activeQuests = _activeQuests.Where(q => q.State == QuestStateEnum.Active).ToList();
|
||||
var activeQuests = _activeQuests.Where(q => q.State == QuestStateEnum.InProgress).ToList();
|
||||
|
||||
foreach (var quest in activeQuests)
|
||||
{
|
||||
_snapTime = currentSeconds - quest.StartSeconds;
|
||||
CheckQuestEvents(quest, currentSeconds);
|
||||
|
||||
if (quest.State == QuestStateEnum.Active && currentSeconds >= quest.EndSeconds)
|
||||
if (quest.State == QuestStateEnum.InProgress && currentSeconds >= quest.EndSeconds)
|
||||
{
|
||||
questsToComplete.Add(quest);
|
||||
}
|
||||
|
|
@ -274,14 +411,23 @@ namespace Quests.Runtime
|
|||
/// </summary>
|
||||
void CheckQuestEvents(QuestClass quest, int currentSeconds)
|
||||
{
|
||||
if (quest?.ActiveEvents == null || quest.TriggeredEventsDescriptionKeys == null)
|
||||
return;
|
||||
|
||||
foreach (var questEvent in quest.ActiveEvents)
|
||||
{
|
||||
if (questEvent == null) continue;
|
||||
if (quest.TriggeredEventsDescriptionKeys.Contains(questEvent.DescriptionKey))
|
||||
continue;
|
||||
|
||||
// Skip malformed time windows
|
||||
if (questEvent.MinTimeTrigger > questEvent.MaxTimeTrigger)
|
||||
continue;
|
||||
|
||||
if (_snapTime >= questEvent.MinTimeTrigger && _snapTime <= questEvent.MaxTimeTrigger)
|
||||
{
|
||||
if (Random.Range(0f, 100f) <= questEvent.PercentTrigger)
|
||||
float percent = Mathf.Clamp(questEvent.PercentTrigger, 0f, 100f);
|
||||
if (Random.Range(0f, 100f) <= percent)
|
||||
{
|
||||
TriggerEvent(questEvent, quest);
|
||||
quest.TriggeredEventsDescriptionKeys.Add(questEvent.DescriptionKey);
|
||||
|
|
@ -301,16 +447,22 @@ namespace Quests.Runtime
|
|||
|
||||
var targets = questEvent.GetTargets(quest.AssignedAdventurersID);
|
||||
ApplyEffect(questEvent.Effects, targets);
|
||||
Dictionary<Guid, List<QuestEventLog>> events = GetFact<Dictionary<Guid, List<QuestEventLog>>>("events_quests_history");
|
||||
|
||||
if(!events.ContainsKey(quest.ID))
|
||||
var eventsDict = GetFact<Dictionary<Guid, List<QuestEventLog>>>("events_quests_history");
|
||||
if (eventsDict == null)
|
||||
{
|
||||
events.Add(quest.ID, new List<QuestEventLog>());
|
||||
eventsDict = new Dictionary<Guid, List<QuestEventLog>>();
|
||||
SetFact("events_quests_history", eventsDict, FactPersistence.Persistent);
|
||||
}
|
||||
|
||||
if(!eventsDict.ContainsKey(quest.ID))
|
||||
{
|
||||
eventsDict.Add(quest.ID, new List<QuestEventLog>());
|
||||
}
|
||||
|
||||
QuestEventLog questEventLog = new QuestEventLog(_snapTime, questEvent.Id);
|
||||
|
||||
events[quest.ID].Add(questEventLog);
|
||||
eventsDict[quest.ID].Add(questEventLog);
|
||||
if (_activeEvents == null) _activeEvents = new List<QuestEvent>();
|
||||
_activeEvents.Add(questEvent);
|
||||
SaveFacts();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,8 +2,9 @@ namespace Quests.Runtime
|
|||
{
|
||||
public enum QuestStateEnum
|
||||
{
|
||||
Disponible,
|
||||
Active,
|
||||
Completed,
|
||||
Disponible = 0,
|
||||
Accepted = 1,
|
||||
InProgress = 2,
|
||||
Completed = 3,
|
||||
}
|
||||
}
|
||||
|
|
|
|||
3
Assets/_/Features/Tests/Editor.meta
Normal file
3
Assets/_/Features/Tests/Editor.meta
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: efcd90c5fc4a4d29a9edb30408d27e72
|
||||
timeCreated: 1760191011
|
||||
99
Assets/_/Features/Tests/Editor/QuestManagerTests.cs
Normal file
99
Assets/_/Features/Tests/Editor/QuestManagerTests.cs
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using NUnit.Framework;
|
||||
using UnityEngine;
|
||||
using Quests.Runtime;
|
||||
using Core.Runtime;
|
||||
|
||||
namespace GuildTycoon.Tests.Editor
|
||||
{
|
||||
public class QuestManagerTests
|
||||
{
|
||||
private GameObject _gmGO;
|
||||
private GameObject _qmGO;
|
||||
private GameManager _gameManager;
|
||||
private QuestManager _questManager;
|
||||
|
||||
[SetUp]
|
||||
public void SetUp()
|
||||
{
|
||||
// Create and initialize GameManager (Awake will set up facts dictionary)
|
||||
_gmGO = new GameObject("GameManager_Test");
|
||||
_gameManager = _gmGO.AddComponent<GameManager>();
|
||||
|
||||
// Ensure profile and base facts are set
|
||||
_gameManager.Profile = "UnitTestProfile";
|
||||
_gameManager.Fact = new FactDictionnary();
|
||||
GameManager.m_gameFacts = _gameManager.Fact; // ensure BaseMonobehaviour access works
|
||||
|
||||
// Pre-seed facts used by QuestManager
|
||||
_gameManager.Fact.SetFact("accepted_quests", new List<QuestClass>(), BaseMonobehaviour.FactPersistence.Normal);
|
||||
_gameManager.Fact.SetFact("events_quests_history", new Dictionary<Guid, List<QuestEventLog>>(), BaseMonobehaviour.FactPersistence.Normal);
|
||||
|
||||
// Create QuestManager
|
||||
_qmGO = new GameObject("QuestManager_Test");
|
||||
_questManager = _qmGO.AddComponent<QuestManager>();
|
||||
|
||||
// Initialize lists to avoid nulls and isolate from Start() DB usage
|
||||
_questManager.ActiveQuests = new List<QuestClass>();
|
||||
_questManager.CompletedQuests = new List<QuestClass>();
|
||||
_questManager.DisponibleQuests = new List<QuestClass>();
|
||||
}
|
||||
|
||||
[TearDown]
|
||||
public void TearDown()
|
||||
{
|
||||
if (_qmGO != null) UnityEngine.Object.DestroyImmediate(_qmGO);
|
||||
if (_gmGO != null) UnityEngine.Object.DestroyImmediate(_gmGO);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void CompletingQuest_MovesItFromActiveToCompleted_AndUpdatesFacts()
|
||||
{
|
||||
// Arrange: create a simple quest in progress
|
||||
var questId = Guid.NewGuid();
|
||||
var quest = new QuestClass(questId, "Test Quest", "Desc", "Obj", duration: 1, difficulty: QuestDifficultyEnum.Easy, reward: new List<Item.Runtime.ItemReward>(), minLevel: 1)
|
||||
{
|
||||
State = QuestStateEnum.InProgress,
|
||||
StartSeconds = 0,
|
||||
EndSeconds = 10,
|
||||
AssignedAdventurersID = new List<Guid>()
|
||||
};
|
||||
|
||||
_questManager.ActiveQuests.Add(quest);
|
||||
|
||||
// Seed facts with the same quest so QuestManager can update saved state
|
||||
var accepted = new List<QuestClass> { new QuestClass(questId, quest.Name, quest.Description, quest.Objective, quest.Duration, quest.Difficulty, quest.Rewards, quest.MinLevel) { State = QuestStateEnum.InProgress } };
|
||||
_gameManager.Fact.SetFact("accepted_quests", accepted, BaseMonobehaviour.FactPersistence.Normal);
|
||||
|
||||
QuestClass completedRaised = null;
|
||||
Action<QuestClass> handler = q => completedRaised = q;
|
||||
QuestManager.OnQuestCompleted += handler;
|
||||
|
||||
try
|
||||
{
|
||||
// Act: Directly complete the quest
|
||||
_questManager.CompleteQuest(quest, quest.AssignedAdventurersID);
|
||||
}
|
||||
finally
|
||||
{
|
||||
QuestManager.OnQuestCompleted -= handler; // ensure unsubscribe even if assertion fails
|
||||
}
|
||||
|
||||
// Assert: quest state and lists updated
|
||||
Assert.AreEqual(QuestStateEnum.Completed, quest.State, "La quête devrait être marquée comme complétée.");
|
||||
CollectionAssert.DoesNotContain(_questManager.ActiveQuests, quest, "La quête ne doit plus être dans la liste des quêtes actives.");
|
||||
CollectionAssert.Contains(_questManager.CompletedQuests, quest, "La quête devrait apparaître dans la liste des quêtes complétées.");
|
||||
|
||||
// Facts: accepted_quests should reflect Completed state for the same ID
|
||||
var saved = _gameManager.Fact.GetFact<List<QuestClass>>("accepted_quests");
|
||||
var savedQuest = saved.Find(q => q.ID == questId);
|
||||
Assert.IsNotNull(savedQuest, "La quête devrait être présente dans les faits 'accepted_quests'.");
|
||||
Assert.AreEqual(QuestStateEnum.Completed, savedQuest.State, "L'état sauvegardé de la quête devrait être 'Completed'.");
|
||||
|
||||
// Event notification raised
|
||||
Assert.IsNotNull(completedRaised, "Un événement OnQuestCompleted devrait être déclenché.");
|
||||
Assert.AreEqual(questId, completedRaised.ID, "L'événement devrait concerner la même quête.");
|
||||
}
|
||||
}
|
||||
}
|
||||
3
Assets/_/Features/Tests/Editor/QuestManagerTests.cs.meta
Normal file
3
Assets/_/Features/Tests/Editor/QuestManagerTests.cs.meta
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 64e828a55046493c82c79b4ed49e10ba
|
||||
timeCreated: 1760191011
|
||||
|
|
@ -12,11 +12,14 @@ namespace GameUI.Runtime
|
|||
{
|
||||
#region Unity API
|
||||
|
||||
private void Start()
|
||||
void OnEnable()
|
||||
{
|
||||
AdventurerSignals.OnPortraitCaptured += OnPortraitCapturedHandler;
|
||||
AdventurerSignals.OnRefresh += DisplayAdventurers;
|
||||
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
foreach (var txt in GetComponentsInChildren<TMP_Text>())
|
||||
{
|
||||
txt.text = LocalizationSystem.Instance.GetLocalizedText(txt.text);
|
||||
|
|
@ -26,7 +29,7 @@ namespace GameUI.Runtime
|
|||
}
|
||||
|
||||
|
||||
private void OnDestroy()
|
||||
private void OnDisable()
|
||||
{
|
||||
AdventurerSignals.OnPortraitCaptured -= OnPortraitCapturedHandler;
|
||||
AdventurerSignals.OnRefresh -= DisplayAdventurers;
|
||||
|
|
|
|||
|
|
@ -33,21 +33,16 @@ namespace GameUI.Runtime
|
|||
|
||||
void OnDisable()
|
||||
{
|
||||
// Intentionally left empty during debug to validate first-open rendering.
|
||||
// (We avoid destroying children here to keep the list intact between toggles.)
|
||||
//
|
||||
}
|
||||
|
||||
IEnumerator OpenRoutine()
|
||||
{
|
||||
Info("On rentre dans la routine <OpenRoutine>");
|
||||
// Defer one frame to let Canvas/Scaler/Mask finish their activation cycle
|
||||
yield return null;
|
||||
|
||||
// Generate only if empty (prevents duplicate spawns on reopen)
|
||||
if (_content != null && _content.childCount == 0)
|
||||
{
|
||||
Clear();
|
||||
GenerateAdventurer(20);
|
||||
}
|
||||
GenerateAdventurer(20);
|
||||
|
||||
// Wait until end of frame to ensure instantiated elements are present before forcing layout
|
||||
yield return new WaitForEndOfFrame();
|
||||
|
|
|
|||
|
|
@ -1,3 +0,0 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 6316a3aa107e4d8ba4cd0a842e60caa6
|
||||
timeCreated: 1754590062
|
||||
|
|
@ -92,13 +92,29 @@ namespace GameUI.Runtime
|
|||
_activationButtonText.color = hasAdventurers ? Color.yellow : Color.grey;
|
||||
}
|
||||
|
||||
private void ConfigureUIForQuestState(QuestStateEnum state)
|
||||
void ConfigureUIForQuestState(QuestStateEnum state)
|
||||
{
|
||||
Info($"<color=orange>Etat de la quête : {state}</color>");
|
||||
switch (state)
|
||||
{
|
||||
case QuestStateEnum.Disponible:
|
||||
// Before acceptance: can see info but shouldn't assign adventurers yet
|
||||
_buttonActivation.SetActive(false);
|
||||
_adventurersOnThisQuestPanel.SetActive(false);
|
||||
_adventurersSelection.SetActive(false);
|
||||
_panelRecap.SetActive(false);
|
||||
break;
|
||||
case QuestStateEnum.Accepted:
|
||||
// After acceptance: allow selecting adventurers and launching the quest
|
||||
_buttonActivation.SetActive(true);
|
||||
_adventurersOnThisQuestPanel.SetActive(false);
|
||||
_adventurersSelection.SetActive(true);
|
||||
_panelRecap.SetActive(false);
|
||||
break;
|
||||
case QuestStateEnum.InProgress:
|
||||
_buttonActivation.SetActive(false);
|
||||
_adventurersOnThisQuestPanel.SetActive(true);
|
||||
_adventurersSelection.SetActive(false);
|
||||
_panelRecap.SetActive(false);
|
||||
break;
|
||||
case QuestStateEnum.Completed:
|
||||
|
|
@ -108,13 +124,6 @@ namespace GameUI.Runtime
|
|||
_panelRecap.SetActive(true);
|
||||
_panelRecap.GetComponent<QuestLogsListUI>().ShowFor(QuestManager.Instance.CurrentQuest.ID);
|
||||
break;
|
||||
case QuestStateEnum.Active:
|
||||
Info("La quête est active.");
|
||||
_buttonActivation.SetActive(false);
|
||||
_adventurersOnThisQuestPanel.SetActive(true);
|
||||
_adventurersSelection.SetActive(false);
|
||||
_panelRecap.SetActive(false);
|
||||
break;
|
||||
default:
|
||||
_buttonActivation.SetActive(false);
|
||||
_adventurersOnThisQuestPanel.SetActive(true);
|
||||
|
|
@ -130,6 +139,7 @@ namespace GameUI.Runtime
|
|||
quest = FindMatchingActiveQuest(quest);
|
||||
QuestManager.Instance.CurrentQuest = quest;
|
||||
|
||||
Info($"<color=green><InfoQuestPanel.cs:143></color><color=orange>{quest.Name}</color>");
|
||||
UpdateQuestInfoDisplay(quest);
|
||||
ConfigureUIForQuestState(quest.State);
|
||||
}
|
||||
|
|
@ -153,7 +163,7 @@ namespace GameUI.Runtime
|
|||
return matchingQuest ?? quest;
|
||||
}
|
||||
|
||||
private void UpdateQuestInfoDisplay(QuestClass quest)
|
||||
void UpdateQuestInfoDisplay(QuestClass quest)
|
||||
{
|
||||
m_title.text = LocalizationSystem.Instance.GetLocalizedText(quest?.Name);
|
||||
string descKey = quest?.Description;
|
||||
|
|
|
|||
|
|
@ -57,10 +57,30 @@ namespace GameUI.Runtime
|
|||
|
||||
public void AcceptQuest()
|
||||
{
|
||||
List<QuestClass> quests = GetFact<List<QuestClass>>("quests");
|
||||
quests.Add(_quest);
|
||||
// Ensure state order: Disponible -> Accepted
|
||||
_quest.State = QuestStateEnum.Accepted;
|
||||
|
||||
// Persist in saved quests list, ensure it exists
|
||||
var savedQuests = GetFact<List<QuestClass>>("accepted_quests");
|
||||
if (savedQuests == null)
|
||||
{
|
||||
savedQuests = new List<QuestClass>();
|
||||
SetFact("accepted_quests", savedQuests, FactPersistence.Persistent);
|
||||
}
|
||||
// Avoid duplicates by GUID
|
||||
if (!savedQuests.Any(q => q.ID == _quest.ID))
|
||||
{
|
||||
savedQuests.Add(_quest);
|
||||
}
|
||||
|
||||
SaveFacts();
|
||||
|
||||
// Refresh quest UIs and availability board
|
||||
QuestSignals.RaiseRefreshQuests();
|
||||
var player = GetFact<Player.Runtime.PlayerClass>(GameManager.Instance.Profile);
|
||||
QuestManager.Instance.NotifyAvailableQuestsUpdated(player.GuildLevel);
|
||||
|
||||
// Remove the accepted card from the board
|
||||
Destroy(gameObject);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ namespace GameUI.Runtime
|
|||
m_check.SetActive(false);
|
||||
m_hourglass.SetActive(false);
|
||||
break;
|
||||
case QuestStateEnum.Active:
|
||||
case QuestStateEnum.InProgress:
|
||||
m_check.SetActive(false);
|
||||
m_hourglass.SetActive(true);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Core.Runtime;
|
||||
|
|
@ -12,74 +11,42 @@ namespace GameUI.Runtime
|
|||
{
|
||||
public class QuestsBoardPanel : BaseMonobehaviour
|
||||
{
|
||||
|
||||
#region Publics
|
||||
|
||||
public QuestFactoryDatabase _questFactoryDatabase;
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region Unity API
|
||||
|
||||
void OnEnable()
|
||||
{
|
||||
_player = GetFact<PlayerClass>(GameManager.Instance.Profile);
|
||||
QuestManager.OnAvailableQuestsUpdated += OnAvailableQuestsChanged;
|
||||
}
|
||||
|
||||
/*void Start()
|
||||
void OnDisable()
|
||||
{
|
||||
foreach (var txt in GetComponentsInChildren<TMP_Text>())
|
||||
{
|
||||
txt.text = LocalizationSystem.Instance.GetLocalizedText(txt.text);
|
||||
}
|
||||
QuestManager.OnAvailableQuestsUpdated -= OnAvailableQuestsChanged;
|
||||
}
|
||||
|
||||
var factory = _questFactoryDatabase.GetFactoryForLevel(_player.GuildLevel);
|
||||
|
||||
if (factory != null)
|
||||
{
|
||||
var availableTemplates = factory.questTemplates
|
||||
.Where(q => q.data.MinLevel <= _player.GuildLevel)
|
||||
.ToList();
|
||||
|
||||
List<QuestClass> acceptedQuestNames = new List<QuestClass>();
|
||||
if (FactExists<List<QuestClass>>("quests", out _))
|
||||
{
|
||||
acceptedQuestNames = GetFact<List<QuestClass>>("quests");
|
||||
}
|
||||
|
||||
foreach (var quest in availableTemplates)
|
||||
{
|
||||
if (acceptedQuestNames != null && acceptedQuestNames.Any(q => q.ID == quest.data.ID))
|
||||
continue;
|
||||
|
||||
DisplayCard(quest);
|
||||
}
|
||||
}
|
||||
}*/
|
||||
void Start()
|
||||
{
|
||||
InitializeLocalization();
|
||||
|
||||
List<QuestTemplate> availableTemplates = GetAvailableQuests();
|
||||
|
||||
List<QuestClass> acceptedQuests = GetAcceptedQuests();
|
||||
|
||||
List<QuestTemplate> availableTemplates = QuestManager.Instance.GetAvailableQuests(_player.GuildLevel);
|
||||
List<QuestClass> acceptedQuests = QuestManager.Instance.ActiveQuests;
|
||||
DisplayAvailableQuests(availableTemplates, acceptedQuests);
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region Main Methods
|
||||
|
||||
//
|
||||
|
||||
#region Public
|
||||
|
||||
void OnAvailableQuestsChanged(List<QuestTemplate> availableTemplates)
|
||||
{
|
||||
List<QuestClass> acceptedQuests = QuestManager.Instance.ActiveQuests;
|
||||
ClearPanel();
|
||||
DisplayAvailableQuests(availableTemplates, acceptedQuests);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region Utils
|
||||
|
||||
|
||||
void InitializeLocalization()
|
||||
{
|
||||
foreach (var txt in GetComponentsInChildren<TMP_Text>())
|
||||
|
|
@ -88,51 +55,91 @@ namespace GameUI.Runtime
|
|||
}
|
||||
}
|
||||
|
||||
List<QuestTemplate> GetAvailableQuests()
|
||||
void ClearPanel()
|
||||
{
|
||||
var factory = _questFactoryDatabase.GetFactoryForLevel(_player.GuildLevel);
|
||||
if (factory == null)
|
||||
return new List<QuestTemplate>();
|
||||
return factory.questTemplates
|
||||
.Where(q => q.data.MinLevel <= _player.GuildLevel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
List<QuestClass> GetAcceptedQuests()
|
||||
{
|
||||
if (FactExists<List<QuestClass>>("quests", out _))
|
||||
foreach (Transform child in _panel.transform)
|
||||
{
|
||||
return GetFact<List<QuestClass>>("quests");
|
||||
Destroy(child.gameObject);
|
||||
}
|
||||
return new List<QuestClass>();
|
||||
}
|
||||
|
||||
void DisplayAvailableQuests(List<QuestTemplate> availableTemplates, List<QuestClass> acceptedQuests)
|
||||
{
|
||||
foreach(var quest in availableTemplates)
|
||||
// Build a set of started/accepted quest IDs to filter out from the board
|
||||
var startedIds = new HashSet<System.Guid>();
|
||||
// Active (in progress)
|
||||
foreach (var q in QuestManager.Instance.ActiveQuests ?? new List<QuestClass>())
|
||||
{
|
||||
if (acceptedQuests.Any(q => q.Name == quest.data.Name))
|
||||
continue;
|
||||
DisplayCard(quest);
|
||||
if (q != null && q.ID != System.Guid.Empty) startedIds.Add(q.ID);
|
||||
}
|
||||
}
|
||||
|
||||
// Completed
|
||||
foreach (var q in QuestManager.Instance.CompletedQuests ?? new List<QuestClass>())
|
||||
{
|
||||
if (q != null && q.ID != System.Guid.Empty) startedIds.Add(q.ID);
|
||||
}
|
||||
// Accepted but not yet started (persisted list)
|
||||
try
|
||||
{
|
||||
if (FactExists<List<QuestClass>>("accepted_quests", out var accepted) && accepted != null)
|
||||
{
|
||||
foreach (var q in accepted)
|
||||
{
|
||||
if (q != null && q.ID != System.Guid.Empty) startedIds.Add(q.ID);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Try to read anyway (some implementations auto-initialize facts)
|
||||
var fallbackAccepted = GetFact<List<QuestClass>>("accepted_quests");
|
||||
if (fallbackAccepted != null)
|
||||
{
|
||||
foreach (var q in fallbackAccepted)
|
||||
{
|
||||
if (q != null && q.ID != System.Guid.Empty) startedIds.Add(q.ID);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
// If facts system isn't ready, just skip; board will refresh later
|
||||
}
|
||||
|
||||
foreach (var template in availableTemplates)
|
||||
{
|
||||
// Skip if this template already started/accepted (by GUID)
|
||||
if (System.Guid.TryParse(template.m_assetGuid, out var guid) && startedIds.Contains(guid))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
DisplayCard(template);
|
||||
}
|
||||
}
|
||||
|
||||
void DisplayCard(QuestTemplate quest)
|
||||
{
|
||||
GameObject GO = Instantiate(_questCardPrefab, _panel.transform);
|
||||
QuestCardUI card = GO.GetComponent<QuestCardUI>();
|
||||
card.Setup(quest.ToQuestClass(QuestStateEnum.Disponible));
|
||||
// Use the template's asset GUID as the quest ID so we can track acceptance/completion by template
|
||||
if (System.Guid.TryParse(quest.m_assetGuid, out var templateGuid))
|
||||
{
|
||||
card.Setup(quest.ToQuestClass(QuestStateEnum.Disponible, templateGuid));
|
||||
}
|
||||
else
|
||||
{
|
||||
// Fallback: generate a new quest with a random ID
|
||||
card.Setup(quest.ToQuestClass(QuestStateEnum.Disponible));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region Privates and Protected
|
||||
|
||||
|
||||
PlayerClass _player;
|
||||
[SerializeField] GameObject _panel;
|
||||
[SerializeField] GameObject _questCardPrefab;
|
||||
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -44,9 +44,9 @@ namespace GameUI.Runtime
|
|||
Destroy(child.gameObject);
|
||||
}
|
||||
|
||||
if (FactExists<List<QuestClass>>("quests", out _))
|
||||
if (FactExists<List<QuestClass>>(("accepted_quests"), out _))
|
||||
{
|
||||
List<QuestClass> questsFromSave = GetFact<List<QuestClass>>("quests");
|
||||
List<QuestClass> questsFromSave = GetFact<List<QuestClass>>(("accepted_quests"));
|
||||
|
||||
List<QuestClass> quests = QuestManager.Instance.ResolveQuestsList(questsFromSave);
|
||||
foreach (var quest in quests)
|
||||
|
|
@ -92,7 +92,6 @@ namespace GameUI.Runtime
|
|||
|
||||
#endregion
|
||||
|
||||
|
||||
#region privates and protected
|
||||
|
||||
[SerializeField] GameObject _panel;
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -510,6 +510,22 @@ PrefabInstance:
|
|||
propertyPath: m_Name
|
||||
value: TitleScreen
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2179967820374959420, guid: adfb75df64ce143cb95a53ac495f35f2, type: 3}
|
||||
propertyPath: m_margin.w
|
||||
value: -93.406
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2530292537717208226, guid: adfb75df64ce143cb95a53ac495f35f2, type: 3}
|
||||
propertyPath: m_fontSize
|
||||
value: 40
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2530292537717208226, guid: adfb75df64ce143cb95a53ac495f35f2, type: 3}
|
||||
propertyPath: m_margin.x
|
||||
value: -133.15508
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2530292537717208226, guid: adfb75df64ce143cb95a53ac495f35f2, type: 3}
|
||||
propertyPath: m_fontSizeBase
|
||||
value: 40
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3495241234606410280, guid: adfb75df64ce143cb95a53ac495f35f2, type: 3}
|
||||
propertyPath: m_isVerbose
|
||||
value: 0
|
||||
|
|
@ -586,6 +602,10 @@ PrefabInstance:
|
|||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5546267198278292285, guid: adfb75df64ce143cb95a53ac495f35f2, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 220
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5554127117894142088, guid: adfb75df64ce143cb95a53ac495f35f2, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
|
|
|
|||
|
|
@ -1,18 +1,19 @@
|
|||
{
|
||||
"dependencies": {
|
||||
"com.unity.2d.sprite": "1.0.0",
|
||||
"com.unity.ai.navigation": "2.0.6",
|
||||
"com.unity.collab-proxy": "2.8.2",
|
||||
"com.unity.ide.rider": "3.0.36",
|
||||
"com.unity.ide.visualstudio": "2.0.22",
|
||||
"com.unity.inputsystem": "1.13.1",
|
||||
"com.unity.ai.navigation": "2.0.9",
|
||||
"com.unity.collab-proxy": "2.9.3",
|
||||
"com.unity.ide.rider": "3.0.38",
|
||||
"com.unity.ide.visualstudio": "2.0.23",
|
||||
"com.unity.inputsystem": "1.14.2",
|
||||
"com.unity.multiplayer.center": "1.0.0",
|
||||
"com.unity.nuget.newtonsoft-json": "3.2.1",
|
||||
"com.unity.render-pipelines.universal": "17.0.3",
|
||||
"com.unity.test-framework": "1.4.6",
|
||||
"com.unity.timeline": "1.8.7",
|
||||
"com.unity.render-pipelines.universal": "17.2.0",
|
||||
"com.unity.test-framework": "1.6.0",
|
||||
"com.unity.timeline": "1.8.9",
|
||||
"com.unity.toolchain.linux-x86_64": "2.0.10",
|
||||
"com.unity.ugui": "2.0.0",
|
||||
"com.unity.visualscripting": "1.9.5",
|
||||
"com.unity.visualscripting": "1.9.7",
|
||||
"com.unity.modules.accessibility": "1.0.0",
|
||||
"com.unity.modules.ai": "1.0.0",
|
||||
"com.unity.modules.androidjni": "1.0.0",
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
"dependencies": {}
|
||||
},
|
||||
"com.unity.ai.navigation": {
|
||||
"version": "2.0.6",
|
||||
"version": "2.0.9",
|
||||
"depth": 0,
|
||||
"source": "registry",
|
||||
"dependencies": {
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
"url": "https://packages.unity.com"
|
||||
},
|
||||
"com.unity.burst": {
|
||||
"version": "1.8.19",
|
||||
"version": "1.8.25",
|
||||
"depth": 2,
|
||||
"source": "registry",
|
||||
"dependencies": {
|
||||
|
|
@ -26,20 +26,21 @@
|
|||
"url": "https://packages.unity.com"
|
||||
},
|
||||
"com.unity.collab-proxy": {
|
||||
"version": "2.8.2",
|
||||
"version": "2.9.3",
|
||||
"depth": 0,
|
||||
"source": "registry",
|
||||
"dependencies": {},
|
||||
"url": "https://packages.unity.com"
|
||||
},
|
||||
"com.unity.collections": {
|
||||
"version": "2.5.1",
|
||||
"version": "2.5.7",
|
||||
"depth": 2,
|
||||
"source": "registry",
|
||||
"dependencies": {
|
||||
"com.unity.burst": "1.8.17",
|
||||
"com.unity.test-framework": "1.4.5",
|
||||
"com.unity.nuget.mono-cecil": "1.11.4",
|
||||
"com.unity.burst": "1.8.19",
|
||||
"com.unity.mathematics": "1.3.2",
|
||||
"com.unity.test-framework": "1.4.6",
|
||||
"com.unity.nuget.mono-cecil": "1.11.5",
|
||||
"com.unity.test-framework.performance": "3.0.3"
|
||||
},
|
||||
"url": "https://packages.unity.com"
|
||||
|
|
@ -47,12 +48,11 @@
|
|||
"com.unity.ext.nunit": {
|
||||
"version": "2.0.5",
|
||||
"depth": 1,
|
||||
"source": "registry",
|
||||
"dependencies": {},
|
||||
"url": "https://packages.unity.com"
|
||||
"source": "builtin",
|
||||
"dependencies": {}
|
||||
},
|
||||
"com.unity.ide.rider": {
|
||||
"version": "3.0.36",
|
||||
"version": "3.0.38",
|
||||
"depth": 0,
|
||||
"source": "registry",
|
||||
"dependencies": {
|
||||
|
|
@ -61,7 +61,7 @@
|
|||
"url": "https://packages.unity.com"
|
||||
},
|
||||
"com.unity.ide.visualstudio": {
|
||||
"version": "2.0.22",
|
||||
"version": "2.0.23",
|
||||
"depth": 0,
|
||||
"source": "registry",
|
||||
"dependencies": {
|
||||
|
|
@ -70,7 +70,7 @@
|
|||
"url": "https://packages.unity.com"
|
||||
},
|
||||
"com.unity.inputsystem": {
|
||||
"version": "1.13.1",
|
||||
"version": "1.14.2",
|
||||
"depth": 0,
|
||||
"source": "registry",
|
||||
"dependencies": {
|
||||
|
|
@ -94,7 +94,7 @@
|
|||
}
|
||||
},
|
||||
"com.unity.nuget.mono-cecil": {
|
||||
"version": "1.11.4",
|
||||
"version": "1.11.5",
|
||||
"depth": 3,
|
||||
"source": "registry",
|
||||
"dependencies": {},
|
||||
|
|
@ -108,7 +108,7 @@
|
|||
"url": "https://packages.unity.com"
|
||||
},
|
||||
"com.unity.render-pipelines.core": {
|
||||
"version": "17.0.3",
|
||||
"version": "17.2.0",
|
||||
"depth": 1,
|
||||
"source": "builtin",
|
||||
"dependencies": {
|
||||
|
|
@ -123,12 +123,12 @@
|
|||
}
|
||||
},
|
||||
"com.unity.render-pipelines.universal": {
|
||||
"version": "17.0.3",
|
||||
"version": "17.2.0",
|
||||
"depth": 0,
|
||||
"source": "builtin",
|
||||
"dependencies": {
|
||||
"com.unity.render-pipelines.core": "17.0.3",
|
||||
"com.unity.shadergraph": "17.0.3",
|
||||
"com.unity.render-pipelines.core": "17.2.0",
|
||||
"com.unity.shadergraph": "17.2.0",
|
||||
"com.unity.render-pipelines.universal-config": "17.0.3"
|
||||
}
|
||||
},
|
||||
|
|
@ -158,37 +158,52 @@
|
|||
"url": "https://packages.unity.com"
|
||||
},
|
||||
"com.unity.shadergraph": {
|
||||
"version": "17.0.3",
|
||||
"version": "17.2.0",
|
||||
"depth": 1,
|
||||
"source": "builtin",
|
||||
"dependencies": {
|
||||
"com.unity.render-pipelines.core": "17.0.3",
|
||||
"com.unity.render-pipelines.core": "17.2.0",
|
||||
"com.unity.searcher": "4.9.3"
|
||||
}
|
||||
},
|
||||
"com.unity.test-framework": {
|
||||
"version": "1.4.6",
|
||||
"depth": 0,
|
||||
"com.unity.sysroot": {
|
||||
"version": "2.0.10",
|
||||
"depth": 1,
|
||||
"source": "registry",
|
||||
"dependencies": {},
|
||||
"url": "https://packages.unity.com"
|
||||
},
|
||||
"com.unity.sysroot.linux-x86_64": {
|
||||
"version": "2.0.9",
|
||||
"depth": 1,
|
||||
"source": "registry",
|
||||
"dependencies": {
|
||||
"com.unity.sysroot": "2.0.10"
|
||||
},
|
||||
"url": "https://packages.unity.com"
|
||||
},
|
||||
"com.unity.test-framework": {
|
||||
"version": "1.6.0",
|
||||
"depth": 0,
|
||||
"source": "builtin",
|
||||
"dependencies": {
|
||||
"com.unity.ext.nunit": "2.0.3",
|
||||
"com.unity.modules.imgui": "1.0.0",
|
||||
"com.unity.modules.jsonserialize": "1.0.0"
|
||||
},
|
||||
"url": "https://packages.unity.com"
|
||||
}
|
||||
},
|
||||
"com.unity.test-framework.performance": {
|
||||
"version": "3.0.3",
|
||||
"version": "3.2.0",
|
||||
"depth": 3,
|
||||
"source": "registry",
|
||||
"dependencies": {
|
||||
"com.unity.test-framework": "1.1.31",
|
||||
"com.unity.test-framework": "1.1.33",
|
||||
"com.unity.modules.jsonserialize": "1.0.0"
|
||||
},
|
||||
"url": "https://packages.unity.com"
|
||||
},
|
||||
"com.unity.timeline": {
|
||||
"version": "1.8.7",
|
||||
"version": "1.8.9",
|
||||
"depth": 0,
|
||||
"source": "registry",
|
||||
"dependencies": {
|
||||
|
|
@ -199,6 +214,16 @@
|
|||
},
|
||||
"url": "https://packages.unity.com"
|
||||
},
|
||||
"com.unity.toolchain.linux-x86_64": {
|
||||
"version": "2.0.10",
|
||||
"depth": 0,
|
||||
"source": "registry",
|
||||
"dependencies": {
|
||||
"com.unity.sysroot": "2.0.10",
|
||||
"com.unity.sysroot.linux-x86_64": "2.0.9"
|
||||
},
|
||||
"url": "https://packages.unity.com"
|
||||
},
|
||||
"com.unity.ugui": {
|
||||
"version": "2.0.0",
|
||||
"depth": 0,
|
||||
|
|
@ -209,7 +234,7 @@
|
|||
}
|
||||
},
|
||||
"com.unity.visualscripting": {
|
||||
"version": "1.9.5",
|
||||
"version": "1.9.7",
|
||||
"depth": 0,
|
||||
"source": "registry",
|
||||
"dependencies": {
|
||||
|
|
@ -366,7 +391,8 @@
|
|||
"com.unity.modules.ui": "1.0.0",
|
||||
"com.unity.modules.imgui": "1.0.0",
|
||||
"com.unity.modules.jsonserialize": "1.0.0",
|
||||
"com.unity.modules.hierarchycore": "1.0.0"
|
||||
"com.unity.modules.hierarchycore": "1.0.0",
|
||||
"com.unity.modules.physics": "1.0.0"
|
||||
}
|
||||
},
|
||||
"com.unity.modules.umbra": {
|
||||
|
|
|
|||
|
|
@ -86,6 +86,7 @@ PlayerSettings:
|
|||
muteOtherAudioSources: 0
|
||||
Prepare IOS For Recording: 0
|
||||
Force IOS Speakers When Recording: 0
|
||||
audioSpatialExperience: 0
|
||||
deferSystemGesturesMode: 0
|
||||
hideHomeButton: 0
|
||||
submitAnalytics: 1
|
||||
|
|
@ -132,6 +133,7 @@ PlayerSettings:
|
|||
switchNVNMaxPublicSamplerIDCount: 0
|
||||
switchMaxWorkerMultiple: 8
|
||||
switchNVNGraphicsFirmwareMemory: 32
|
||||
switchGraphicsJobsSyncAfterKick: 1
|
||||
vulkanNumSwapchainBuffers: 3
|
||||
vulkanEnableSetSRGBWrite: 0
|
||||
vulkanEnablePreTransform: 1
|
||||
|
|
@ -274,6 +276,9 @@ PlayerSettings:
|
|||
AndroidBuildApkPerCpuArchitecture: 0
|
||||
AndroidTVCompatibility: 0
|
||||
AndroidIsGame: 1
|
||||
androidAppCategory: 3
|
||||
useAndroidAppCategory: 1
|
||||
androidAppCategoryOther:
|
||||
AndroidEnableTango: 0
|
||||
androidEnableBanner: 1
|
||||
androidUseLowAccuracyLocation: 0
|
||||
|
|
@ -517,7 +522,10 @@ PlayerSettings:
|
|||
m_Height: 720
|
||||
m_Kind: 1
|
||||
m_SubKind:
|
||||
m_BuildTargetBatching: []
|
||||
m_BuildTargetBatching:
|
||||
- m_BuildTarget: Standalone
|
||||
m_StaticBatching: 1
|
||||
m_DynamicBatching: 0
|
||||
m_BuildTargetShaderSettings: []
|
||||
m_BuildTargetGraphicsJobs: []
|
||||
m_BuildTargetGraphicsJobMode: []
|
||||
|
|
@ -543,6 +551,7 @@ PlayerSettings:
|
|||
- serializedVersion: 2
|
||||
m_BuildTarget: Android
|
||||
m_EncodingQuality: 1
|
||||
m_BuildTargetGroupHDRCubemapEncodingQuality: []
|
||||
m_BuildTargetGroupLightmapSettings: []
|
||||
m_BuildTargetGroupLoadStoreDebugModeSettings: []
|
||||
m_BuildTargetNormalMapEncoding:
|
||||
|
|
@ -811,12 +820,12 @@ PlayerSettings:
|
|||
webGLMemoryLinearGrowthStep: 16
|
||||
webGLMemoryGeometricGrowthStep: 0.2
|
||||
webGLMemoryGeometricGrowthCap: 96
|
||||
webGLEnableWebGPU: 0
|
||||
webGLPowerPreference: 2
|
||||
webGLWebAssemblyTable: 0
|
||||
webGLWebAssemblyBigInt: 0
|
||||
webGLCloseOnQuit: 0
|
||||
webWasm2023: 0
|
||||
webEnableSubmoduleStrippingCompatibility: 0
|
||||
scriptingDefineSymbols:
|
||||
Android: DOTWEEN
|
||||
EmbeddedLinux: DOTWEEN
|
||||
|
|
@ -946,3 +955,5 @@ PlayerSettings:
|
|||
insecureHttpOption: 0
|
||||
androidVulkanDenyFilterList: []
|
||||
androidVulkanAllowFilterList: []
|
||||
androidVulkanDeviceFilterListAsset: {fileID: 0}
|
||||
d3d12DeviceFilterListAsset: {fileID: 0}
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
m_EditorVersion: 6000.0.39f1
|
||||
m_EditorVersionWithRevision: 6000.0.39f1 (15ea7ed0b100)
|
||||
m_EditorVersion: 6000.2.7f2
|
||||
m_EditorVersionWithRevision: 6000.2.7f2 (2b518236b676)
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ MonoBehaviour:
|
|||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
shaderVariantLimit: 128
|
||||
overrideShaderVariantLimit: 0
|
||||
customInterpolatorErrorThreshold: 32
|
||||
customInterpolatorWarningThreshold: 16
|
||||
customHeatmapValues: {fileID: 0}
|
||||
|
|
|
|||
|
|
@ -12,4 +12,4 @@ MonoBehaviour:
|
|||
m_Script: {fileID: 11500000, guid: 247994e1f5a72c2419c26a37e9334c01, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_LastMaterialVersion: 9
|
||||
m_LastMaterialVersion: 10
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue