Compare commits

...

8 commits

60 changed files with 2230 additions and 15455 deletions

BIN
.DS_Store vendored

Binary file not shown.

5
.vscode/extensions.json vendored Normal file
View file

@ -0,0 +1,5 @@
{
"recommendations": [
"visualstudiotoolsforunity.vstuc"
]
}

10
.vscode/launch.json vendored Normal file
View 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
View 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"
}

View file

@ -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:

View file

@ -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

View file

@ -135,4 +135,4 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
m_Name:
m_EditorClassIdentifier:
version: 9
version: 10

View file

@ -135,4 +135,4 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
m_Name:
m_EditorClassIdentifier:
version: 9
version: 10

View file

@ -134,4 +134,4 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
m_Name:
m_EditorClassIdentifier:
version: 9
version: 10

View 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
@ -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}

View 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

View 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

View file

@ -137,4 +137,4 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
m_Name:
m_EditorClassIdentifier:
version: 9
version: 10

View 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/Black.mat Executable file → Normal file
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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

View file

@ -1,8 +1,8 @@
fileFormatVersion: 2
guid: 44cc5e4b4ce644394a7b14151c11fee3
NativeFormatImporter:
guid: 7c0ce0a4373dc0bb2ab714d658b005ad
folderAsset: yes
DefaultImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 734f74e705aeba678b18ee566d42d540
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View 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
}

View file

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 5b013ac9c9f0c7681877b2ae2d0aaf36
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View 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
}
}

View file

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 3d81aa295d15c46f5b729d9afa859acb

View file

@ -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

View file

@ -5,7 +5,8 @@
"GUID:2ca720bbf8aa349608caa5ce4acaa603",
"GUID:d01b71ecbce444a299cc1623f29e9d35",
"GUID:4a640bb60ad60478bba0cc41f9b80929",
"GUID:f5d0434d9e8c34eb1a16f4c57b172b85"
"GUID:f5d0434d9e8c34eb1a16f4c57b172b85",
"GUID:239153993e9574192a1980e14075369e"
],
"includePlatforms": [],
"excludePlatforms": [],

View 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
}
}

View file

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: ee4d7e155702f0836847d55f31276d2f

View file

@ -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();
}
}
}

View file

@ -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);

View file

@ -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)

View file

@ -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

View file

@ -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();
}

View file

@ -2,8 +2,9 @@ namespace Quests.Runtime
{
public enum QuestStateEnum
{
Disponible,
Active,
Completed,
Disponible = 0,
Accepted = 1,
InProgress = 2,
Completed = 3,
}
}

View file

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: efcd90c5fc4a4d29a9edb30408d27e72
timeCreated: 1760191011

View 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.");
}
}
}

View file

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 64e828a55046493c82c79b4ed49e10ba
timeCreated: 1760191011

View file

@ -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;

View file

@ -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();

View file

@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: 6316a3aa107e4d8ba4cd0a842e60caa6
timeCreated: 1754590062

View file

@ -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;

View file

@ -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);
}

View file

@ -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;

View file

@ -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
}
}
}

View file

@ -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

View file

@ -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

View file

@ -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",

View file

@ -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": {

View file

@ -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}

View file

@ -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)

View file

@ -13,6 +13,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
shaderVariantLimit: 128
overrideShaderVariantLimit: 0
customInterpolatorErrorThreshold: 32
customInterpolatorWarningThreshold: 16
customHeatmapValues: {fileID: 0}

View file

@ -12,4 +12,4 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 247994e1f5a72c2419c26a37e9334c01, type: 3}
m_Name:
m_EditorClassIdentifier:
m_LastMaterialVersion: 9
m_LastMaterialVersion: 10