Compare commits

..

No commits in common. "9ae65359153a31651637a233173ec5dbcc47a7cb" and "8fe04b974aa25368b2ec2482875289494d3002b9" have entirely different histories.

108 changed files with 2591 additions and 10720 deletions

View File

@ -11,6 +11,12 @@ permissions:
pull-requests: write pull-requests: write
jobs: jobs:
lint-commit:
runs-on: "ubuntu-latest"
steps:
- uses: "actions/checkout@v4.2.2"
- uses: "wagoid/commitlint-github-action@v6.2.1"
lint-editorconfig-checker: lint-editorconfig-checker:
runs-on: "ubuntu-latest" runs-on: "ubuntu-latest"
steps: steps:
@ -49,7 +55,6 @@ jobs:
with: with:
name: build-windows name: build-windows
path: build/ path: build/
owerwrite: true
build-macos: build-macos:
runs-on: "ubuntu-latest" runs-on: "ubuntu-latest"
@ -82,7 +87,6 @@ jobs:
with: with:
name: build-macos name: build-macos
path: build/ path: build/
owerwrite: true
build-linux: build-linux:
runs-on: "ubuntu-latest" runs-on: "ubuntu-latest"
@ -115,7 +119,6 @@ jobs:
with: with:
name: build-linux name: build-linux
path: build/ path: build/
owerwrite: true
create-release: create-release:
needs: [build-windows, build-macos, build-linux] needs: [build-windows, build-macos, build-linux]

View File

@ -1,80 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &3654053280041398781
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4104371471751400115}
- component: {fileID: 1415423667558431683}
m_Layer: 0
m_Name: AICollider
m_TagString: AICollider
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4104371471751400115
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3654053280041398781}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 86.53131, y: 53.261993, z: -5.1268225}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!61 &1415423667558431683
BoxCollider2D:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3654053280041398781}
m_Enabled: 1
serializedVersion: 3
m_Density: 1
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_ForceSendLayers:
serializedVersion: 2
m_Bits: 4294967295
m_ForceReceiveLayers:
serializedVersion: 2
m_Bits: 4294967295
m_ContactCaptureLayers:
serializedVersion: 2
m_Bits: 4294967295
m_CallbackLayers:
serializedVersion: 2
m_Bits: 4294967295
m_IsTrigger: 1
m_UsedByEffector: 0
m_CompositeOperation: 0
m_CompositeOrder: 0
m_Offset: {x: 0, y: 0}
m_SpriteTilingProperty:
border: {x: 0, y: 0, z: 0, w: 0}
pivot: {x: 0, y: 0}
oldSize: {x: 0, y: 0}
newSize: {x: 0, y: 0}
adaptiveTilingThreshold: 0
drawMode: 0
adaptiveTiling: 0
m_AutoTiling: 0
m_Size: {x: 1, y: 1}
m_EdgeRadius: 0

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: a862ece8e0cd6047ea9e799642c7b31c
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -109,7 +109,6 @@ TextureImporter:
ignorePlatformSupport: 0 ignorePlatformSupport: 0
androidETC2FallbackOverride: 0 androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0 forceMaximumCompressionQuality_BC6H_BC7: 0
>>>>>>> develop
spriteSheet: spriteSheet:
serializedVersion: 2 serializedVersion: 2
sprites: sprites:
@ -148,7 +147,8 @@ TextureImporter:
secondaryTextures: [] secondaryTextures: []
spriteCustomMetadata: spriteCustomMetadata:
entries: [] entries: []
nameFileIdTable: {} nameFileIdTable:
RegularBlock01_0: 229215520534054086
mipmapLimitGroupName: mipmapLimitGroupName:
pSDRemoveMatte: 0 pSDRemoveMatte: 0
userData: userData:

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

View File

@ -1,10 +1,10 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: b53550c59261cea43ba8038fdd102203 guid: fa5971280ed90e04cafadbd76400bed2
TextureImporter: TextureImporter:
internalIDToNameTable: internalIDToNameTable:
- first: - first:
213: 9002939317064965793 213: 6385790085498839582
second: editorBtn_0 second: BlankSquare_0
externalObjects: {} externalObjects: {}
serializedVersion: 13 serializedVersion: 13
mipmaps: mipmaps:
@ -97,7 +97,7 @@ TextureImporter:
androidETC2FallbackOverride: 0 androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0 forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4 - serializedVersion: 4
buildTarget: Android buildTarget: WebGL
maxTextureSize: 2048 maxTextureSize: 2048
resizeAlgorithm: 0 resizeAlgorithm: 0
textureFormat: -1 textureFormat: -1
@ -113,13 +113,13 @@ TextureImporter:
serializedVersion: 2 serializedVersion: 2
sprites: sprites:
- serializedVersion: 2 - serializedVersion: 2
name: editorBtn_0 name: BlankSquare_0
rect: rect:
serializedVersion: 2 serializedVersion: 2
x: 38 x: 0
y: 88 y: 0
width: 947 width: 512
height: 795 height: 512
alignment: 0 alignment: 0
pivot: {x: 0, y: 0} pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0} border: {x: 0, y: 0, z: 0, w: 0}
@ -128,8 +128,8 @@ TextureImporter:
physicsShape: [] physicsShape: []
tessellationDetail: -1 tessellationDetail: -1
bones: [] bones: []
spriteID: 1ae1e08fb9dd0fc70800000000000000 spriteID: e12ae58df32ee9850800000000000000
internalID: 9002939317064965793 internalID: 6385790085498839582
vertices: [] vertices: []
indices: indices:
edges: [] edges: []
@ -148,7 +148,7 @@ TextureImporter:
spriteCustomMetadata: spriteCustomMetadata:
entries: [] entries: []
nameFileIdTable: nameFileIdTable:
editorBtn_0: 9002939317064965793 BlankSquare_0: 6385790085498839582
mipmapLimitGroupName: mipmapLimitGroupName:
pSDRemoveMatte: 0 pSDRemoveMatte: 0
userData: userData:

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@ -1,10 +1,10 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: f3e63de14d549a542a79bff56b230926 guid: 4cc2ad05a74922248a49910d3aaa5442
TextureImporter: TextureImporter:
internalIDToNameTable: internalIDToNameTable:
- first: - first:
213: 6669414160430206226 213: 6693083200273925831
second: importBtn_0 second: LevelStatsBtn_0
externalObjects: {} externalObjects: {}
serializedVersion: 13 serializedVersion: 13
mipmaps: mipmaps:
@ -97,7 +97,7 @@ TextureImporter:
androidETC2FallbackOverride: 0 androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0 forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4 - serializedVersion: 4
buildTarget: Android buildTarget: WebGL
maxTextureSize: 2048 maxTextureSize: 2048
resizeAlgorithm: 0 resizeAlgorithm: 0
textureFormat: -1 textureFormat: -1
@ -113,13 +113,13 @@ TextureImporter:
serializedVersion: 2 serializedVersion: 2
sprites: sprites:
- serializedVersion: 2 - serializedVersion: 2
name: importBtn_0 name: LevelStatsBtn_0
rect: rect:
serializedVersion: 2 serializedVersion: 2
x: 23 x: 0
y: 88 y: 0
width: 978 width: 512
height: 835 height: 512
alignment: 0 alignment: 0
pivot: {x: 0, y: 0} pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0} border: {x: 0, y: 0, z: 0, w: 0}
@ -128,8 +128,8 @@ TextureImporter:
physicsShape: [] physicsShape: []
tessellationDetail: -1 tessellationDetail: -1
bones: [] bones: []
spriteID: 21d0764c7d48e8c50800000000000000 spriteID: 7c6467c85bb92ec50800000000000000
internalID: 6669414160430206226 internalID: 6693083200273925831
vertices: [] vertices: []
indices: indices:
edges: [] edges: []
@ -148,7 +148,7 @@ TextureImporter:
spriteCustomMetadata: spriteCustomMetadata:
entries: [] entries: []
nameFileIdTable: nameFileIdTable:
importBtn_0: 6669414160430206226 LevelStatsBtn_0: 6693083200273925831
mipmapLimitGroupName: mipmapLimitGroupName:
pSDRemoveMatte: 0 pSDRemoveMatte: 0
userData: userData:

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -1,10 +1,10 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 0cecb027d0e23fc41b3b3d7c399978c4 guid: ada92be653a1d184391ae7f1f61e32bb
TextureImporter: TextureImporter:
internalIDToNameTable: internalIDToNameTable:
- first: - first:
213: -1609267759769251333 213: 4829622404114481491
second: createALevelBtn_0 second: NewLevelButton 1_0
externalObjects: {} externalObjects: {}
serializedVersion: 13 serializedVersion: 13
mipmaps: mipmaps:
@ -113,13 +113,13 @@ TextureImporter:
serializedVersion: 2 serializedVersion: 2
sprites: sprites:
- serializedVersion: 2 - serializedVersion: 2
name: createALevelBtn_0 name: NewLevelButton 1_0
rect: rect:
serializedVersion: 2 serializedVersion: 2
x: 23 x: 15
y: 88 y: 14
width: 978 width: 483
height: 728 height: 483
alignment: 0 alignment: 0
pivot: {x: 0, y: 0} pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0} border: {x: 0, y: 0, z: 0, w: 0}
@ -128,8 +128,8 @@ TextureImporter:
physicsShape: [] physicsShape: []
tessellationDetail: -1 tessellationDetail: -1
bones: [] bones: []
spriteID: bf1177eaf7bbaa9e0800000000000000 spriteID: 3510384fcf3460340800000000000000
internalID: -1609267759769251333 internalID: 4829622404114481491
vertices: [] vertices: []
indices: indices:
edges: [] edges: []
@ -148,7 +148,7 @@ TextureImporter:
spriteCustomMetadata: spriteCustomMetadata:
entries: [] entries: []
nameFileIdTable: nameFileIdTable:
createALevelBtn_0: -1609267759769251333 NewLevelButton 1_0: 4829622404114481491
mipmapLimitGroupName: mipmapLimitGroupName:
pSDRemoveMatte: 0 pSDRemoveMatte: 0
userData: userData:

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 KiB

View File

@ -1,10 +1,10 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 58314e7be35f3201e8f3d376508d5800 guid: afd28cff37c57da4090ac3ddfdb8ee28
TextureImporter: TextureImporter:
internalIDToNameTable: internalIDToNameTable:
- first: - first:
213: -522367714226421056 213: -4781373940957465942
second: Save_0 second: exit_0
externalObjects: {} externalObjects: {}
serializedVersion: 13 serializedVersion: 13
mipmaps: mipmaps:
@ -97,7 +97,7 @@ TextureImporter:
androidETC2FallbackOverride: 0 androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0 forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4 - serializedVersion: 4
buildTarget: Android buildTarget: WebGL
maxTextureSize: 2048 maxTextureSize: 2048
resizeAlgorithm: 0 resizeAlgorithm: 0
textureFormat: -1 textureFormat: -1
@ -113,13 +113,13 @@ TextureImporter:
serializedVersion: 2 serializedVersion: 2
sprites: sprites:
- serializedVersion: 2 - serializedVersion: 2
name: Save_0 name: exit_0
rect: rect:
serializedVersion: 2 serializedVersion: 2
x: 24 x: 31
y: 23 y: 31
width: 464 width: 298
height: 464 height: 298
alignment: 0 alignment: 0
pivot: {x: 0, y: 0} pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0} border: {x: 0, y: 0, z: 0, w: 0}
@ -128,8 +128,8 @@ TextureImporter:
physicsShape: [] physicsShape: []
tessellationDetail: -1 tessellationDetail: -1
bones: [] bones: []
spriteID: 0c2c66fd45d20c8f0800000000000000 spriteID: aa2bbe6cbb525adb0800000000000000
internalID: -522367714226421056 internalID: -4781373940957465942
vertices: [] vertices: []
indices: indices:
edges: [] edges: []
@ -148,7 +148,7 @@ TextureImporter:
spriteCustomMetadata: spriteCustomMetadata:
entries: [] entries: []
nameFileIdTable: nameFileIdTable:
Save_0: -522367714226421056 exit_0: -4781373940957465942
mipmapLimitGroupName: mipmapLimitGroupName:
pSDRemoveMatte: 0 pSDRemoveMatte: 0
userData: userData:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View File

@ -1,10 +1,10 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 8a60769d8e7b06e4ea5712865d14b809 guid: b83b54968fd22ff438fe127c168bebac
TextureImporter: TextureImporter:
internalIDToNameTable: internalIDToNameTable:
- first: - first:
213: -4287216300838241123 213: 2079131731516339571
second: playBtn_0 second: SaveButton_0
externalObjects: {} externalObjects: {}
serializedVersion: 13 serializedVersion: 13
mipmaps: mipmaps:
@ -97,7 +97,7 @@ TextureImporter:
androidETC2FallbackOverride: 0 androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0 forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4 - serializedVersion: 4
buildTarget: Android buildTarget: WebGL
maxTextureSize: 2048 maxTextureSize: 2048
resizeAlgorithm: 0 resizeAlgorithm: 0
textureFormat: -1 textureFormat: -1
@ -113,13 +113,13 @@ TextureImporter:
serializedVersion: 2 serializedVersion: 2
sprites: sprites:
- serializedVersion: 2 - serializedVersion: 2
name: playBtn_0 name: SaveButton_0
rect: rect:
serializedVersion: 2 serializedVersion: 2
x: 22 x: 0
y: 88 y: 0
width: 979 width: 980
height: 795 height: 982
alignment: 0 alignment: 0
pivot: {x: 0, y: 0} pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0} border: {x: 0, y: 0, z: 0, w: 0}
@ -128,8 +128,8 @@ TextureImporter:
physicsShape: [] physicsShape: []
tessellationDetail: -1 tessellationDetail: -1
bones: [] bones: []
spriteID: d9cb5413d7fb084c0800000000000000 spriteID: 375364a4b4f8adc10800000000000000
internalID: -4287216300838241123 internalID: 2079131731516339571
vertices: [] vertices: []
indices: indices:
edges: [] edges: []
@ -148,7 +148,7 @@ TextureImporter:
spriteCustomMetadata: spriteCustomMetadata:
entries: [] entries: []
nameFileIdTable: nameFileIdTable:
playBtn_0: -4287216300838241123 SaveButton_0: 2079131731516339571
mipmapLimitGroupName: mipmapLimitGroupName:
pSDRemoveMatte: 0 pSDRemoveMatte: 0
userData: userData:

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

View File

@ -1,10 +1,10 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: a291da95cf123274b9c96368a41731dd guid: f34830d17508a4b478c164611c202e12
TextureImporter: TextureImporter:
internalIDToNameTable: internalIDToNameTable:
- first: - first:
213: -654415992179358624 213: 229215520534054086
second: closeBtn_0 second: RegularBlock01_0
externalObjects: {} externalObjects: {}
serializedVersion: 13 serializedVersion: 13
mipmaps: mipmaps:
@ -97,7 +97,7 @@ TextureImporter:
androidETC2FallbackOverride: 0 androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0 forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4 - serializedVersion: 4
buildTarget: Android buildTarget: WebGL
maxTextureSize: 2048 maxTextureSize: 2048
resizeAlgorithm: 0 resizeAlgorithm: 0
textureFormat: -1 textureFormat: -1
@ -113,13 +113,13 @@ TextureImporter:
serializedVersion: 2 serializedVersion: 2
sprites: sprites:
- serializedVersion: 2 - serializedVersion: 2
name: closeBtn_0 name: RegularBlock01_0
rect: rect:
serializedVersion: 2 serializedVersion: 2
x: 3 x: 0
y: 32 y: 0
width: 1019 width: 122
height: 987 height: 122
alignment: 0 alignment: 0
pivot: {x: 0, y: 0} pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0} border: {x: 0, y: 0, z: 0, w: 0}
@ -128,8 +128,8 @@ TextureImporter:
physicsShape: [] physicsShape: []
tessellationDetail: -1 tessellationDetail: -1
bones: [] bones: []
spriteID: 06480d25f1c0be6f0800000000000000 spriteID: 6c4407e2d465e2300800000000000000
internalID: -654415992179358624 internalID: 229215520534054086
vertices: [] vertices: []
indices: indices:
edges: [] edges: []
@ -148,7 +148,7 @@ TextureImporter:
spriteCustomMetadata: spriteCustomMetadata:
entries: [] entries: []
nameFileIdTable: nameFileIdTable:
closeBtn_0: -654415992179358624 RegularBlock01_0: 229215520534054086
mipmapLimitGroupName: mipmapLimitGroupName:
pSDRemoveMatte: 0 pSDRemoveMatte: 0
userData: userData:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 MiB

View File

@ -1,260 +0,0 @@
fileFormatVersion: 2
guid: 28e1127a5b69e79449d6eacfb1632438
TextureImporter:
internalIDToNameTable:
- first:
213: -4579822432219233078
second: cancelBtn_0
- first:
213: -4181939333999132496
second: cancelBtn_1
- first:
213: 8512661480653712572
second: cancelBtn_2
- first:
213: -2543711027167231359
second: cancelBtn_3
- first:
213: 4838270059752062411
second: cancelBtn_4
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 2
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites:
- serializedVersion: 2
name: cancelBtn_0
rect:
serializedVersion: 2
x: 0
y: 0
width: 1536
height: 1024
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
physicsShape: []
tessellationDetail: -1
bones: []
spriteID: ac4053943c33170c0800000000000000
internalID: -4579822432219233078
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: cancelBtn_1
rect:
serializedVersion: 2
x: 82
y: 622
width: 6
height: 6
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
physicsShape: []
tessellationDetail: -1
bones: []
spriteID: 0b08fb42554c6f5c0800000000000000
internalID: -4181939333999132496
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: cancelBtn_2
rect:
serializedVersion: 2
x: 82
y: 350
width: 6
height: 6
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
physicsShape: []
tessellationDetail: -1
bones: []
spriteID: cbce38fb38c032670800000000000000
internalID: 8512661480653712572
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: cancelBtn_3
rect:
serializedVersion: 2
x: 82
y: 326
width: 6
height: 6
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
physicsShape: []
tessellationDetail: -1
bones: []
spriteID: 18204764c4ce2bcd0800000000000000
internalID: -2543711027167231359
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: cancelBtn_4
rect:
serializedVersion: 2
x: 82
y: 94
width: 7
height: 7
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
physicsShape: []
tessellationDetail: -1
bones: []
spriteID: bcdfdee2cfcf42340800000000000000
internalID: 4838270059752062411
vertices: []
indices:
edges: []
weights: []
outline: []
customData:
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable:
cancelBtn_0: -4579822432219233078
cancelBtn_1: -4181939333999132496
cancelBtn_2: 8512661480653712572
cancelBtn_3: -2543711027167231359
cancelBtn_4: 4838270059752062411
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

View File

@ -1,156 +0,0 @@
fileFormatVersion: 2
guid: eaa3bde145edde942b542cb709a37416
TextureImporter:
internalIDToNameTable:
- first:
213: -2153231444099213249
second: editALevelBtn_0
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 2
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites:
- serializedVersion: 2
name: editALevelBtn_0
rect:
serializedVersion: 2
x: 23
y: 207
width: 978
height: 609
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
physicsShape: []
tessellationDetail: -1
bones: []
spriteID: f38d34fe86f2e12e0800000000000000
internalID: -2153231444099213249
vertices: []
indices:
edges: []
weights: []
outline: []
customData:
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable:
editALevelBtn_0: -2153231444099213249
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 296 KiB

View File

@ -1,156 +0,0 @@
fileFormatVersion: 2
guid: ea1e3303403fe0b43bebec59c2f55590
TextureImporter:
internalIDToNameTable:
- first:
213: -1409255045544979666
second: importBtn2_0
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 2
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites:
- serializedVersion: 2
name: importBtn2_0
rect:
serializedVersion: 2
x: 17
y: 47
width: 539
height: 343
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
physicsShape: []
tessellationDetail: -1
bones: []
spriteID: e235d5ca002517ce0800000000000000
internalID: -1409255045544979666
vertices: []
indices:
edges: []
weights: []
outline: []
customData:
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable:
importBtn2_0: -1409255045544979666
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 MiB

View File

@ -1,286 +0,0 @@
fileFormatVersion: 2
guid: fe99c546935fa084e8cbec8b68e3f96e
TextureImporter:
internalIDToNameTable:
- first:
213: -626436719271748831
second: saveBtn_0
- first:
213: -1715996769668828261
second: saveBtn_1
- first:
213: -8850024829547459184
second: saveBtn_2
- first:
213: 9204917831739309651
second: saveBtn_3
- first:
213: -7034966553427437937
second: saveBtn_4
- first:
213: -142403778502646489
second: saveBtn_5
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 2
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites:
- serializedVersion: 2
name: saveBtn_0
rect:
serializedVersion: 2
x: 0
y: 0
width: 1536
height: 1024
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
physicsShape: []
tessellationDetail: -1
bones: []
spriteID: 12bdb817f137e47f0800000000000000
internalID: -626436719271748831
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: saveBtn_1
rect:
serializedVersion: 2
x: 83
y: 735
width: 6
height: 6
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
physicsShape: []
tessellationDetail: -1
bones: []
spriteID: b93fb2c970e8f28e0800000000000000
internalID: -1715996769668828261
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: saveBtn_2
rect:
serializedVersion: 2
x: 82
y: 622
width: 6
height: 6
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
physicsShape: []
tessellationDetail: -1
bones: []
spriteID: 09dcf659e456e2580800000000000000
internalID: -8850024829547459184
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: saveBtn_3
rect:
serializedVersion: 2
x: 81
y: 431
width: 8
height: 6
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
physicsShape: []
tessellationDetail: -1
bones: []
spriteID: 35efa7b8fff6ebf70800000000000000
internalID: 9204917831739309651
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: saveBtn_4
rect:
serializedVersion: 2
x: 82
y: 350
width: 6
height: 6
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
physicsShape: []
tessellationDetail: -1
bones: []
spriteID: f8614384137ce5e90800000000000000
internalID: -7034966553427437937
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: saveBtn_5
rect:
serializedVersion: 2
x: 82
y: 326
width: 6
height: 6
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
physicsShape: []
tessellationDetail: -1
bones: []
spriteID: 7252da79484160ef0800000000000000
internalID: -142403778502646489
vertices: []
indices:
edges: []
weights: []
outline: []
customData:
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable:
saveBtn_0: -626436719271748831
saveBtn_1: -1715996769668828261
saveBtn_2: -8850024829547459184
saveBtn_3: 9204917831739309651
saveBtn_4: -7034966553427437937
saveBtn_5: -142403778502646489
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

View File

@ -1,143 +0,0 @@
fileFormatVersion: 2
guid: fee916e0a10de404a9c3d67602b6e0fd
TextureImporter:
internalIDToNameTable:
- first:
213: 1781407419429470612
second: etoiles_0
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 2
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites:
- serializedVersion: 2
name: etoiles_0
rect:
serializedVersion: 2
x: 111
y: 88
width: 911
height: 835
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
physicsShape: []
tessellationDetail: -1
bones: []
spriteID: 491c6531c94d8b810800000000000000
internalID: 1781407419429470612
vertices: []
indices:
edges: []
weights: []
outline: []
customData:
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable:
etoiles_0: 1781407419429470612
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@ -2,754 +2,18 @@
"name": "Back on Track", "name": "Back on Track",
"musicName": "BackOnTrack", "musicName": "BackOnTrack",
"order": 2, "order": 2,
"difficulty": 1,
"elements": [ "elements": [
{ {
"type": "Spike", "type": "Spike",
"x": -9.5, "x": -6.684000015258789,
"y": -3.200000047683716, "y": -2.8970000743865969,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallSpike",
"x": 2.5999999046325685,
"y": -3.4100000858306886,
"scaleX": -1.0, "scaleX": -1.0,
"scaleY": -1.0 "scaleY": -1.0
}, },
{ {
"type": "Spike", "type": "Spike",
"x": 3.4000000953674318, "x": -3.059999942779541,
"y": -3.200000047683716, "y": -2.930000066757202,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "Spike",
"x": 11.0,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "Spike",
"x": 11.850000381469727,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "ObstacleBlock",
"x": 12.850000381469727,
"y": -3.0,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "KillZone",
"x": 14.449999809265137,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "ObstacleBlock",
"x": 16.0,
"y": -3.0,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "ObstacleBlock",
"x": 16.0,
"y": -2.0,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "KillZone",
"x": 17.649999618530275,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "ObstacleBlock",
"x": 19.049999237060548,
"y": -3.0,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "ObstacleBlock",
"x": 19.049999237060548,
"y": -2.0,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "ObstacleBlock",
"x": 19.049999237060548,
"y": -1.0,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "Spike",
"x": 28.5,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "Spike",
"x": 29.299999237060548,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "ObstacleBlock",
"x": 35.599998474121097,
"y": -3.0999999046325685,
"scaleX": 1.2000000476837159,
"scaleY": 0.15000000596046449
},
{
"type": "KillZone",
"x": 39.810001373291019,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "ObstacleBlock",
"x": 44.04999923706055,
"y": -3.0999999046325685,
"scaleX": 1.2000000476837159,
"scaleY": 0.15000000596046449
},
{
"type": "Spike",
"x": 44.099998474121097,
"y": -2.4200000762939455,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "KillZone",
"x": 48.25,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "ObstacleBlock",
"x": 52.45000076293945,
"y": -2.9000000953674318,
"scaleX": 1.2000000476837159,
"scaleY": 0.23000000417232514
},
{
"type": "Spike",
"x": 52.5,
"y": -2.0,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallObstacleBlock",
"x": 58.0,
"y": -1.2000000476837159,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallObstacleBlock",
"x": 61.5,
"y": 0.4000000059604645,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallObstacleBlock",
"x": 65.0,
"y": 2.0,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallObstacleBlock",
"x": 68.5,
"y": 3.5999999046325685,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallObstacleBlock",
"x": 72.0,
"y": 5.199999809265137,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "KillZone",
"x": 56.38999938964844,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "KillZone",
"x": 58.22999954223633,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "KillZone",
"x": 60.0,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "KillZone",
"x": 61.0,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "KillZone",
"x": 62.79999923706055,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "KillZone",
"x": 64.5999984741211,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "KillZone",
"x": 66.5999984741211,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "KillZone",
"x": 68.19999694824219,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "KillZone",
"x": 69.9000015258789,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "KillZone",
"x": 71.69999694824219,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "KillZone",
"x": 73.5,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "ObstacleBlock",
"x": 81.94000244140625,
"y": 0.5199999809265137,
"scaleX": 3.0,
"scaleY": 1.559999942779541
},
{
"type": "ObstacleBlock",
"x": 97.30999755859375,
"y": 0.03999999910593033,
"scaleX": 3.0,
"scaleY": 1.3799999952316285
},
{
"type": "ObstacleBlock",
"x": 112.66999816894531,
"y": 0.5199999809265137,
"scaleX": 3.0,
"scaleY": 1.559999942779541
},
{
"type": "ObstacleBlock",
"x": 128.0500030517578,
"y": -0.6499999761581421,
"scaleX": 3.0,
"scaleY": 1.1100000143051148
},
{
"type": "Spike",
"x": 77.6500015258789,
"y": 4.829999923706055,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "Spike",
"x": 78.44999694824219,
"y": 4.829999923706055,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "Spike",
"x": 79.30999755859375,
"y": 4.829999923706055,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "Spike",
"x": 80.16000366210938,
"y": 4.829999923706055,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "Spike",
"x": 84.4800033569336,
"y": 4.829999923706055,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "Spike",
"x": 85.2699966430664,
"y": 4.829999923706055,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "Spike",
"x": 86.16000366210938,
"y": 4.829999923706055,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "Spike",
"x": 86.94999694824219,
"y": 4.829999923706055,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "Spike",
"x": 95.87000274658203,
"y": 5.75,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "Spike",
"x": 96.68000030517578,
"y": 5.75,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "Spike",
"x": 97.5199966430664,
"y": 5.75,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "Spike",
"x": 98.36000061035156,
"y": 5.75,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallObstacleBlock",
"x": 78.54000091552735,
"y": 5.900000095367432,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallObstacleBlock",
"x": 79.56999969482422,
"y": 5.900000095367432,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallObstacleBlock",
"x": 85.33999633789063,
"y": 5.900000095367432,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallObstacleBlock",
"x": 86.36000061035156,
"y": 5.900000095367432,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallObstacleBlock",
"x": 95.8499984741211,
"y": 5.179999828338623,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallObstacleBlock",
"x": 96.68000030517578,
"y": 5.179999828338623,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallObstacleBlock",
"x": 97.5199966430664,
"y": 5.179999828338623,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallObstacleBlock",
"x": 98.36000061035156,
"y": 5.179999828338623,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "Spike",
"x": 119.94999694824219,
"y": 4.860000133514404,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "Spike",
"x": 120.87000274658203,
"y": 2.509999990463257,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "KillZone",
"x": 136.5,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "KillZone",
"x": 138.1999969482422,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "KillZone",
"x": 139.89999389648438,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "KillZone",
"x": 141.60000610351563,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "KillZone",
"x": 143.3000030517578,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "KillZone",
"x": 145.0,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "KillZone",
"x": 146.6999969482422,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "KillZone",
"x": 148.39999389648438,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "KillZone",
"x": 150.10000610351563,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "KillZone",
"x": 151.8000030517578,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "KillZone",
"x": 153.5,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "KillZone",
"x": 155.1999969482422,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "KillZone",
"x": 156.89999389648438,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "KillZone",
"x": 158.60000610351563,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "KillZone",
"x": 160.3000030517578,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "KillZone",
"x": 162.0,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "KillZone",
"x": 163.6999969482422,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "KillZone",
"x": 165.39999389648438,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "KillZone",
"x": 167.10000610351563,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "KillZone",
"x": 168.8000030517578,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "KillZone",
"x": 170.5,
"y": -3.200000047683716,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallObstacleBlock",
"x": 138.5,
"y": 2.0399999618530275,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallObstacleBlock",
"x": 139.33999633789063,
"y": 2.0399999618530275,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallObstacleBlock",
"x": 140.17999267578126,
"y": 2.0399999618530275,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallObstacleBlock",
"x": 141.02000427246095,
"y": 2.0399999618530275,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallObstacleBlock",
"x": 143.3000030517578,
"y": 0.8899999856948853,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallObstacleBlock",
"x": 144.13999938964845,
"y": 0.8899999856948853,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallObstacleBlock",
"x": 144.97999572753907,
"y": 0.8899999856948853,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallObstacleBlock",
"x": 145.82000732421876,
"y": 0.8899999856948853,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallObstacleBlock",
"x": 146.66000366210938,
"y": 0.8899999856948853,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallObstacleBlock",
"x": 147.5,
"y": 0.8899999856948853,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallObstacleBlock",
"x": 148.33999633789063,
"y": 0.8899999856948853,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallObstacleBlock",
"x": 150.4199981689453,
"y": -0.3100000023841858,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallObstacleBlock",
"x": 151.25,
"y": -0.3100000023841858,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallObstacleBlock",
"x": 151.0800018310547,
"y": -0.3100000023841858,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallObstacleBlock",
"x": 152.91000366210938,
"y": -0.3100000023841858,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallObstacleBlock",
"x": 153.74000549316407,
"y": -0.3100000023841858,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallObstacleBlock",
"x": 156.6999969482422,
"y": 1.2999999523162842,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallObstacleBlock",
"x": 160.1999969482422,
"y": 2.9000000953674318,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallObstacleBlock",
"x": 163.8000030517578,
"y": 4.5,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallObstacleBlock",
"x": 167.3000030517578,
"y": 6.099999904632568,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallObstacleBlock",
"x": 170.8000030517578,
"y": 7.699999809265137,
"scaleX": -1.0,
"scaleY": -1.0
},
{
"type": "SmallObstacleBlock",
"x": 174.3000030517578,
"y": 9.300000190734864,
"scaleX": -1.0, "scaleX": -1.0,
"scaleY": -1.0 "scaleY": -1.0
} }

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

After

Width:  |  Height:  |  Size: 1.4 MiB

View File

@ -147,8 +147,7 @@ TextureImporter:
secondaryTextures: [] secondaryTextures: []
spriteCustomMetadata: spriteCustomMetadata:
entries: [] entries: []
nameFileIdTable: nameFileIdTable: {}
Logo_0: 1404028623067837608
mipmapLimitGroupName: mipmapLimitGroupName:
pSDRemoveMatte: 0 pSDRemoveMatte: 0
userData: userData:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 716 KiB

View File

@ -1,156 +0,0 @@
fileFormatVersion: 2
guid: bb33a1422640593caba3c9cfc277eed1
TextureImporter:
internalIDToNameTable:
- first:
213: -9192638271177797499
second: death_0
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 2
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites:
- serializedVersion: 2
name: death_0
rect:
serializedVersion: 2
x: 50
y: 42
width: 118
height: 118
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
physicsShape: []
tessellationDetail: -1
bones: []
spriteID: 58059c172303d6080800000000000000
internalID: -9192638271177797499
vertices: []
indices:
edges: []
weights: []
outline: []
customData:
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable:
death_0: -9192638271177797499
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

View File

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

Binary file not shown.

View File

@ -1,23 +0,0 @@
fileFormatVersion: 2
guid: 0f783190ab25e24deb41c3810d8bd910
AudioImporter:
externalObjects: {}
serializedVersion: 8
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -1,23 +0,0 @@
fileFormatVersion: 2
guid: a534a6e5c2588e8468f392da95b4d051
AudioImporter:
externalObjects: {}
serializedVersion: 8
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -1,23 +0,0 @@
fileFormatVersion: 2
guid: 01bc19d23f018f986bec98d64fb0c51b
AudioImporter:
externalObjects: {}
serializedVersion: 8
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

View File

@ -149,13 +149,14 @@ RectTransform:
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0 m_ConstrainProportionsScale: 0
m_Children: [] m_Children:
- {fileID: 1027243870}
m_Father: {fileID: 585327055} m_Father: {fileID: 585327055}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: -161, y: 0} m_AnchoredPosition: {x: -160, y: 0}
m_SizeDelta: {x: 170, y: 90} m_SizeDelta: {x: 185, y: 40}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &323428364 --- !u!114 &323428364
MonoBehaviour: MonoBehaviour:
@ -201,9 +202,9 @@ MonoBehaviour:
m_OnClick: m_OnClick:
m_PersistentCalls: m_PersistentCalls:
m_Calls: m_Calls:
- m_Target: {fileID: 1858033414} - m_Target: {fileID: 0}
m_TargetAssemblyTypeName: MainMenu, Assembly-CSharp m_TargetAssemblyTypeName: MainMenu, Assembly-CSharp
m_MethodName: EditLevel m_MethodName: OpenImport
m_Mode: 1 m_Mode: 1
m_Arguments: m_Arguments:
m_ObjectArgument: {fileID: 0} m_ObjectArgument: {fileID: 0}
@ -233,8 +234,8 @@ MonoBehaviour:
m_OnCullStateChanged: m_OnCullStateChanged:
m_PersistentCalls: m_PersistentCalls:
m_Calls: [] m_Calls: []
m_Sprite: {fileID: -2153231444099213249, guid: eaa3bde145edde942b542cb709a37416, type: 3} m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 0 m_Type: 1
m_PreserveAspect: 0 m_PreserveAspect: 0
m_FillCenter: 1 m_FillCenter: 1
m_FillMethod: 4 m_FillMethod: 4
@ -407,7 +408,6 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: ef2acea012085a3bb9a981fc334afaec, type: 3} m_Script: {fileID: 11500000, guid: ef2acea012085a3bb9a981fc334afaec, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
sfxSource: {fileID: 1895261020}
--- !u!114 &681324524 --- !u!114 &681324524
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -502,6 +502,278 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 681324521} m_GameObject: {fileID: 681324521}
m_CullTransparentMesh: 1 m_CullTransparentMesh: 1
--- !u!1 &1027243869
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1027243870}
- component: {fileID: 1027243872}
- component: {fileID: 1027243871}
m_Layer: 5
m_Name: EditLevelText
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1027243870
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1027243869}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 323428363}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1027243871
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1027243869}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_text: Edit a level
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
m_fontMaterials: []
m_fontColor32:
serializedVersion: 2
rgba: 4281479730
m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
m_enableVertexGradient: 0
m_colorMode: 3
m_fontColorGradient:
topLeft: {r: 1, g: 1, b: 1, a: 1}
topRight: {r: 1, g: 1, b: 1, a: 1}
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
bottomRight: {r: 1, g: 1, b: 1, a: 1}
m_fontColorGradientPreset: {fileID: 0}
m_spriteAsset: {fileID: 0}
m_tintAllSprites: 0
m_StyleSheet: {fileID: 0}
m_TextStyleHashCode: -1183493901
m_overrideHtmlColors: 0
m_faceColor:
serializedVersion: 2
rgba: 4294967295
m_fontSize: 24
m_fontSizeBase: 24
m_fontWeight: 400
m_enableAutoSizing: 0
m_fontSizeMin: 18
m_fontSizeMax: 72
m_fontStyle: 1
m_HorizontalAlignment: 2
m_VerticalAlignment: 512
m_textAlignment: 65535
m_characterSpacing: 0
m_wordSpacing: 0
m_lineSpacing: 0
m_lineSpacingMax: 0
m_paragraphSpacing: 0
m_charWidthMaxAdj: 0
m_TextWrappingMode: 1
m_wordWrappingRatios: 0.4
m_overflowMode: 0
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 0
m_ActiveFontFeatures: 6e72656b
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
m_EmojiFallbackSupport: 1
m_parseCtrlCharacters: 1
m_isOrthographic: 1
m_isCullingEnabled: 0
m_horizontalMapping: 0
m_verticalMapping: 0
m_uvLineOffset: 0
m_geometrySortingOrder: 0
m_IsTextObjectScaleStatic: 0
m_VertexBufferAutoSizeReduction: 0
m_useMaxVisibleDescender: 1
m_pageToDisplay: 1
m_margin: {x: 0, y: 0, z: 0, w: 0}
m_isUsingLegacyAnimationComponent: 0
m_isVolumetricText: 0
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!222 &1027243872
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1027243869}
m_CullTransparentMesh: 1
--- !u!1 &1040235959
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1040235960}
- component: {fileID: 1040235962}
- component: {fileID: 1040235961}
m_Layer: 5
m_Name: CreateLevelText
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1040235960
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1040235959}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1200117237}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1040235961
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1040235959}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_text: Create a level
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
m_fontMaterials: []
m_fontColor32:
serializedVersion: 2
rgba: 4281479730
m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
m_enableVertexGradient: 0
m_colorMode: 3
m_fontColorGradient:
topLeft: {r: 1, g: 1, b: 1, a: 1}
topRight: {r: 1, g: 1, b: 1, a: 1}
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
bottomRight: {r: 1, g: 1, b: 1, a: 1}
m_fontColorGradientPreset: {fileID: 0}
m_spriteAsset: {fileID: 0}
m_tintAllSprites: 0
m_StyleSheet: {fileID: 0}
m_TextStyleHashCode: -1183493901
m_overrideHtmlColors: 0
m_faceColor:
serializedVersion: 2
rgba: 4294967295
m_fontSize: 24
m_fontSizeBase: 24
m_fontWeight: 400
m_enableAutoSizing: 0
m_fontSizeMin: 18
m_fontSizeMax: 72
m_fontStyle: 1
m_HorizontalAlignment: 2
m_VerticalAlignment: 512
m_textAlignment: 65535
m_characterSpacing: 0
m_wordSpacing: 0
m_lineSpacing: 0
m_lineSpacingMax: 0
m_paragraphSpacing: 0
m_charWidthMaxAdj: 0
m_TextWrappingMode: 1
m_wordWrappingRatios: 0.4
m_overflowMode: 0
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 0
m_ActiveFontFeatures: 6e72656b
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
m_EmojiFallbackSupport: 1
m_parseCtrlCharacters: 1
m_isOrthographic: 1
m_isCullingEnabled: 0
m_horizontalMapping: 0
m_verticalMapping: 0
m_uvLineOffset: 0
m_geometrySortingOrder: 0
m_IsTextObjectScaleStatic: 0
m_VertexBufferAutoSizeReduction: 0
m_useMaxVisibleDescender: 1
m_pageToDisplay: 1
m_margin: {x: 0, y: 0, z: 0, w: 0}
m_isUsingLegacyAnimationComponent: 0
m_isVolumetricText: 0
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!222 &1040235962
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1040235959}
m_CullTransparentMesh: 1
--- !u!1 &1200117236 --- !u!1 &1200117236
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -532,13 +804,14 @@ RectTransform:
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0 m_ConstrainProportionsScale: 0
m_Children: [] m_Children:
- {fileID: 1040235960}
m_Father: {fileID: 585327055} m_Father: {fileID: 585327055}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 160, y: -10} m_AnchoredPosition: {x: 160, y: 0}
m_SizeDelta: {x: 180, y: 120} m_SizeDelta: {x: 185, y: 40}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1200117238 --- !u!114 &1200117238
MonoBehaviour: MonoBehaviour:
@ -586,7 +859,7 @@ MonoBehaviour:
m_Calls: m_Calls:
- m_Target: {fileID: 1858033414} - m_Target: {fileID: 1858033414}
m_TargetAssemblyTypeName: MainMenu, Assembly-CSharp m_TargetAssemblyTypeName: MainMenu, Assembly-CSharp
m_MethodName: CreateVoidLevel m_MethodName: LevelEditor
m_Mode: 1 m_Mode: 1
m_Arguments: m_Arguments:
m_ObjectArgument: {fileID: 0} m_ObjectArgument: {fileID: 0}
@ -616,8 +889,8 @@ MonoBehaviour:
m_OnCullStateChanged: m_OnCullStateChanged:
m_PersistentCalls: m_PersistentCalls:
m_Calls: [] m_Calls: []
m_Sprite: {fileID: -1609267759769251333, guid: 0cecb027d0e23fc41b3b3d7c399978c4, type: 3} m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 0 m_Type: 1
m_PreserveAspect: 0 m_PreserveAspect: 0
m_FillCenter: 1 m_FillCenter: 1
m_FillMethod: 4 m_FillMethod: 4
@ -814,136 +1087,6 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: a1cd6b406f139414086355a222af717e, type: 3} m_Script: {fileID: 11500000, guid: a1cd6b406f139414086355a222af717e, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
sfxSource: {fileID: 1895261020}
--- !u!1 &1895261019
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1895261021}
- component: {fileID: 1895261020}
m_Layer: 0
m_Name: Sound
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!82 &1895261020
AudioSource:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1895261019}
m_Enabled: 1
serializedVersion: 4
OutputAudioMixerGroup: {fileID: 0}
m_audioClip: {fileID: 0}
m_Resource: {fileID: 0}
m_PlayOnAwake: 1
m_Volume: 1
m_Pitch: 1
Loop: 0
Mute: 0
Spatialize: 0
SpatializePostEffects: 0
Priority: 128
DopplerLevel: 1
MinDistance: 1
MaxDistance: 500
Pan2D: 0
rolloffMode: 0
BypassEffects: 0
BypassListenerEffects: 0
BypassReverbZones: 0
rolloffCustomCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 1
value: 0
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
panLevelCustomCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
spreadCustomCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
reverbZoneMixCustomCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
--- !u!4 &1895261021
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1895261019}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 513.29504, y: 455.8944, z: -2.436951}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1985937862 --- !u!1 &1985937862
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -1030,4 +1173,3 @@ SceneRoots:
- {fileID: 1858033413} - {fileID: 1858033413}
- {fileID: 585327055} - {fileID: 585327055}
- {fileID: 1985937865} - {fileID: 1985937865}
- {fileID: 1895261021}

View File

@ -149,13 +149,14 @@ RectTransform:
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0 m_ConstrainProportionsScale: 0
m_Children: [] m_Children:
- {fileID: 164913377}
m_Father: {fileID: 481473977} m_Father: {fileID: 481473977}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: -175} m_AnchoredPosition: {x: 0, y: -110}
m_SizeDelta: {x: 160, y: 110} m_SizeDelta: {x: 160, y: 30}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &39408930 --- !u!114 &39408930
MonoBehaviour: MonoBehaviour:
@ -233,8 +234,8 @@ MonoBehaviour:
m_OnCullStateChanged: m_OnCullStateChanged:
m_PersistentCalls: m_PersistentCalls:
m_Calls: [] m_Calls: []
m_Sprite: {fileID: 9002939317064965793, guid: b53550c59261cea43ba8038fdd102203, type: 3} m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 0 m_Type: 1
m_PreserveAspect: 0 m_PreserveAspect: 0
m_FillCenter: 1 m_FillCenter: 1
m_FillMethod: 4 m_FillMethod: 4
@ -251,6 +252,142 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 39408928} m_GameObject: {fileID: 39408928}
m_CullTransparentMesh: 1 m_CullTransparentMesh: 1
--- !u!1 &164913376
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 164913377}
- component: {fileID: 164913379}
- component: {fileID: 164913378}
m_Layer: 5
m_Name: EditorText
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &164913377
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 164913376}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 39408929}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &164913378
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 164913376}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_text: Editor
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
m_fontMaterials: []
m_fontColor32:
serializedVersion: 2
rgba: 4281479730
m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
m_enableVertexGradient: 0
m_colorMode: 3
m_fontColorGradient:
topLeft: {r: 1, g: 1, b: 1, a: 1}
topRight: {r: 1, g: 1, b: 1, a: 1}
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
bottomRight: {r: 1, g: 1, b: 1, a: 1}
m_fontColorGradientPreset: {fileID: 0}
m_spriteAsset: {fileID: 0}
m_tintAllSprites: 0
m_StyleSheet: {fileID: 0}
m_TextStyleHashCode: -1183493901
m_overrideHtmlColors: 0
m_faceColor:
serializedVersion: 2
rgba: 4294967295
m_fontSize: 24
m_fontSizeBase: 24
m_fontWeight: 400
m_enableAutoSizing: 0
m_fontSizeMin: 18
m_fontSizeMax: 72
m_fontStyle: 1
m_HorizontalAlignment: 2
m_VerticalAlignment: 512
m_textAlignment: 65535
m_characterSpacing: 0
m_wordSpacing: 0
m_lineSpacing: 0
m_lineSpacingMax: 0
m_paragraphSpacing: 0
m_charWidthMaxAdj: 0
m_TextWrappingMode: 1
m_wordWrappingRatios: 0.4
m_overflowMode: 0
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 0
m_ActiveFontFeatures: 6e72656b
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
m_EmojiFallbackSupport: 1
m_parseCtrlCharacters: 1
m_isOrthographic: 1
m_isCullingEnabled: 0
m_horizontalMapping: 0
m_verticalMapping: 0
m_uvLineOffset: 0
m_geometrySortingOrder: 0
m_IsTextObjectScaleStatic: 0
m_VertexBufferAutoSizeReduction: 0
m_useMaxVisibleDescender: 1
m_pageToDisplay: 1
m_margin: {x: 0, y: 0, z: 0, w: 0}
m_isUsingLegacyAnimationComponent: 0
m_isVolumetricText: 0
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!222 &164913379
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 164913376}
m_CullTransparentMesh: 1
--- !u!1 &303285652 --- !u!1 &303285652
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -326,135 +463,6 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 303285652} m_GameObject: {fileID: 303285652}
m_CullTransparentMesh: 1 m_CullTransparentMesh: 1
--- !u!1 &376463333
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 376463335}
- component: {fileID: 376463334}
m_Layer: 0
m_Name: Sound
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!82 &376463334
AudioSource:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 376463333}
m_Enabled: 1
serializedVersion: 4
OutputAudioMixerGroup: {fileID: 0}
m_audioClip: {fileID: 0}
m_Resource: {fileID: 0}
m_PlayOnAwake: 1
m_Volume: 1
m_Pitch: 1
Loop: 0
Mute: 0
Spatialize: 0
SpatializePostEffects: 0
Priority: 128
DopplerLevel: 1
MinDistance: 1
MaxDistance: 500
Pan2D: 0
rolloffMode: 0
BypassEffects: 0
BypassListenerEffects: 0
BypassReverbZones: 0
rolloffCustomCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 1
value: 0
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
panLevelCustomCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
spreadCustomCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
reverbZoneMixCustomCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
--- !u!4 &376463335
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 376463333}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 591.1148, y: 374.54196, z: 17.932013}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &481473973 --- !u!1 &481473973
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -554,7 +562,6 @@ RectTransform:
- {fileID: 666344588} - {fileID: 666344588}
- {fileID: 39408929} - {fileID: 39408929}
- {fileID: 1809963736} - {fileID: 1809963736}
- {fileID: 780585405}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0} m_AnchorMin: {x: 0, y: 0}
@ -592,13 +599,14 @@ RectTransform:
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0 m_ConstrainProportionsScale: 0
m_Children: [] m_Children:
- {fileID: 1899869499}
m_Father: {fileID: 481473977} m_Father: {fileID: 481473977}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: -105} m_AnchoredPosition: {x: 0, y: -45}
m_SizeDelta: {x: 160, y: 110} m_SizeDelta: {x: 160, y: 30}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &666344589 --- !u!114 &666344589
MonoBehaviour: MonoBehaviour:
@ -676,8 +684,8 @@ MonoBehaviour:
m_OnCullStateChanged: m_OnCullStateChanged:
m_PersistentCalls: m_PersistentCalls:
m_Calls: [] m_Calls: []
m_Sprite: {fileID: 6669414160430206226, guid: f3e63de14d549a542a79bff56b230926, type: 3} m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 0 m_Type: 1
m_PreserveAspect: 0 m_PreserveAspect: 0
m_FillCenter: 1 m_FillCenter: 1
m_FillMethod: 4 m_FillMethod: 4
@ -694,81 +702,6 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 666344587} m_GameObject: {fileID: 666344587}
m_CullTransparentMesh: 1 m_CullTransparentMesh: 1
--- !u!1 &780585404
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 780585405}
- component: {fileID: 780585407}
- component: {fileID: 780585406}
m_Layer: 5
m_Name: GameObject
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &780585405
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 780585404}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 481473977}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 85}
m_SizeDelta: {x: 206.4181, y: 202.9899}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &780585406
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 780585404}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 1404028623067837608, guid: 7941bec4ab82ba5f8a978cf1b4d91010, type: 3}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!222 &780585407
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 780585404}
m_CullTransparentMesh: 1
--- !u!1 &948896765 --- !u!1 &948896765
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -848,6 +781,142 @@ Transform:
m_Children: [] m_Children: []
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &997659732
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 997659733}
- component: {fileID: 997659735}
- component: {fileID: 997659734}
m_Layer: 5
m_Name: PlayText
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &997659733
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 997659732}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1587889808}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &997659734
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 997659732}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_text: Play
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
m_fontMaterials: []
m_fontColor32:
serializedVersion: 2
rgba: 4281479730
m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
m_enableVertexGradient: 0
m_colorMode: 3
m_fontColorGradient:
topLeft: {r: 1, g: 1, b: 1, a: 1}
topRight: {r: 1, g: 1, b: 1, a: 1}
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
bottomRight: {r: 1, g: 1, b: 1, a: 1}
m_fontColorGradientPreset: {fileID: 0}
m_spriteAsset: {fileID: 0}
m_tintAllSprites: 0
m_StyleSheet: {fileID: 0}
m_TextStyleHashCode: -1183493901
m_overrideHtmlColors: 0
m_faceColor:
serializedVersion: 2
rgba: 4294967295
m_fontSize: 24
m_fontSizeBase: 24
m_fontWeight: 400
m_enableAutoSizing: 0
m_fontSizeMin: 18
m_fontSizeMax: 72
m_fontStyle: 1
m_HorizontalAlignment: 2
m_VerticalAlignment: 512
m_textAlignment: 65535
m_characterSpacing: 0
m_wordSpacing: 0
m_lineSpacing: 0
m_lineSpacingMax: 0
m_paragraphSpacing: 0
m_charWidthMaxAdj: 0
m_TextWrappingMode: 1
m_wordWrappingRatios: 0.4
m_overflowMode: 0
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 0
m_ActiveFontFeatures: 6e72656b
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
m_EmojiFallbackSupport: 1
m_parseCtrlCharacters: 1
m_isOrthographic: 1
m_isCullingEnabled: 0
m_horizontalMapping: 0
m_verticalMapping: 0
m_uvLineOffset: 0
m_geometrySortingOrder: 0
m_IsTextObjectScaleStatic: 0
m_VertexBufferAutoSizeReduction: 0
m_useMaxVisibleDescender: 1
m_pageToDisplay: 1
m_margin: {x: 0, y: 0, z: 0, w: 0}
m_isUsingLegacyAnimationComponent: 0
m_isVolumetricText: 0
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!222 &997659735
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 997659732}
m_CullTransparentMesh: 1
--- !u!1 &1587889807 --- !u!1 &1587889807
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -878,13 +947,14 @@ RectTransform:
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0 m_ConstrainProportionsScale: 0
m_Children: [] m_Children:
- {fileID: 997659733}
m_Father: {fileID: 481473977} m_Father: {fileID: 481473977}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: -40} m_AnchoredPosition: {x: 0, y: 15.000004}
m_SizeDelta: {x: 160, y: 110} m_SizeDelta: {x: 160, y: 30}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1587889809 --- !u!114 &1587889809
MonoBehaviour: MonoBehaviour:
@ -962,8 +1032,8 @@ MonoBehaviour:
m_OnCullStateChanged: m_OnCullStateChanged:
m_PersistentCalls: m_PersistentCalls:
m_Calls: [] m_Calls: []
m_Sprite: {fileID: -4287216300838241123, guid: 8a60769d8e7b06e4ea5712865d14b809, type: 3} m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 0 m_Type: 1
m_PreserveAspect: 0 m_PreserveAspect: 0
m_FillCenter: 1 m_FillCenter: 1
m_FillMethod: 4 m_FillMethod: 4
@ -1146,7 +1216,6 @@ MonoBehaviour:
name: name:
musicName: musicName:
order: 0 order: 0
difficulty: 0
elements: [] elements: []
--- !u!4 &1832520163 --- !u!4 &1832520163
Transform: Transform:
@ -1268,7 +1337,142 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: a1cd6b406f139414086355a222af717e, type: 3} m_Script: {fileID: 11500000, guid: a1cd6b406f139414086355a222af717e, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
sfxSource: {fileID: 376463334} --- !u!1 &1899869498
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1899869499}
- component: {fileID: 1899869501}
- component: {fileID: 1899869500}
m_Layer: 5
m_Name: ImportText
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1899869499
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1899869498}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 666344588}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1899869500
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1899869498}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_text: Import
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
m_fontMaterials: []
m_fontColor32:
serializedVersion: 2
rgba: 4281479730
m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
m_enableVertexGradient: 0
m_colorMode: 3
m_fontColorGradient:
topLeft: {r: 1, g: 1, b: 1, a: 1}
topRight: {r: 1, g: 1, b: 1, a: 1}
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
bottomRight: {r: 1, g: 1, b: 1, a: 1}
m_fontColorGradientPreset: {fileID: 0}
m_spriteAsset: {fileID: 0}
m_tintAllSprites: 0
m_StyleSheet: {fileID: 0}
m_TextStyleHashCode: -1183493901
m_overrideHtmlColors: 0
m_faceColor:
serializedVersion: 2
rgba: 4294967295
m_fontSize: 24
m_fontSizeBase: 24
m_fontWeight: 400
m_enableAutoSizing: 0
m_fontSizeMin: 18
m_fontSizeMax: 72
m_fontStyle: 1
m_HorizontalAlignment: 2
m_VerticalAlignment: 512
m_textAlignment: 65535
m_characterSpacing: 0
m_wordSpacing: 0
m_lineSpacing: 0
m_lineSpacingMax: 0
m_paragraphSpacing: 0
m_charWidthMaxAdj: 0
m_TextWrappingMode: 1
m_wordWrappingRatios: 0.4
m_overflowMode: 0
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 0
m_ActiveFontFeatures: 6e72656b
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
m_EmojiFallbackSupport: 1
m_parseCtrlCharacters: 1
m_isOrthographic: 1
m_isCullingEnabled: 0
m_horizontalMapping: 0
m_verticalMapping: 0
m_uvLineOffset: 0
m_geometrySortingOrder: 0
m_IsTextObjectScaleStatic: 0
m_VertexBufferAutoSizeReduction: 0
m_useMaxVisibleDescender: 1
m_pageToDisplay: 1
m_margin: {x: 0, y: 0, z: 0, w: 0}
m_isUsingLegacyAnimationComponent: 0
m_isVolumetricText: 0
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!222 &1899869501
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1899869498}
m_CullTransparentMesh: 1
--- !u!1660057539 &9223372036854775807 --- !u!1660057539 &9223372036854775807
SceneRoots: SceneRoots:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -1277,4 +1481,3 @@ SceneRoots:
- {fileID: 481473977} - {fileID: 481473977}
- {fileID: 948896768} - {fileID: 948896768}
- {fileID: 1832520163} - {fileID: 1832520163}
- {fileID: 376463335}

View File

@ -154,7 +154,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 63, y: 48} m_AnchoredPosition: {x: 84.74307, y: 105.52587}
m_SizeDelta: {x: 29.4862, y: 43.7482} m_SizeDelta: {x: 29.4862, y: 43.7482}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &77506302 --- !u!114 &77506302
@ -348,6 +348,142 @@ Transform:
m_Children: [] m_Children: []
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &244257726
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 244257727}
- component: {fileID: 244257729}
- component: {fileID: 244257728}
m_Layer: 5
m_Name: Text (TMP)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &244257727
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 244257726}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 885044259}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &244257728
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 244257726}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_text: Import
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
m_fontMaterials: []
m_fontColor32:
serializedVersion: 2
rgba: 4281479730
m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
m_enableVertexGradient: 0
m_colorMode: 3
m_fontColorGradient:
topLeft: {r: 1, g: 1, b: 1, a: 1}
topRight: {r: 1, g: 1, b: 1, a: 1}
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
bottomRight: {r: 1, g: 1, b: 1, a: 1}
m_fontColorGradientPreset: {fileID: 0}
m_spriteAsset: {fileID: 0}
m_tintAllSprites: 0
m_StyleSheet: {fileID: 0}
m_TextStyleHashCode: -1183493901
m_overrideHtmlColors: 0
m_faceColor:
serializedVersion: 2
rgba: 4294967295
m_fontSize: 24
m_fontSizeBase: 24
m_fontWeight: 400
m_enableAutoSizing: 0
m_fontSizeMin: 18
m_fontSizeMax: 72
m_fontStyle: 0
m_HorizontalAlignment: 2
m_VerticalAlignment: 512
m_textAlignment: 65535
m_characterSpacing: 0
m_wordSpacing: 0
m_lineSpacing: 0
m_lineSpacingMax: 0
m_paragraphSpacing: 0
m_charWidthMaxAdj: 0
m_TextWrappingMode: 1
m_wordWrappingRatios: 0.4
m_overflowMode: 0
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 0
m_ActiveFontFeatures: 6e72656b
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
m_EmojiFallbackSupport: 1
m_parseCtrlCharacters: 1
m_isOrthographic: 1
m_isCullingEnabled: 0
m_horizontalMapping: 0
m_verticalMapping: 0
m_uvLineOffset: 0
m_geometrySortingOrder: 0
m_IsTextObjectScaleStatic: 0
m_VertexBufferAutoSizeReduction: 0
m_useMaxVisibleDescender: 1
m_pageToDisplay: 1
m_margin: {x: 0, y: 0, z: 0, w: 0}
m_isUsingLegacyAnimationComponent: 0
m_isVolumetricText: 0
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!222 &244257729
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 244257726}
m_CullTransparentMesh: 1
--- !u!1 &773247538 --- !u!1 &773247538
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -546,13 +682,14 @@ RectTransform:
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0 m_ConstrainProportionsScale: 0
m_Children: [] m_Children:
- {fileID: 244257727}
m_Father: {fileID: 1442014941} m_Father: {fileID: 1442014941}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: -21.743084, y: -20.66397} m_AnchoredPosition: {x: 0, y: 36.861893}
m_SizeDelta: {x: 170, y: 90} m_SizeDelta: {x: 160, y: 30}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &885044260 --- !u!114 &885044260
MonoBehaviour: MonoBehaviour:
@ -643,8 +780,8 @@ MonoBehaviour:
m_OnCullStateChanged: m_OnCullStateChanged:
m_PersistentCalls: m_PersistentCalls:
m_Calls: [] m_Calls: []
m_Sprite: {fileID: -1409255045544979666, guid: ea1e3303403fe0b43bebec59c2f55590, type: 3} m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 0 m_Type: 1
m_PreserveAspect: 0 m_PreserveAspect: 0
m_FillCenter: 1 m_FillCenter: 1
m_FillMethod: 4 m_FillMethod: 4
@ -712,7 +849,6 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: ef2acea012085a3bb9a981fc334afaec, type: 3} m_Script: {fileID: 11500000, guid: ef2acea012085a3bb9a981fc334afaec, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
sfxSource: {fileID: 1646124753}
--- !u!114 &955286180 --- !u!114 &955286180
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -912,135 +1048,6 @@ RectTransform:
m_AnchoredPosition: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0, y: 0} m_Pivot: {x: 0, y: 0}
--- !u!1 &1646124752
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1646124754}
- component: {fileID: 1646124753}
m_Layer: 0
m_Name: Sound
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!82 &1646124753
AudioSource:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1646124752}
m_Enabled: 1
serializedVersion: 4
OutputAudioMixerGroup: {fileID: 0}
m_audioClip: {fileID: 0}
m_Resource: {fileID: 0}
m_PlayOnAwake: 1
m_Volume: 1
m_Pitch: 1
Loop: 0
Mute: 0
Spatialize: 0
SpatializePostEffects: 0
Priority: 128
DopplerLevel: 1
MinDistance: 1
MaxDistance: 500
Pan2D: 0
rolloffMode: 0
BypassEffects: 0
BypassListenerEffects: 0
BypassReverbZones: 0
rolloffCustomCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 1
value: 0
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
panLevelCustomCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
spreadCustomCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
reverbZoneMixCustomCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
--- !u!4 &1646124754
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1646124752}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 513.29504, y: 455.8944, z: -2.436951}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1660057539 &9223372036854775807 --- !u!1660057539 &9223372036854775807
SceneRoots: SceneRoots:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -1048,4 +1055,3 @@ SceneRoots:
- {fileID: 837005990} - {fileID: 837005990}
- {fileID: 1442014941} - {fileID: 1442014941}
- {fileID: 162069549} - {fileID: 162069549}
- {fileID: 1646124754}

File diff suppressed because it is too large Load Diff

View File

@ -222,81 +222,63 @@ MonoBehaviour:
m_StringArgument: m_StringArgument:
m_BoolArgument: 0 m_BoolArgument: 0
m_CallState: 2 m_CallState: 2
--- !u!1 &99686832 --- !u!1001 &109370708
GameObject: PrefabInstance:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} serializedVersion: 2
m_PrefabInstance: {fileID: 0} m_Modification:
m_PrefabAsset: {fileID: 0} serializedVersion: 3
serializedVersion: 6 m_TransformParent: {fileID: 0}
m_Component: m_Modifications:
- component: {fileID: 99686833} - target: {fileID: 1771296619209216840, guid: e9dda45aef9258745a40efb48437d584, type: 3}
- component: {fileID: 99686835} propertyPath: m_Name
- component: {fileID: 99686834} value: BonusSlowSpeed
m_Layer: 5 objectReference: {fileID: 0}
m_Name: Checkmark - target: {fileID: 6543394447596783970, guid: e9dda45aef9258745a40efb48437d584, type: 3}
m_TagString: Untagged propertyPath: m_LocalPosition.x
m_Icon: {fileID: 0} value: -5.4423084
m_NavMeshLayer: 0 objectReference: {fileID: 0}
m_StaticEditorFlags: 0 - target: {fileID: 6543394447596783970, guid: e9dda45aef9258745a40efb48437d584, type: 3}
m_IsActive: 1 propertyPath: m_LocalPosition.y
--- !u!224 &99686833 value: -2.783749
RectTransform: objectReference: {fileID: 0}
m_ObjectHideFlags: 0 - target: {fileID: 6543394447596783970, guid: e9dda45aef9258745a40efb48437d584, type: 3}
m_CorrespondingSourceObject: {fileID: 0} propertyPath: m_LocalPosition.z
m_PrefabInstance: {fileID: 0} value: 0
m_PrefabAsset: {fileID: 0} objectReference: {fileID: 0}
m_GameObject: {fileID: 99686832} - target: {fileID: 6543394447596783970, guid: e9dda45aef9258745a40efb48437d584, type: 3}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} propertyPath: m_LocalRotation.w
m_LocalPosition: {x: 0, y: 0, z: 0} value: 1
m_LocalScale: {x: 1, y: 1, z: 1} objectReference: {fileID: 0}
m_ConstrainProportionsScale: 0 - target: {fileID: 6543394447596783970, guid: e9dda45aef9258745a40efb48437d584, type: 3}
m_Children: [] propertyPath: m_LocalRotation.x
m_Father: {fileID: 295909703} value: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} objectReference: {fileID: 0}
m_AnchorMin: {x: 0.5, y: 0.5} - target: {fileID: 6543394447596783970, guid: e9dda45aef9258745a40efb48437d584, type: 3}
m_AnchorMax: {x: 0.5, y: 0.5} propertyPath: m_LocalRotation.y
m_AnchoredPosition: {x: 0, y: 0} value: 0
m_SizeDelta: {x: 36.9547, y: 33.6365} objectReference: {fileID: 0}
m_Pivot: {x: 0.5, y: 0.5} - target: {fileID: 6543394447596783970, guid: e9dda45aef9258745a40efb48437d584, type: 3}
--- !u!114 &99686834 propertyPath: m_LocalRotation.z
MonoBehaviour: value: 0
m_ObjectHideFlags: 0 objectReference: {fileID: 0}
m_CorrespondingSourceObject: {fileID: 0} - target: {fileID: 6543394447596783970, guid: e9dda45aef9258745a40efb48437d584, type: 3}
m_PrefabInstance: {fileID: 0} propertyPath: m_LocalEulerAnglesHint.x
m_PrefabAsset: {fileID: 0} value: 0
m_GameObject: {fileID: 99686832} objectReference: {fileID: 0}
m_Enabled: 1 - target: {fileID: 6543394447596783970, guid: e9dda45aef9258745a40efb48437d584, type: 3}
m_EditorHideFlags: 0 propertyPath: m_LocalEulerAnglesHint.y
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} value: 0
m_Name: objectReference: {fileID: 0}
m_EditorClassIdentifier: - target: {fileID: 6543394447596783970, guid: e9dda45aef9258745a40efb48437d584, type: 3}
m_Material: {fileID: 0} propertyPath: m_LocalEulerAnglesHint.z
m_Color: {r: 1, g: 1, b: 1, a: 1} value: 0
m_RaycastTarget: 1 objectReference: {fileID: 0}
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_RemovedComponents: []
m_Maskable: 1 m_RemovedGameObjects: []
m_OnCullStateChanged: m_AddedGameObjects: []
m_PersistentCalls: m_AddedComponents: []
m_Calls: [] m_SourcePrefab: {fileID: 100100000, guid: e9dda45aef9258745a40efb48437d584, type: 3}
m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!222 &99686835
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 99686832}
m_CullTransparentMesh: 1
--- !u!1 &245275147 --- !u!1 &245275147
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -376,82 +358,6 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 245275147} m_GameObject: {fileID: 245275147}
m_CullTransparentMesh: 1 m_CullTransparentMesh: 1
--- !u!1 &295909702
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 295909703}
- component: {fileID: 295909705}
- component: {fileID: 295909704}
m_Layer: 5
m_Name: Background
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &295909703
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 295909702}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 99686833}
m_Father: {fileID: 2145558729}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 49.9975, y: 40.9}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &295909704
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 295909702}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!222 &295909705
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 295909702}
m_CullTransparentMesh: 1
--- !u!1 &487176671 --- !u!1 &487176671
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -528,67 +434,6 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 487176671} m_GameObject: {fileID: 487176671}
m_CullTransparentMesh: 1 m_CullTransparentMesh: 1
--- !u!1001 &496264820
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 3025146551836412649, guid: 5d01d2d55c6c25541b0db90186e76c2b, type: 3}
propertyPath: m_Name
value: BonusBoostSpeed
objectReference: {fileID: 0}
- target: {fileID: 3025146551836412649, guid: 5d01d2d55c6c25541b0db90186e76c2b, type: 3}
propertyPath: m_IsActive
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7134261581051338486, guid: 5d01d2d55c6c25541b0db90186e76c2b, type: 3}
propertyPath: m_LocalPosition.x
value: -2
objectReference: {fileID: 0}
- target: {fileID: 7134261581051338486, guid: 5d01d2d55c6c25541b0db90186e76c2b, type: 3}
propertyPath: m_LocalPosition.y
value: -2.88
objectReference: {fileID: 0}
- target: {fileID: 7134261581051338486, guid: 5d01d2d55c6c25541b0db90186e76c2b, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7134261581051338486, guid: 5d01d2d55c6c25541b0db90186e76c2b, type: 3}
propertyPath: m_LocalRotation.w
value: 0.99681437
objectReference: {fileID: 0}
- target: {fileID: 7134261581051338486, guid: 5d01d2d55c6c25541b0db90186e76c2b, type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 7134261581051338486, guid: 5d01d2d55c6c25541b0db90186e76c2b, type: 3}
propertyPath: m_LocalRotation.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: 7134261581051338486, guid: 5d01d2d55c6c25541b0db90186e76c2b, type: 3}
propertyPath: m_LocalRotation.z
value: -0.079757296
objectReference: {fileID: 0}
- target: {fileID: 7134261581051338486, guid: 5d01d2d55c6c25541b0db90186e76c2b, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7134261581051338486, guid: 5d01d2d55c6c25541b0db90186e76c2b, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7134261581051338486, guid: 5d01d2d55c6c25541b0db90186e76c2b, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: -9.149
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 5d01d2d55c6c25541b0db90186e76c2b, type: 3}
--- !u!1 &519420028 --- !u!1 &519420028
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -5983,8 +5828,6 @@ RectTransform:
- {fileID: 1269654000} - {fileID: 1269654000}
- {fileID: 1464555240} - {fileID: 1464555240}
- {fileID: 6776933} - {fileID: 6776933}
- {fileID: 2145558729}
- {fileID: 2049642316}
m_Father: {fileID: 1371294550} m_Father: {fileID: 1371294550}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMin: {x: 0.5, y: 0.5}
@ -6007,7 +5850,6 @@ MonoBehaviour:
pauseMenu: {fileID: 892725781} pauseMenu: {fileID: 892725781}
pauseButton: {fileID: 1038445495} pauseButton: {fileID: 1038445495}
levelLoader: {fileID: 1999482186} levelLoader: {fileID: 1999482186}
sfxSource: {fileID: 1247869546}
volumeSlider: {fileID: 6776934} volumeSlider: {fileID: 6776934}
--- !u!1 &988798827 --- !u!1 &988798827
GameObject: GameObject:
@ -6433,135 +6275,6 @@ RectTransform:
m_AnchoredPosition: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 100, y: 100} m_SizeDelta: {x: 100, y: 100}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &1247869545
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1247869547}
- component: {fileID: 1247869546}
m_Layer: 0
m_Name: Sound
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!82 &1247869546
AudioSource:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1247869545}
m_Enabled: 1
serializedVersion: 4
OutputAudioMixerGroup: {fileID: 0}
m_audioClip: {fileID: 0}
m_Resource: {fileID: 0}
m_PlayOnAwake: 1
m_Volume: 1
m_Pitch: 1
Loop: 0
Mute: 0
Spatialize: 0
SpatializePostEffects: 0
Priority: 128
DopplerLevel: 1
MinDistance: 1
MaxDistance: 500
Pan2D: 0
rolloffMode: 0
BypassEffects: 0
BypassListenerEffects: 0
BypassReverbZones: 0
rolloffCustomCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 1
value: 0
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
panLevelCustomCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
spreadCustomCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
reverbZoneMixCustomCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
--- !u!4 &1247869547
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1247869545}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 8.485552, y: 2.2081068, z: -0.13737443}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1267397455 --- !u!1 &1267397455
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -6692,8 +6405,6 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: ebe0bd74200510d4aa75c327a76499c6, type: 3} m_Script: {fileID: 11500000, guid: ebe0bd74200510d4aa75c327a76499c6, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
pauseMenu: {fileID: 892725783}
sfxSource: {fileID: 1247869546}
SpeedMultiplier: 1 SpeedMultiplier: 1
--- !u!61 &1267397460 --- !u!61 &1267397460
BoxCollider2D: BoxCollider2D:
@ -7605,9 +7316,7 @@ MonoBehaviour:
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
levelsLoader: {fileID: 0} levelsLoader: {fileID: 0}
editMode: 0 audioSource: {fileID: 1999482188}
createMode: 0
musicSource: {fileID: 1999482188}
progressionText: {fileID: 245275149} progressionText: {fileID: 245275149}
--- !u!4 &1999482187 --- !u!4 &1999482187
Transform: Transform:
@ -7756,197 +7465,6 @@ RectTransform:
m_AnchoredPosition: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 100, y: 100} m_SizeDelta: {x: 100, y: 100}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &2049642315
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2049642316}
- component: {fileID: 2049642318}
- component: {fileID: 2049642317}
m_Layer: 0
m_Name: AI
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &2049642316
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2049642315}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: -2.9565992}
m_LocalScale: {x: 0.4166666, y: 0.4166666, z: 0.4166666}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 892725782}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: -377, y: -274}
m_SizeDelta: {x: 87.0508, y: 79.9371}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &2049642317
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2049642315}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: e3265ab4bf004d28a9537516768c1c75, type: 3}
m_FontSize: 56
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 0
m_MaxSize: 56
m_Alignment: 0
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: AI
--- !u!222 &2049642318
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2049642315}
m_CullTransparentMesh: 1
--- !u!1 &2145558728
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2145558729}
- component: {fileID: 2145558730}
- component: {fileID: 2145558731}
m_Layer: 5
m_Name: CheckboxAI
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &2145558729
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2145558728}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 295909703}
m_Father: {fileID: 892725782}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: -424.55, y: -273.6}
m_SizeDelta: {x: 60.1819, y: 50.9705}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &2145558730
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2145558728}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Navigation:
m_Mode: 3
m_WrapAround: 0
m_SelectOnUp: {fileID: 0}
m_SelectOnDown: {fileID: 0}
m_SelectOnLeft: {fileID: 0}
m_SelectOnRight: {fileID: 0}
m_Transition: 1
m_Colors:
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
m_ColorMultiplier: 1
m_FadeDuration: 0.1
m_SpriteState:
m_HighlightedSprite: {fileID: 0}
m_PressedSprite: {fileID: 0}
m_SelectedSprite: {fileID: 0}
m_DisabledSprite: {fileID: 0}
m_AnimationTriggers:
m_NormalTrigger: Normal
m_HighlightedTrigger: Highlighted
m_PressedTrigger: Pressed
m_SelectedTrigger: Selected
m_DisabledTrigger: Disabled
m_Interactable: 1
m_TargetGraphic: {fileID: 295909704}
toggleTransition: 1
graphic: {fileID: 99686834}
m_Group: {fileID: 0}
onValueChanged:
m_PersistentCalls:
m_Calls:
- m_Target: {fileID: 2145558731}
m_TargetAssemblyTypeName: AI, Assembly-CSharp
m_MethodName: OnAiChange
m_Mode: 1
m_Arguments:
m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0
m_FloatArgument: 0
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
m_IsOn: 0
--- !u!114 &2145558731
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2145558728}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b63079a9773c036389c5b87c12e728c3, type: 3}
m_Name:
m_EditorClassIdentifier:
AIToggle: {fileID: 0}
player: {fileID: 1267397459}
--- !u!1660057539 &9223372036854775807 --- !u!1660057539 &9223372036854775807
SceneRoots: SceneRoots:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -7957,5 +7475,4 @@ SceneRoots:
- {fileID: 1371294550} - {fileID: 1371294550}
- {fileID: 521952202} - {fileID: 521952202}
- {fileID: 555497623} - {fileID: 555497623}
- {fileID: 496264820} - {fileID: 109370708}
- {fileID: 1247869547}

View File

@ -300,7 +300,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 3.6, y: -182.2} m_AnchoredPosition: {x: -0.000013351, y: -98.7}
m_SizeDelta: {x: 629.6868, y: 98.2373} m_SizeDelta: {x: 629.6868, y: 98.2373}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &92159576 --- !u!114 &92159576
@ -438,192 +438,6 @@ Transform:
m_Children: [] m_Children: []
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &334972165
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 334972166}
- component: {fileID: 334972167}
m_Layer: 5
m_Name: Sound
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &334972166
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 334972165}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1153106989}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 100, y: 100}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!82 &334972167
AudioSource:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 334972165}
m_Enabled: 1
serializedVersion: 4
OutputAudioMixerGroup: {fileID: 0}
m_audioClip: {fileID: 0}
m_Resource: {fileID: 0}
m_PlayOnAwake: 1
m_Volume: 1
m_Pitch: 1
Loop: 0
Mute: 0
Spatialize: 0
SpatializePostEffects: 0
Priority: 128
DopplerLevel: 1
MinDistance: 1
MaxDistance: 500
Pan2D: 0
rolloffMode: 0
BypassEffects: 0
BypassListenerEffects: 0
BypassReverbZones: 0
rolloffCustomCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 1
value: 0
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
panLevelCustomCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
spreadCustomCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
reverbZoneMixCustomCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
--- !u!1 &407660540
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 407660541}
- component: {fileID: 407660542}
m_Layer: 5
m_Name: StarsManager
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &407660541
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 407660540}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 760835823}
m_Father: {fileID: 1153106989}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 100, y: 100}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &407660542
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 407660540}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 443f905013127a44f9c3dcf5a8fed74b, type: 3}
m_Name:
m_EditorClassIdentifier:
starTemplate: {fileID: 1331855743}
starsContainer: {fileID: 760835823}
levelsLoader: {fileID: 0}
extraPadding: 10
--- !u!1 &633505916 --- !u!1 &633505916
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -734,7 +548,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 3.6, y: -135.3} m_AnchoredPosition: {x: -22.8, y: -49.119}
m_SizeDelta: {x: 629.6868, y: 98.2373} m_SizeDelta: {x: 629.6868, y: 98.2373}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &760653960 --- !u!114 &760653960
@ -793,42 +607,6 @@ MonoBehaviour:
m_EditorClassIdentifier: m_EditorClassIdentifier:
levelTotalAttemptsText: {fileID: 760653960} levelTotalAttemptsText: {fileID: 760653960}
levelsLoader: {fileID: 0} levelsLoader: {fileID: 0}
--- !u!1 &760835822
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 760835823}
m_Layer: 5
m_Name: StarsContainer
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &760835823
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 760835822}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 1331855742}
m_Father: {fileID: 407660541}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: -41}
m_SizeDelta: {x: 375, y: 100}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &954359120 --- !u!1 &954359120
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -1068,7 +846,6 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 2c53cba3260b30d02b79e69a3198546c, type: 3} m_Script: {fileID: 11500000, guid: 2c53cba3260b30d02b79e69a3198546c, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
sfxSource: {fileID: 334972167}
levelsLoader: {fileID: 0} levelsLoader: {fileID: 0}
--- !u!1 &1099679056 --- !u!1 &1099679056
GameObject: GameObject:
@ -1215,7 +992,6 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: ef2acea012085a3bb9a981fc334afaec, type: 3} m_Script: {fileID: 11500000, guid: ef2acea012085a3bb9a981fc334afaec, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
sfxSource: {fileID: 334972167}
--- !u!1 &1153106988 --- !u!1 &1153106988
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -1255,8 +1031,6 @@ RectTransform:
- {fileID: 760653959} - {fileID: 760653959}
- {fileID: 92159575} - {fileID: 92159575}
- {fileID: 1571276505} - {fileID: 1571276505}
- {fileID: 334972166}
- {fileID: 407660541}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0} m_AnchorMin: {x: 0, y: 0}
@ -1327,81 +1101,6 @@ Canvas:
m_SortingLayerID: 0 m_SortingLayerID: 0
m_SortingOrder: 0 m_SortingOrder: 0
m_TargetDisplay: 0 m_TargetDisplay: 0
--- !u!1 &1331855741
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1331855742}
- component: {fileID: 1331855744}
- component: {fileID: 1331855743}
m_Layer: 5
m_Name: star
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1331855742
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1331855741}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 760835823}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 40, y: 40}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1331855743
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1331855741}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 1781407419429470612, guid: fee916e0a10de404a9c3d67602b6e0fd, type: 3}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!222 &1331855744
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1331855741}
m_CullTransparentMesh: 1
--- !u!1 &1364527281 --- !u!1 &1364527281
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -1547,7 +1246,6 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: c34ef065650ba0802be580828cc0d474, type: 3} m_Script: {fileID: 11500000, guid: c34ef065650ba0802be580828cc0d474, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
sfxSource: {fileID: 334972167}
levelsLoader: {fileID: 0} levelsLoader: {fileID: 0}
--- !u!1 &1571276504 --- !u!1 &1571276504
GameObject: GameObject:
@ -1584,7 +1282,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 3.6, y: -95.2} m_AnchoredPosition: {x: -52.318, y: -147.36}
m_SizeDelta: {x: 629.6868, y: 98.2373} m_SizeDelta: {x: 629.6868, y: 98.2373}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1571276506 --- !u!114 &1571276506
@ -1674,7 +1372,6 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: a1cd6b406f139414086355a222af717e, type: 3} m_Script: {fileID: 11500000, guid: a1cd6b406f139414086355a222af717e, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
sfxSource: {fileID: 0}
--- !u!81 &1975177173 --- !u!81 &1975177173
AudioListener: AudioListener:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 2fabb6c6015f46541a57baf21011fa51
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,19 +0,0 @@
using UnityEngine;
using UnityEngine.UI;
public class AI : MonoBehaviour
{
public Toggle AIToggle;
public Player player;
public void OnAiChange()
{
player.IsAI = AIToggle.isOn;
}
public void Awake()
{
AIToggle = GetComponent<Toggle>();
AIToggle.isOn = player.IsAI;
}
}

View File

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

View File

@ -5,6 +5,4 @@ public interface IGameMode
void Update(Player player); void Update(Player player);
void OnCollisionEnter(Player player, Collision2D collision); void OnCollisionEnter(Player player, Collision2D collision);
void OnCollisionExit(Player player, Collision2D collision); void OnCollisionExit(Player player, Collision2D collision);
void Jump(Player player);
} }

View File

@ -1,4 +1,6 @@
using UnityEngine; using UnityEngine;
using UnityEngine.SceneManagement;
public class NormalGameMode : IGameMode public class NormalGameMode : IGameMode
{ {
@ -13,6 +15,7 @@ public class NormalGameMode : IGameMode
{ {
player.RigidBody.linearVelocity = new Vector2(HorizontalSpeed * player.SpeedMultiplier, player.RigidBody.linearVelocity.y); player.RigidBody.linearVelocity = new Vector2(HorizontalSpeed * player.SpeedMultiplier, player.RigidBody.linearVelocity.y);
if (player.IsColliding && Input.GetKey(JumpKey) && !isRotating) if (player.IsColliding && Input.GetKey(JumpKey) && !isRotating)
{ {
Jump(player); Jump(player);
@ -35,7 +38,7 @@ public class NormalGameMode : IGameMode
UpdateParticlePositionAndRotation(player); UpdateParticlePositionAndRotation(player);
} }
public void Jump(Player player) private void Jump(Player player)
{ {
player.RigidBody.linearVelocity = new Vector2(player.RigidBody.linearVelocity.x, 0); player.RigidBody.linearVelocity = new Vector2(player.RigidBody.linearVelocity.x, 0);
player.RigidBody.AddForce(Vector2.up * JumpForce, ForceMode2D.Impulse); player.RigidBody.AddForce(Vector2.up * JumpForce, ForceMode2D.Impulse);
@ -83,6 +86,16 @@ public class NormalGameMode : IGameMode
public void OnCollisionEnter(Player player, Collision2D collision) public void OnCollisionEnter(Player player, Collision2D collision)
{ {
player.IsColliding = true; player.IsColliding = true;
if (collision.gameObject.CompareTag("Kill"))
{
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
if (collision.gameObject.CompareTag("Win"))
{
SceneManager.LoadScene("SelectLevelScene");
}
} }
public void OnCollisionExit(Player player, Collision2D collision) public void OnCollisionExit(Player player, Collision2D collision)

View File

@ -1,4 +1,3 @@
using System.IO;
using UnityEngine; using UnityEngine;
using UnityEngine.SceneManagement; using UnityEngine.SceneManagement;
@ -7,9 +6,9 @@ public class ShipGameMode : IGameMode
private const float HorizontalSpeed = 8.6f; private const float HorizontalSpeed = 8.6f;
private const float JumpForce = 26.6581f; private const float JumpForce = 26.6581f;
private const KeyCode JumpKey = KeyCode.Space; private const KeyCode JumpKey = KeyCode.Space;
private const float MaxAscentAngle = 45f; private const float UpperAngle = 45f;
private const float MaxDescentAngle = -45f; private const float LowerAngle = -45f;
private const float RotationSpeed = 360f; private const float RotationTransitionDuration = 0.5f;
public void Update(Player player) public void Update(Player player)
{ {
@ -20,27 +19,25 @@ public class ShipGameMode : IGameMode
if (jumpPressed) if (jumpPressed)
{ {
Jump(player); Jump(player);
}
float targetAngle; if (Input.GetKeyDown(JumpKey))
if (player.RigidBody.linearVelocity.y > 0.1f)
{ {
float velocityLerp = Mathf.Clamp01(player.RigidBody.linearVelocity.y / JumpForce); player.Transform.rotation = Quaternion.Euler(0, 0, UpperAngle);
targetAngle = Mathf.Lerp(0f, MaxAscentAngle, velocityLerp);
}
else if (player.RigidBody.linearVelocity.y < -0.1f)
{
float velocityLerp = Mathf.Clamp01(Mathf.Abs(player.RigidBody.linearVelocity.y) / 20f);
targetAngle = Mathf.Lerp(0f, MaxDescentAngle, velocityLerp);
} }
else else
{ {
targetAngle = 0f; player.Transform.rotation = Quaternion.Euler(0, 0, UpperAngle);
} }
}
else
{
float currentAngle = GetCurrentZAngle(player); float currentAngle = GetCurrentZAngle(player);
float newAngle = Mathf.MoveTowardsAngle(currentAngle, targetAngle, RotationSpeed * Time.deltaTime);
float t = Mathf.Clamp01(Time.deltaTime / RotationTransitionDuration);
float interpolationFactor = Mathf.Sin(t * (Mathf.PI / 2));
float newAngle = Mathf.Lerp(currentAngle, LowerAngle, interpolationFactor);
player.Transform.rotation = Quaternion.Euler(0, 0, newAngle); player.Transform.rotation = Quaternion.Euler(0, 0, newAngle);
}
if (player.Particle.gameObject.activeSelf) if (player.Particle.gameObject.activeSelf)
{ {
@ -58,9 +55,7 @@ public class ShipGameMode : IGameMode
return angle; return angle;
} }
public void Jump(Player player) private void Jump(Player player)
{
if (player.RigidBody.linearVelocity.y <= 0.1f)
{ {
player.RigidBody.linearVelocity = new Vector2(player.RigidBody.linearVelocity.x, 0); player.RigidBody.linearVelocity = new Vector2(player.RigidBody.linearVelocity.x, 0);
player.RigidBody.AddForce(Vector2.up * JumpForce, ForceMode2D.Impulse); player.RigidBody.AddForce(Vector2.up * JumpForce, ForceMode2D.Impulse);
@ -69,12 +64,23 @@ public class ShipGameMode : IGameMode
player.LevelsLoader.IncreaseTotalJumps(); player.LevelsLoader.IncreaseTotalJumps();
} }
} }
}
public void OnCollisionEnter(Player player, Collision2D collision) public void OnCollisionEnter(Player player, Collision2D collision)
{ {
float snappedAngle = 0f; if (collision.gameObject.CompareTag("Kill"))
player.Transform.rotation = Quaternion.Euler(0, 0, snappedAngle); {
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
return;
}
if (collision.gameObject.CompareTag("Win"))
{
SceneManager.LoadScene("HomeScene");
return;
}
float currentAngle = GetCurrentZAngle(player);
float shortestAngle = Mathf.DeltaAngle(currentAngle, 0);
player.Transform.rotation = Quaternion.RotateTowards(player.Transform.rotation, Quaternion.Euler(0, 0, 0), Mathf.Abs(shortestAngle));
} }
public void OnCollisionExit(Player player, Collision2D collision) public void OnCollisionExit(Player player, Collision2D collision)

View File

@ -5,18 +5,12 @@ using System.Collections.Generic;
using SimpleFileBrowser; using SimpleFileBrowser;
using TMPro; using TMPro;
#if UNITY_EDITOR
using UnityEditor;
#endif
[RequireComponent(typeof(LevelEditor))] [RequireComponent(typeof(LevelEditor))]
public class JSONExporter : MonoBehaviour public class JSONExporter : MonoBehaviour
{ {
public TMP_Text statusText; public TMP_Text statusText;
public int difficultyToExport = 1;
private LevelEditor editor; private LevelEditor editor;
private string levelsFolder; private string levelsFolder;
private string assetFolderPath;
private void Awake() private void Awake()
{ {
@ -25,8 +19,6 @@ public class JSONExporter : MonoBehaviour
if (!Directory.Exists(levelsFolder)) if (!Directory.Exists(levelsFolder))
Directory.CreateDirectory(levelsFolder); Directory.CreateDirectory(levelsFolder);
assetFolderPath = "Assets/Resources/Levels";
if (statusText == null) if (statusText == null)
{ {
var statusObj = GameObject.Find("StatusText"); var statusObj = GameObject.Find("StatusText");
@ -84,8 +76,7 @@ public class JSONExporter : MonoBehaviour
x = Mathf.Round(pos.x * 100f) / 100f, x = Mathf.Round(pos.x * 100f) / 100f,
y = Mathf.Round(pos.y * 100f) / 100f, y = Mathf.Round(pos.y * 100f) / 100f,
scaleX = Mathf.Round(scale.x * 100f) / 100f, scaleX = Mathf.Round(scale.x * 100f) / 100f,
scaleY = Mathf.Round(scale.y * 100f) / 100f, scaleY = Mathf.Round(scale.y * 100f) / 100f
rotationZ = Mathf.Round(go.transform.rotation.eulerAngles.z * 100f) / 100f
}); });
} }
@ -100,7 +91,6 @@ public class JSONExporter : MonoBehaviour
name = fileName, name = fileName,
musicName = "", musicName = "",
order = 0, order = 0,
difficulty = difficultyToExport,
elements = elements.ToArray() elements = elements.ToArray()
}; };
string json = JsonUtility.ToJson(data, prettyPrint: true); string json = JsonUtility.ToJson(data, prettyPrint: true);
@ -108,39 +98,42 @@ public class JSONExporter : MonoBehaviour
try try
{ {
File.WriteAllText(destPath, json); File.WriteAllText(destPath, json);
SetStatus($"Export successful: {fileName}.json (diff {difficultyToExport})", Color.green); SetStatus("Export successful: " + fileName + ".json", Color.green);
} }
catch (System.Exception e) catch (System.Exception e)
{ {
Debug.LogError("Export error: " + e); Debug.LogError("Export error: " + e);
SetStatus("Export error. See console.", Color.red); SetStatus("Export error. See console.", Color.red);
yield break;
} }
#if UNITY_EDITOR #if UNITY_EDITOR
string assetPath = Path.Combine(assetFolderPath, fileName + ".json"); UnityEditor.AssetDatabase.Refresh();
AssetDatabase.ImportAsset(assetPath, ImportAssetOptions.ForceUpdate);
#endif #endif
var loader = Object.FindAnyObjectByType<LevelsLoader>();
var loader = FindObjectOfType<LevelsLoader>(); if (loader != null)
loader?.RefreshLevels(); loader.RefreshLevels();
} }
private void SetStatus(string message, Color color) private void SetStatus(string message, Color color)
{ {
if (statusText == null) return; if (statusText != null)
{
statusText.text = message; statusText.text = message;
statusText.color = color; statusText.color = color;
statusText.gameObject.SetActive(false); statusText.gameObject.SetActive(false);
statusText.gameObject.SetActive(true); statusText.gameObject.SetActive(true);
Canvas.ForceUpdateCanvases(); Canvas.ForceUpdateCanvases();
} }
}
[System.Serializable] [System.Serializable]
private class SerializableElement private class SerializableElement
{ {
public string type; public string type;
public float x, y, scaleX, scaleY, rotationZ; public float x;
public float y;
public float scaleX;
public float scaleY;
} }
[System.Serializable] [System.Serializable]
@ -149,7 +142,6 @@ public class JSONExporter : MonoBehaviour
public string name; public string name;
public string musicName; public string musicName;
public int order; public int order;
public int difficulty;
public SerializableElement[] elements; public SerializableElement[] elements;
} }
} }

View File

@ -1,153 +0,0 @@
using UnityEngine;
using UnityEngine.UI;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using SimpleFileBrowser;
using TMPro;
[System.Serializable]
public class BlockData
{
public string prefabName;
public Vector3 position;
public float rotationZ;
public Vector3 scale;
}
[System.Serializable]
public class LevelData
{
public string levelName;
public List<BlockData> blocks = new List<BlockData>();
}
public class JSONLevelEditor : MonoBehaviour
{
[Header("UI")]
public TMP_Dropdown levelDropdown;
public Button loadButton;
public Button saveButton;
public TMP_Text statusText;
[Header("Editor")]
public Transform editRoot; // où on instancie les blocs
public List<GameObject> blockPrefabs; // à remplir dans linspecteur (mêmes noms que dans JSON)
private LevelData currentLevel;
private string currentJsonPath;
private void Start()
{
// Remplir la dropdown avec les JSON disponibles dans Resources/Levels
var assets = Resources.LoadAll<TextAsset>("Levels");
levelDropdown.options.Clear();
foreach (var txt in assets)
levelDropdown.options.Add(new TMP_Dropdown.OptionData(txt.name));
levelDropdown.RefreshShownValue();
loadButton.onClick.AddListener(OnLoadClicked);
saveButton.onClick.AddListener(OnSaveClicked);
UpdateStatus("Prêt.", Color.white);
}
private void OnLoadClicked()
{
string lvlName = levelDropdown.options[levelDropdown.value].text;
TextAsset json = Resources.Load<TextAsset>($"Levels/{lvlName}");
if (json == null)
{
UpdateStatus($"Niveau '{lvlName}' introuvable.", Color.red);
return;
}
currentJsonPath = Path.Combine(Application.dataPath, "Resources/Levels", lvlName + ".json");
currentLevel = JsonUtility.FromJson<LevelData>(json.text);
if (currentLevel == null)
{
UpdateStatus("Impossible de parser le JSON.", Color.red);
return;
}
ClearEditRoot();
foreach (var bd in currentLevel.blocks)
{
var prefab = blockPrefabs.Find(p => p.name == bd.prefabName);
if (prefab == null) continue;
var go = Instantiate(prefab, editRoot);
go.transform.localPosition = bd.position;
go.transform.localEulerAngles = new Vector3(0, 0, bd.rotationZ);
go.transform.localScale = bd.scale;
// vous pouvez ajouter un script pour manipuler ce 'go' dans léditeur
}
UpdateStatus($"Niveau '{lvlName}' chargé.", Color.green);
}
private void OnSaveClicked()
{
if (currentLevel == null)
{
UpdateStatus("Aucun niveau chargé.", Color.red);
return;
}
// Reconstruire le LevelData depuis les enfants de editRoot
currentLevel.blocks.Clear();
foreach (Transform child in editRoot)
{
var bd = new BlockData
{
prefabName = child.name.Replace("(Clone)", ""),
position = child.localPosition,
rotationZ = child.localEulerAngles.z,
scale = child.localScale
};
currentLevel.blocks.Add(bd);
}
// Demande path de sauvegarde
StartCoroutine(DoSaveDialog());
}
private IEnumerator DoSaveDialog()
{
yield return FileBrowser.WaitForSaveDialog(
FileBrowser.PickMode.Files, false, null, "json",
"Save JSON", "Save");
if (!FileBrowser.Success)
{
UpdateStatus("Sauvegarde annulée.", Color.red);
yield break;
}
string dest = FileBrowser.Result[0];
if (!dest.EndsWith(".json")) dest += ".json";
string jsonText = JsonUtility.ToJson(currentLevel, true);
try
{
File.WriteAllText(dest, jsonText);
UpdateStatus($"Sauvegardé : {dest}", Color.green);
}
catch (System.Exception e)
{
Debug.LogError(e);
UpdateStatus("Erreur lors de la sauvegarde.", Color.red);
}
}
private void ClearEditRoot()
{
for (int i = editRoot.childCount - 1; i >= 0; i--)
DestroyImmediate(editRoot.GetChild(i).gameObject);
}
private void UpdateStatus(string msg, Color col)
{
if (statusText == null) return;
statusText.text = msg;
statusText.color = col;
}
}

View File

@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 4a995a69086a0184d830aa300b3c2843

View File

@ -11,7 +11,6 @@ public class LevelElement
public float y; public float y;
public float scaleX = -1; public float scaleX = -1;
public float scaleY = -1; public float scaleY = -1;
public float rotationZ = 0;
} }
[System.Serializable] [System.Serializable]
@ -27,7 +26,6 @@ public class Level
public string name; public string name;
public string musicName; public string musicName;
public int order; public int order;
public int difficulty;
public List<LevelElement> elements; public List<LevelElement> elements;

View File

@ -1,6 +1,5 @@
using UnityEngine; using UnityEngine;
using UnityEngine.UI; using UnityEngine.UI;
using UnityEngine.EventSystems;
using System.Collections.Generic; using System.Collections.Generic;
public class LevelEditor : MonoBehaviour public class LevelEditor : MonoBehaviour
@ -8,7 +7,7 @@ public class LevelEditor : MonoBehaviour
[Header("Placement")] [Header("Placement")]
private GameObject currentBlock; private GameObject currentBlock;
private bool isPlacingBlock = false; private bool isPlacingBlock = false;
private Vector3 currentScale = Vector3.one; private Vector3 currentScale = new Vector3(1f, 1f, 1);
private float scaleStep = 0.1f; private float scaleStep = 0.1f;
[Header("UI")] [Header("UI")]
@ -28,393 +27,251 @@ public class LevelEditor : MonoBehaviour
private enum ResizeAxis { None, Horizontal, Vertical } private enum ResizeAxis { None, Horizontal, Vertical }
private ResizeAxis currentResizeAxis = ResizeAxis.None; private ResizeAxis currentResizeAxis = ResizeAxis.None;
private Transform persistentBlockContainer;
void Start() void Start()
{ {
persistentBlockContainer = new GameObject("PlacedBlocks").transform;
DontDestroyOnLoad(persistentBlockContainer.gameObject);
LoadPrefabs(); LoadPrefabs();
GenerateButtons(); GenerateButtons();
} }
void Update()
{
if (IsPointerOverUI()) return;
if (isPlacingBlock && currentBlock != null)
HandleBlockPlacement();
else
HandleBlockSelection();
HandleBlockResizing();
HandleBlockDeletion();
}
void OnDestroy()
{
ClearEditor();
}
#region UI
void LoadPrefabs() void LoadPrefabs()
{ {
var all = Resources.LoadAll<GameObject>("Prefabs"); blockPrefabs.AddRange(Resources.LoadAll<GameObject>("Prefabs"));
blockPrefabs.Clear();
foreach (var prefab in all)
{
var name = prefab.name.ToLower();
if (name == "ground" || name == "winnerwall") continue;
blockPrefabs.Add(prefab);
}
} }
void GenerateButtons() void GenerateButtons()
{ {
ClearCurrentButtons(); if (buttonPrefabTemplate == null)
if (blockGroupContainer == null || buttonPrefabTemplate == null)
{ {
Debug.LogError("UI Container ou prefab manquant."); Debug.LogError("LevelEditor.GenerateButtons(): buttonPrefabTemplate nest pas assigné !");
return; return;
} }
int start = currentPage * buttonsPerPage; if (blockGroupContainer == null)
int end = Mathf.Min(start + buttonsPerPage, blockPrefabs.Count);
for (int i = start; i < end; i++)
{ {
var btn = Instantiate(buttonPrefabTemplate, blockGroupContainer); Debug.LogError("LevelEditor.GenerateButtons(): blockGroupContainer nest pas assigné !");
btn.SetActive(true); return;
SetupButtonVisual(btn.transform, blockPrefabs[i], i - start);
var prefab = blockPrefabs[i];
btn.GetComponent<Button>().onClick.AddListener(() => SelectPrefab(prefab));
currentButtons.Add(btn);
} }
ClearCurrentButtons();
Transform container = blockGroupContainer;
if (container == null || buttonPrefabTemplate == null)
{
Debug.LogError("UI Container ou prefab de bouton manquant.");
return;
} }
void SetupButtonVisual(Transform t, GameObject prefab, int idx) int start = currentPage * buttonsPerPage;
int end = Mathf.Min(start + buttonsPerPage, blockPrefabs.Count);
for (int i = start; i < end; i++)
{ {
var canvas = t.Find("Canvas"); GameObject button = Instantiate(buttonPrefabTemplate, container);
var bg = canvas?.Find("BlankSquare"); button.SetActive(true);
var icon = canvas?.Find("PrefabIcon");
if (bg == null || icon == null) { Destroy(t.gameObject); return; } Transform canvas = button.transform.Find("Canvas");
float xOff = -325f + idx * 125f; Transform bg = canvas?.Find("BlankSquare");
var bgRt = bg.GetComponent<RectTransform>(); Transform icon = canvas?.Find("PrefabIcon");
var icRt = icon.GetComponent<RectTransform>();
bgRt.anchoredPosition = new Vector2(xOff, bgRt.anchoredPosition.y - 110); if (bg == null || icon == null)
icRt.anchoredPosition = new Vector2(xOff, icRt.anchoredPosition.y - 110); {
bg.GetComponent<Image>().sprite = Resources.Load<Sprite>("InGame/ButtonSkin/BlankSquare"); Destroy(button);
icon.GetComponent<Image>().sprite = prefab.GetComponent<SpriteRenderer>()?.sprite; continue;
icRt.sizeDelta = prefab.name.ToLower().Contains("small") }
? new Vector2(50, 25)
: new Vector2(50, 50); float xOffset = -375f + (i - start) * 125f;
bg.GetComponent<RectTransform>().anchoredPosition = new Vector2(xOffset, bg.GetComponent<RectTransform>().anchoredPosition.y);
icon.GetComponent<RectTransform>().anchoredPosition = new Vector2(xOffset, icon.GetComponent<RectTransform>().anchoredPosition.y);
Image bgImage = bg.GetComponent<Image>();
Image iconImage = icon.GetComponent<Image>();
bgImage.sprite = Resources.Load<Sprite>("InGame/ButtonSkin/BlankSquare");
iconImage.sprite = blockPrefabs[i].GetComponent<SpriteRenderer>()?.sprite;
string prefabName = blockPrefabs[i].name.ToLower();
if (prefabName.Contains("smallspike") || prefabName.Contains("smallobstacle"))
icon.GetComponent<RectTransform>().sizeDelta = new Vector2(50, 25);
else
icon.GetComponent<RectTransform>().sizeDelta = new Vector2(50, 50);
GameObject prefab = blockPrefabs[i];
button.GetComponent<Button>().onClick.AddListener(() => SelectPrefab(prefab));
currentButtons.Add(button);
}
} }
void ClearCurrentButtons() void ClearCurrentButtons()
{ {
foreach (var b in currentButtons) Destroy(b); foreach (var button in currentButtons)
Destroy(button);
currentButtons.Clear(); currentButtons.Clear();
} }
public void NextPage() public void NextPage()
{ {
int max = Mathf.CeilToInt(blockPrefabs.Count / (float)buttonsPerPage); int maxPage = 3;
if (currentPage < max - 1) { currentPage++; GenerateButtons(); } Debug.Log(currentPage);
if (currentPage < maxPage - 1)
{
currentPage++;
GenerateButtons();
}
} }
public void PreviousPage() public void PreviousPage()
{ {
if (currentPage > 0) { currentPage--; GenerateButtons(); } Debug.Log(currentPage);
if (currentPage > 0)
{
currentPage--;
GenerateButtons();
}
} }
#endregion
#region Placement
void SelectPrefab(GameObject prefab) void SelectPrefab(GameObject prefab)
{ {
if (isPlacingBlock) return; if (isPlacingBlock) return;
currentScale = DetermineScaleFromName(prefab.name);
string name = prefab.name.ToLower();
if (name.Contains("portal"))
currentScale = new Vector3(0.5f, 0.5f, 1);
else if (name.Contains("small"))
currentScale = new Vector3(0.15f, 0.07f, 1);
else if (name.Contains("spike"))
currentScale = new Vector3(0.15f, 0.15f, 1);
else if (name.Contains("block"))
currentScale = new Vector3(0.2f, 0.2f, 1);
else if (name.Contains("bonus"))
currentScale = new Vector3(0.3f, 0.3f, 1);
else
currentScale = new Vector3(1f, 1f, 1);
InstantiateAndPrepare(prefab, currentScale); InstantiateAndPrepare(prefab, currentScale);
} }
void Update()
Vector3 DetermineScaleFromName(string name)
{ {
name = name.ToLower(); // Déplacement de l'objet en cours de placement
if (name.Contains("portal")) return new Vector3(0.5f, 0.5f, 1); if (isPlacingBlock && currentBlock != null)
if (name.Contains("small")) return new Vector3(0.15f, 0.07f, 1); {
if (name.Contains("spike")) return new Vector3(0.15f, 0.15f, 1); Vector2 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
if (name.Contains("block")) return new Vector3(0.2f, 0.2f, 1); currentBlock.transform.position = new Vector3(Mathf.Round(mousePos.x), Mathf.Round(mousePos.y), -1);
if (name.Contains("bonus")) return new Vector3(0.3f, 0.3f, 1);
return Vector3.one; if (currentBlock != null && Input.GetKeyDown(KeyCode.R))
{
HandleBlockRotation(); // ✅ Nouvelle rotation
} }
void HandleBlockPlacement()
{
Vector2 m = Camera.main.ScreenToWorldPoint(Input.mousePosition);
currentBlock.transform.position = new Vector3(Mathf.Round(m.x), Mathf.Round(m.y), -1);
if (Input.GetKeyDown(KeyCode.R)) HandleBlockRotation();
if (!currentBlock.name.ToLower().Contains("portal")) if (!currentBlock.name.ToLower().Contains("portal"))
{ {
float s = Input.GetAxis("Mouse ScrollWheel"); float scroll = Input.GetAxis("Mouse ScrollWheel");
if (s != 0) if (scroll != 0)
{ {
float ns = Mathf.Max(0.1f, currentScale.x + s * scaleStep); float newScale = Mathf.Max(0.1f, currentScale.x + scroll * scaleStep);
currentScale = Vector3.one * ns; currentScale = new Vector3(newScale, newScale, 1);
currentBlock.transform.localScale = currentScale; currentBlock.transform.localScale = currentScale;
} }
} }
if (Input.GetMouseButtonDown(0)) if (Input.GetMouseButtonDown(0))
{ {
if (!IsPlacementValid()) Collider2D[] overlaps = Physics2D.OverlapBoxAll(
currentBlock.transform.position,
currentBlock.GetComponent<Collider2D>().bounds.size,
0f
);
if (overlaps.Length > 1)
{ {
Debug.Log("Placement annulé : un objet est déjà présent à cet endroit.");
return; return;
} }
PlaceBlock(); PlaceBlock();
} }
} }
else if (Input.GetMouseButtonDown(0)) // Clic gauche pour reprendre un objet déjà placé
{
Vector2 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Collider2D hit = Physics2D.OverlapPoint(mousePos);
bool IsPlacementValid() if (hit != null && hit.transform != null)
{ {
var col = currentBlock.GetComponent<Collider2D>(); if (hit.CompareTag("Ground"))
var hits = Physics2D.OverlapBoxAll(col.bounds.center, col.bounds.size, 0f);
foreach (var h in hits)
{ {
if (h == col) continue; Debug.Log("Impossible de déplacer le sol (tag Ground).");
if (h.transform.IsChildOf(currentBlock.transform)) continue; return;
return false;
} }
return true; currentBlock = hit.gameObject;
}
void HandleBlockSelection()
{
if (!Input.GetMouseButtonDown(0)) return;
Vector2 m = Camera.main.ScreenToWorldPoint(Input.mousePosition);
var hit = Physics2D.OverlapPoint(m);
if (hit != null && !hit.CompareTag("Ground"))
{
var sel = hit.gameObject;
if ((sel.name.Contains("ObstacleSafer") || sel.name.Contains("ObstacleKiller"))
&& sel.transform.parent != null
&& sel.transform.parent.name.Contains("ObstacleBlock"))
sel = sel.transform.parent.gameObject;
currentBlock = sel;
isPlacingBlock = true; isPlacingBlock = true;
currentScale = currentBlock.transform.localScale; currentScale = currentBlock.transform.localScale;
Debug.Log($"Déplacement de l'objet : {currentBlock.name}");
return;
} }
} }
void PlaceBlock()
{
string name = currentBlock.name.ToLower();
bool isSpikeType = name.Contains("spike") || name.Contains("smallspike") || name.Contains("killzone");
if (isSpikeType) // Redimensionnement d'un objet déjà placé
{
if (IsBlockedBySameTypeInSnapDirection())
{
Debug.LogError("Impossible de poser un spike sur un autre spike !");
Destroy(currentBlock);
}
else
{
if (!SnapSpikeByRotation())
{
Debug.LogError("Impossible de poser un spike dans le vide !");
Destroy(currentBlock);
}
else
{
TrySnapToNearbyBlock();
}
}
}
else
{
TrySnapToNearbyBlock();
if (name.Contains("obstacleblock"))
{
foreach (Transform child in currentBlock.transform)
{
if (child.name.ToLower().Contains("obstaclekiller"))
{
var col = child.GetComponent<BoxCollider2D>();
if (col != null)
{
Vector2 originalSize = col.size;
col.size = new Vector2(originalSize.x, 1f);
col.offset = new Vector2(col.offset.x, -0.5f);
}
}
}
}
}
isPlacingBlock = false;
currentBlock = null;
}
bool IsBlockedBySameTypeInSnapDirection()
{
var col = currentBlock.GetComponent<Collider2D>();
var b = col.bounds;
int rot = (Mathf.RoundToInt(currentBlock.transform.eulerAngles.z / 90) % 4 + 4) % 4;
Vector2 dir = rot switch
{
1 => Vector2.right,
2 => Vector2.up,
3 => Vector2.left,
_ => Vector2.down
};
float offset = 0.01f;
Vector2 origin = rot switch
{
1 => new Vector2(b.min.x - offset, b.center.y), // left
3 => new Vector2(b.max.x + offset, b.center.y), // right
2 => new Vector2(b.center.x, b.max.y + offset), // top
_ => new Vector2(b.center.x, b.min.y - offset) // bottom
};
RaycastHit2D[] hits = Physics2D.BoxCastAll(
origin,
b.size,
0f,
dir,
100f
);
foreach (var h in hits)
{
if (h.collider == null || h.collider.gameObject == currentBlock) continue;
if (h.collider.isTrigger) continue;
string me = currentBlock.name.ToLower();
string other = h.collider.gameObject.name.ToLower();
bool meIsSpikeFamily = me.Contains("spike") || me.Contains("killzone");
bool otherIsSpikeFamily = other.Contains("spike") || other.Contains("killzone");
if (meIsSpikeFamily && otherIsSpikeFamily)
{
return true;
}
break;
}
return false;
}
bool SnapSpikeByRotation()
{
var col = currentBlock.GetComponent<Collider2D>();
var b = col.bounds;
float hw = b.extents.x;
float hh = b.extents.y;
int rot = ((Mathf.RoundToInt(currentBlock.transform.eulerAngles.z / 90f) % 4) + 4) % 4;
Vector2 dir;
switch (rot)
{
case 1: dir = Vector2.right; break;
case 2: dir = Vector2.up; break;
case 3: dir = Vector2.left; break;
default: dir = Vector2.down; break;
}
const float eps = 0.01f;
List<Vector2> origins = new List<Vector2>();
if (dir == Vector2.down || dir == Vector2.up)
{
float y0 = (dir == Vector2.down) ? b.min.y - eps : b.max.y + eps;
origins.Add(new Vector2(b.min.x + 0.1f * b.size.x, y0));
origins.Add(new Vector2(b.center.x, y0));
origins.Add(new Vector2(b.max.x - 0.1f * b.size.x, y0));
}
else
{
float x0 = (dir == Vector2.left) ? b.min.x - eps : b.max.x + eps;
origins.Add(new Vector2(x0, b.min.y + 0.1f * b.size.y));
origins.Add(new Vector2(x0, b.center.y));
origins.Add(new Vector2(x0, b.max.y - 0.1f * b.size.y));
}
float bestDist = float.PositiveInfinity;
RaycastHit2D bestHit = default;
foreach (var o in origins)
{
var hits = Physics2D.RaycastAll(o, dir, 100f);
foreach (var h in hits)
{
if (h.collider == null || h.collider.gameObject == currentBlock) continue;
if (h.collider.isTrigger) continue;
if (h.distance < bestDist)
{
bestDist = h.distance;
bestHit = h;
}
}
}
if (bestHit.collider == null)
return false;
Vector3 p = currentBlock.transform.position;
if (dir == Vector2.down) p.y = bestHit.point.y + hh;
else if (dir == Vector2.up) p.y = bestHit.point.y - hh;
else if (dir == Vector2.left) p.x = bestHit.point.x + hw;
else if (dir == Vector2.right) p.x = bestHit.point.x - hw;
currentBlock.transform.position = new Vector3(p.x, p.y, -1f);
return true;
}
#endregion
#region Resizing & Deletion
void HandleBlockResizing()
{
if (Input.GetMouseButtonDown(0) && Input.GetKey(KeyCode.LeftShift) && !isPlacingBlock) if (Input.GetMouseButtonDown(0) && Input.GetKey(KeyCode.LeftShift) && !isPlacingBlock)
{ {
Vector2 m = Camera.main.ScreenToWorldPoint(Input.mousePosition); Vector2 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
var hit = Physics2D.OverlapPoint(m); Collider2D hit = Physics2D.OverlapPoint(mousePos);
if (hit != null && !hit.CompareTag("Ground"))
BeginResizing(hit.gameObject, m);
}
if (isResizing && resizingTarget != null)
PerformResizing();
}
void BeginResizing(GameObject tgt, Vector2 mPos) if (hit != null && hit.transform != null && !hit.CompareTag("Ground"))
{ {
resizingTarget = tgt; resizingTarget = hit.gameObject;
originalMousePos = mPos; originalMousePos = mousePos;
originalScale = tgt.transform.localScale; originalScale = resizingTarget.transform.localScale;
Vector2 local = mPos - (Vector2)tgt.transform.position;
float ratio = tgt.GetComponent<Collider2D>().bounds.size.x / tgt.GetComponent<Collider2D>().bounds.size.y; Vector2 localClick = mousePos - (Vector2)resizingTarget.transform.position;
currentResizeAxis = Mathf.Abs(local.x) > Mathf.Abs(local.y * ratio) float ratio = resizingTarget.GetComponent<Collider2D>().bounds.size.x /
resizingTarget.GetComponent<Collider2D>().bounds.size.y;
currentResizeAxis = Mathf.Abs(localClick.x) > Mathf.Abs(localClick.y * ratio)
? ResizeAxis.Horizontal ? ResizeAxis.Horizontal
: ResizeAxis.Vertical; : ResizeAxis.Vertical;
isResizing = true; isResizing = true;
Debug.Log($"Début de redimensionnement : {resizingTarget.name}, axe = {currentResizeAxis}");
}
} }
void PerformResizing() if (isResizing && resizingTarget != null)
{ {
Vector3 m = Camera.main.ScreenToWorldPoint(Input.mousePosition); Vector3 currentMousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector3 delta = m - originalMousePos; Vector3 delta = currentMousePos - originalMousePos;
Vector3 ns = originalScale;
Vector3 newScale = originalScale;
if (currentResizeAxis == ResizeAxis.Horizontal) if (currentResizeAxis == ResizeAxis.Horizontal)
ns.x = Mathf.Max(0.1f, originalScale.x + delta.x); newScale.x = Mathf.Max(0.1f, originalScale.x + delta.x);
else else if (currentResizeAxis == ResizeAxis.Vertical)
ns.y = Mathf.Max(0.1f, originalScale.y + delta.y); newScale.y = Mathf.Max(0.1f, originalScale.y + delta.y);
resizingTarget.transform.localScale = ns;
if (IsOverlapping(resizingTarget)) // Temporarily apply the new scale for collision testing
Vector3 originalPos = resizingTarget.transform.position;
resizingTarget.transform.localScale = newScale;
Bounds bounds = resizingTarget.GetComponent<Collider2D>().bounds;
Collider2D[] overlaps = Physics2D.OverlapBoxAll(bounds.center, bounds.size, 0f);
bool hasCollision = false;
foreach (var col in overlaps)
{ {
resizingTarget.transform.localScale = originalScale; if (col.gameObject != resizingTarget)
{
hasCollision = true;
break;
} }
}
if (hasCollision)
{
resizingTarget.transform.localScale = originalScale; // revert
Debug.Log("Étirement annulé : collision détectée.");
}
if (Input.GetMouseButtonUp(0)) if (Input.GetMouseButtonUp(0))
{ {
isResizing = false; isResizing = false;
@ -423,153 +280,174 @@ public class LevelEditor : MonoBehaviour
} }
} }
bool IsOverlapping(GameObject obj)
// Clic droit pour supprimer un objet déjà placé (sauf le sol)
if (Input.GetMouseButtonDown(1))
{ {
var b = obj.GetComponent<Collider2D>().bounds; Vector2 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
foreach (var h in Physics2D.OverlapBoxAll(b.center, b.size, 0f)) Collider2D hit = Physics2D.OverlapPoint(mousePos);
if (h.gameObject != obj) return true;
return false;
}
void HandleBlockDeletion() if (hit != null && hit.transform != null)
{ {
if (!Input.GetMouseButtonDown(1)) return; if (hit.CompareTag("Ground"))
Vector2 m = Camera.main.ScreenToWorldPoint(Input.mousePosition);
var hit = Physics2D.OverlapPoint(m);
if (hit != null && !hit.CompareTag("Ground"))
{ {
var toD = hit.gameObject; Debug.Log("Impossible de supprimer le sol (tag Ground).");
if ((toD.name.Contains("ObstacleSafer") || toD.name.Contains("ObstacleKiller"))
&& toD.transform.parent != null
&& toD.transform.parent.name.Contains("ObstacleBlock"))
toD = toD.transform.parent.gameObject;
if (toD == currentBlock) { currentBlock = null; isPlacingBlock = false; }
Destroy(toD);
}
}
#endregion
#region Utility
bool IsPointerOverUI()
=> EventSystem.current != null && EventSystem.current.IsPointerOverGameObject();
void TrySnapToNearbyBlock()
{
if (currentBlock == null) return;
var col = currentBlock.GetComponent<Collider2D>();
var b = col.bounds;
float snapDistance = 2f;
float verticalEps = 0.1f;
// === SNAP HORIZONTAL (droite)
Vector2 hBoxSize = new Vector2(snapDistance, b.size.y - verticalEps * 2f);
Vector2 rightCenter = new Vector2(b.max.x + snapDistance / 2f, b.center.y);
var hits = Physics2D.OverlapBoxAll(rightCenter, hBoxSize, 0f);
foreach (var h in hits)
{
if (IsInvalidSnapTarget(h)) continue;
float newX = h.bounds.min.x - b.extents.x;
currentBlock.transform.position = new Vector3(newX, currentBlock.transform.position.y, -1f);
return; return;
} }
// === SNAP HORIZONTAL (gauche) Destroy(hit.gameObject);
Vector2 leftCenter = new Vector2(b.min.x - snapDistance / 2f, b.center.y); Debug.Log($"Objet supprimé : {hit.name}");
hits = Physics2D.OverlapBoxAll(leftCenter, hBoxSize, 0f); }
foreach (var h in hits)
{
if (IsInvalidSnapTarget(h)) continue;
float newX = h.bounds.max.x + b.extents.x;
currentBlock.transform.position = new Vector3(newX, currentBlock.transform.position.y, -1f);
return;
} }
// === SNAP VERTICAL (dessous)
Vector2 downBoxSize = new Vector2(b.size.x - 0.1f, snapDistance);
Vector2 downCenter = new Vector2(b.center.x, b.min.y - snapDistance / 2f);
hits = Physics2D.OverlapBoxAll(downCenter, downBoxSize, 0f);
foreach (var h in hits)
{
if (IsInvalidSnapTarget(h)) continue;
float newY = h.bounds.max.y + b.extents.y;
currentBlock.transform.position = new Vector3(currentBlock.transform.position.x, newY, -1f);
return;
} }
// === SNAP VERTICAL (au-dessus) void PlaceBlock()
Vector2 upCenter = new Vector2(b.center.x, b.max.y + snapDistance / 2f);
hits = Physics2D.OverlapBoxAll(upCenter, downBoxSize, 0f);
foreach (var h in hits)
{ {
if (IsInvalidSnapTarget(h)) continue; bool skipVerticalSnap = false;
float newY = h.bounds.min.y - b.extents.y;
currentBlock.transform.position = new Vector3(currentBlock.transform.position.x, newY, -1f); if (currentBlock.name.ToLower().Contains("smallobstacle") || currentBlock.name.ToLower().Contains("portal"))
{
skipVerticalSnap = true; // On saute l'alignement vertical pour ces cas-là
}
if (!skipVerticalSnap)
{
Vector2 origin = currentBlock.transform.position;
RaycastHit2D[] hitsBelow = Physics2D.RaycastAll(origin, Vector2.down, 100f);
float highestY = -Mathf.Infinity;
GameObject bestTargetBelow = null;
foreach (var hit in hitsBelow)
{
if (hit.collider != null && hit.collider.gameObject != currentBlock)
{
float topOfObject = hit.collider.bounds.max.y;
if (topOfObject > highestY)
{
highestY = topOfObject;
bestTargetBelow = hit.collider.gameObject;
}
}
}
if (bestTargetBelow != null)
{
float height = currentBlock.GetComponent<Collider2D>().bounds.size.y;
currentBlock.transform.position = new Vector3(currentBlock.transform.position.x, highestY + height / 2f, -1);
}
else
{
float height = currentBlock.GetComponent<Collider2D>().bounds.size.y;
currentBlock.transform.position = new Vector3(currentBlock.transform.position.x, height / 2f, -1);
}
}
// ➔ Toujours essayer de snap sur la droite et en bas même pour Portal et SmallObstacle
TrySnapToNearbyBlock();
isPlacingBlock = false;
currentBlock = null;
}
private void TrySnapToNearbyBlock()
{
if (currentBlock == null)
return;
Collider2D blockCollider = currentBlock.GetComponent<Collider2D>();
Bounds bounds = blockCollider.bounds;
float snapDistance = 1f; // Distance de snap (en Unity units)
// Zone de scan à droite
Vector2 rightAreaStart = new Vector2(bounds.max.x, bounds.min.y);
Vector2 rightAreaEnd = new Vector2(bounds.max.x + snapDistance, bounds.max.y);
// Zone de scan à gauche
Vector2 leftAreaStart = new Vector2(bounds.min.x - snapDistance, bounds.min.y);
Vector2 leftAreaEnd = new Vector2(bounds.min.x, bounds.max.y);
// Zone de scan en dessous
Vector2 bottomAreaStart = new Vector2(bounds.min.x, bounds.min.y - snapDistance);
Vector2 bottomAreaEnd = new Vector2(bounds.max.x, bounds.min.y);
// Zone de scan au dessus
Vector2 topAreaStart = new Vector2(bounds.min.x, bounds.max.y);
Vector2 topAreaEnd = new Vector2(bounds.max.x, bounds.max.y + snapDistance);
Collider2D[] hitsRight = Physics2D.OverlapAreaAll(rightAreaStart, rightAreaEnd);
Collider2D[] hitsLeft = Physics2D.OverlapAreaAll(leftAreaStart, leftAreaEnd);
Collider2D[] hitsBelow = Physics2D.OverlapAreaAll(bottomAreaStart, bottomAreaEnd);
Collider2D[] hitsAbove = Physics2D.OverlapAreaAll(topAreaStart, topAreaEnd);
// ➔ Priorité : droite > gauche > bas > haut
foreach (var hit in hitsRight)
{
if (hit != null && hit.gameObject != currentBlock)
{
float theirLeft = hit.bounds.min.x;
float ourWidth = bounds.size.x;
currentBlock.transform.position = new Vector3(theirLeft - ourWidth / 2f, currentBlock.transform.position.y, -1);
Debug.Log("✅ Snap automatique à droite !");
return; return;
} }
} }
bool IsInvalidSnapTarget(Collider2D h) foreach (var hit in hitsLeft)
{ {
if (h == null || h.gameObject == currentBlock || h.isTrigger) return true; if (hit != null && hit.gameObject != currentBlock)
var t = h.transform;
if (t.parent != null && t.parent.name.Contains("ObstacleBlock"))
{ {
if (t.name.Contains("ObstacleKiller") || t.name.Contains("ObstacleSafer")) float theirRight = hit.bounds.max.x;
return true; float ourWidth = bounds.size.x;
currentBlock.transform.position = new Vector3(theirRight + ourWidth / 2f, currentBlock.transform.position.y, -1);
Debug.Log("✅ Snap automatique à gauche !");
return;
}
} }
return false; foreach (var hit in hitsBelow)
}
// Filtrage des enfants parasites
bool IsChildOfObstacleBlock(Collider2D col)
{ {
var t = col.transform; if (hit != null && hit.gameObject != currentBlock)
if (t.parent == null) return false;
bool isNamedObstacleChild = t.name.Contains("ObstacleSafer") || t.name.Contains("ObstacleKiller");
bool parentIsBlock = t.parent.name.Contains("ObstacleBlock");
return isNamedObstacleChild && parentIsBlock;
}
void HandleBlockRotation()
{ {
currentBlock.transform.Rotate(0, 0, -90f); float theirTop = hit.bounds.max.y;
float ourHeight = bounds.size.y;
currentBlock.transform.position = new Vector3(currentBlock.transform.position.x, theirTop + ourHeight / 2f, -1);
Debug.Log("✅ Snap automatique en bas !");
return;
}
} }
foreach (var hit in hitsAbove)
{
if (hit != null && hit.gameObject != currentBlock)
{
float theirBottom = hit.bounds.min.y;
float ourHeight = bounds.size.y;
currentBlock.transform.position = new Vector3(currentBlock.transform.position.x, theirBottom - ourHeight / 2f, -1);
Debug.Log("✅ Snap automatique en haut !");
return;
}
}
}
void InstantiateAndPrepare(GameObject prefab, Vector3? scaleOverride = null) void InstantiateAndPrepare(GameObject prefab, Vector3? scaleOverride = null)
{ {
var obj = Instantiate(prefab, persistentBlockContainer); GameObject obj = Instantiate(prefab);
obj.transform.position = new Vector3(0, 0, -1); obj.transform.position = new Vector3(0, 0, -1);
obj.transform.localScale = scaleOverride ?? currentScale; obj.transform.localScale = scaleOverride ?? currentScale;
try { obj.tag = prefab.name; }
catch { Debug.LogWarning($"Le tag '{prefab.name}' n'existe pas. Ajoutez-le dans Project Settings > Tags."); }
currentBlock = obj; currentBlock = obj;
currentBlock.tag = prefab.tag;
isPlacingBlock = true; isPlacingBlock = true;
} }
public void Save() private void HandleBlockRotation()
{ {
} currentBlock.transform.Rotate(0f, 0f, -90f); // ➔ Rotation de 90° dans le sens horaire
Debug.Log("🔄 Bloc pivoté de 90° !");
#endregion
public void ClearEditor()
{
if (persistentBlockContainer == null) return;
foreach (Transform child in persistentBlockContainer)
{
Destroy(child.gameObject);
}
currentBlock = null;
isPlacingBlock = false;
currentPage = 0;
ClearCurrentButtons();
GenerateButtons();
} }
} }

View File

@ -5,38 +5,29 @@ using System.IO;
public class LevelLoader : MonoBehaviour public class LevelLoader : MonoBehaviour
{ {
public LevelsLoader levelsLoader; public LevelsLoader levelsLoader;
public bool editMode; public AudioSource audioSource;
public bool createMode;
public AudioSource musicSource;
public Text progressionText; public Text progressionText;
private readonly float groundY = -6.034f; private readonly float groundY = -6.034f;
private GameObject GetPrefab(string type) private GameObject GetPrefab(string type)
{ {
var prefab = Resources.Load<GameObject>("Prefabs/" + type); return Resources.Load<GameObject>("Prefabs/" + type);
if (prefab == null)
{
Debug.LogError($"Prefab introuvable pour : {type}");
}
return prefab;
} }
private void LoadAudio() private void LoadAudio()
{ {
musicSource.clip = Resources.Load<AudioClip>(Path.Combine("Musics", levelsLoader.levelCurrent.musicName)); audioSource.clip = Resources.Load<AudioClip>(Path.Combine("Musics", levelsLoader.levelCurrent.musicName));
if (editMode)
{
return;
}
if (PlayerPrefs.HasKey("Volume")) if (PlayerPrefs.HasKey("Volume"))
{ {
musicSource.volume = PlayerPrefs.GetFloat("Volume"); audioSource.volume = PlayerPrefs.GetFloat("Volume");
} }
else else
{ {
musicSource.volume = 1f; audioSource.volume = 1f;
} }
musicSource.Play();
audioSource.Play();
} }
private void LoadElements() private void LoadElements()
@ -45,112 +36,35 @@ public class LevelLoader : MonoBehaviour
foreach (var element in current.elements) foreach (var element in current.elements)
{ {
GameObject prefab = GetPrefab(element.type); GameObject prefab = GetPrefab(element.type);
if (prefab == null) continue; GameObject instance = Instantiate(prefab, new Vector3(element.x, element.y, 0), Quaternion.identity);
GameObject instance = Instantiate(
prefab,
new Vector3(element.x, element.y, 0),
Quaternion.identity
);
if (editMode)
{
foreach (Transform child in instance.transform)
{
if (child.name.Contains("ObstacleKiller"))
{
var col = child.GetComponent<BoxCollider2D>();
if (col != null && col.size.y > 2f) // Trop grand
{
Debug.LogWarning($"⚠️ Collider {child.name} trop grand, réduction appliquée.");
col.size = new Vector2(col.size.x, 1f);
col.offset = new Vector2(col.offset.x, -2f); // Ajuste selon ton design
}
}
}
}
// En mode jeu/test uniquement → ajout du AICollider
if (!editMode)
{
Instantiate(
Resources.Load<GameObject>("AICollider"),
new Vector3(element.x - 1, element.y, 0),
Quaternion.identity
);
}
// Appliquer l'échelle personnalisée
Vector3 originalScale = instance.transform.localScale; Vector3 originalScale = instance.transform.localScale;
float newScaleX = element.scaleX > 0 ? element.scaleX : originalScale.x; float newScaleX = element.scaleX > 0 ? element.scaleX : originalScale.x;
float newScaleY = element.scaleY > 0 ? element.scaleY : originalScale.y; float newScaleY = element.scaleY > 0 ? element.scaleY : originalScale.y;
instance.transform.localScale = new Vector3(newScaleX, newScaleY, originalScale.z); instance.transform.localScale = new Vector3(newScaleX, newScaleY, originalScale.z);
// Appliquer la rotation
if (element.rotationZ != 0)
{
instance.transform.rotation = Quaternion.Euler(0, 0, element.rotationZ);
}
} }
// Sol uniquement en mode jeu
if (!editMode)
{
GameObject groundPrefab = GetPrefab("Ground");
if (groundPrefab != null)
{
GameObject groundInstance = Instantiate(
groundPrefab,
new Vector3(current.LastX / 2, groundY, 0),
Quaternion.identity
);
groundInstance.transform.localScale = new Vector3(current.LastX / 5f * 2, 1, 1);
}
GameObject winWall = GetPrefab("WinnerWall");
Instantiate(
winWall,
new Vector3(current.LastX, 0, 0),
Quaternion.Euler(0, 0, 90)
);
}
}
private void Awake()
{
levelsLoader = GameObject.FindGameObjectWithTag("LevelsLoader").GetComponent<LevelsLoader>();
Level current = levelsLoader.levelCurrent;
createMode = PlayerPrefs.GetInt("CreateMode", 0) == 1;
if (!editMode)
{
GameObject groundPrefab = GetPrefab("Ground"); GameObject groundPrefab = GetPrefab("Ground");
GameObject groundInstance = Instantiate(groundPrefab, new Vector3(current.LastX / 2, groundY, 0), Quaternion.identity); GameObject groundInstance = Instantiate(groundPrefab, new Vector3(current.LastX / 2, groundY, 0), Quaternion.identity);
float groundWidth = current.LastX; float groundWidth = current.LastX;
groundInstance.transform.localScale = new Vector3(groundWidth / 5f * 2, 1, 1); groundInstance.transform.localScale = new Vector3(groundWidth / 5f * 2, 1, 1);
Instantiate(GetPrefab("WinnerWall"), new Vector3(current.LastX, 0, 0), Quaternion.Euler(0, 0, 90)); Instantiate(GetPrefab("WinnerWall"), new Vector3(current.LastX, 0, 0), Quaternion.Euler(0, 0, 90));
} }
}
public void Start() public void Start()
{ {
if (!createMode) levelsLoader = GameObject.FindGameObjectWithTag("LevelsLoader").GetComponent<LevelsLoader>();
{
levelsLoader = GameObject
.FindGameObjectWithTag("LevelsLoader")
.GetComponent<LevelsLoader>();
levelsLoader.IncreaseTotalAttempts(); levelsLoader.IncreaseTotalAttempts();
LoadElements();
LoadAudio(); LoadAudio();
} LoadElements();
} }
public void Update() public void Update()
{ {
if (!editMode) Level current = levelsLoader.levelCurrent;
{ progressionText.text = current.ProgressionPercent + "%";
progressionText.text = levelsLoader.levelCurrent.ProgressionPercent + "%";
}
} }
} }

View File

@ -50,10 +50,7 @@ public class LevelsLoader : MonoBehaviour
private void SaveLevelCurrent() private void SaveLevelCurrent()
{ {
if (levelCurrent == null) if (levelCurrent == null) return;
{
return;
}
LevelStat levelStat = new() LevelStat levelStat = new()
{ {
@ -71,10 +68,7 @@ public class LevelsLoader : MonoBehaviour
public void NextLevel() public void NextLevel()
{ {
if (levels.Count == 0) if (levels.Count == 0) return;
{
return;
}
int currentIndex = levels.IndexOf(levelCurrent); int currentIndex = levels.IndexOf(levelCurrent);
levelCurrent = levels[(currentIndex + 1) % levels.Count]; levelCurrent = levels[(currentIndex + 1) % levels.Count];
@ -82,10 +76,7 @@ public class LevelsLoader : MonoBehaviour
public void PreviousLevel() public void PreviousLevel()
{ {
if (levels.Count == 0) if (levels.Count == 0) return;
{
return;
}
int currentIndex = levels.IndexOf(levelCurrent); int currentIndex = levels.IndexOf(levelCurrent);
levelCurrent = levels[(currentIndex - 1 + levels.Count) % levels.Count]; levelCurrent = levels[(currentIndex - 1 + levels.Count) % levels.Count];
@ -93,10 +84,7 @@ public class LevelsLoader : MonoBehaviour
public void IncreaseTotalJumps() public void IncreaseTotalJumps()
{ {
if (levelCurrent == null) if (levelCurrent == null) return;
{
return;
}
levelCurrent.TotalJumps += 1; levelCurrent.TotalJumps += 1;
SaveLevelCurrent(); SaveLevelCurrent();
@ -104,10 +92,7 @@ public class LevelsLoader : MonoBehaviour
public void IncreaseTotalAttempts() public void IncreaseTotalAttempts()
{ {
if (levelCurrent == null) if (levelCurrent == null) return;
{
return;
}
levelCurrent.TotalAttempts += 1; levelCurrent.TotalAttempts += 1;
SaveLevelCurrent(); SaveLevelCurrent();
@ -115,10 +100,7 @@ public class LevelsLoader : MonoBehaviour
public int CalculateCurrentProgressionPercent(Vector3 playerPosition) public int CalculateCurrentProgressionPercent(Vector3 playerPosition)
{ {
if (levelCurrent == null) if (levelCurrent == null) return 0;
{
return 0;
}
float lastX = levelCurrent.LastX; float lastX = levelCurrent.LastX;
GameObject winnerWallPrefab = Resources.Load<GameObject>("Prefabs/WinnerWall"); GameObject winnerWallPrefab = Resources.Load<GameObject>("Prefabs/WinnerWall");
@ -143,8 +125,6 @@ public class LevelsLoader : MonoBehaviour
levels.Clear(); levels.Clear();
LoadAllLevels(); LoadAllLevels();
if (levels.Count > 0) if (levels.Count > 0)
{
levelCurrent = levels[0]; levelCurrent = levels[0];
} }
} }
}

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 588b3f9ce673f764b8a3a81842ed9f46
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,26 +1,10 @@
using System.Collections;
using System.IO;
using UnityEngine; using UnityEngine;
using UnityEngine.SceneManagement; using UnityEngine.SceneManagement;
public class LevelHomeButton : MonoBehaviour public class LevelHomeButton : MonoBehaviour
{ {
public AudioSource sfxSource;
public static IEnumerator PlaySoundAndLoadScene(AudioSource sfxSource, string scene)
{
yield return new WaitWhile(() => sfxSource.isPlaying);
Time.timeScale = 1;
SceneManager.LoadScene(scene);
}
public void GoToHome() public void GoToHome()
{ {
PlayerPrefs.SetInt("CreateMode", 0); SceneManager.LoadScene("HomeScene");
PlayerPrefs.SetInt("EditMode", 0);
sfxSource.clip = Resources.Load<AudioClip>(Path.Combine("Sounds", "click"));
sfxSource.Play();
StartCoroutine(PlaySoundAndLoadScene(sfxSource, "HomeScene"));
} }
} }

View File

@ -7,9 +7,4 @@ public class LevelNameButton : MonoBehaviour
{ {
SceneManager.LoadScene("LevelScene"); SceneManager.LoadScene("LevelScene");
} }
public void EditLevel()
{
PlayerPrefs.SetInt("CreateMode", 0);
SceneManager.LoadScene("LevelEditorScene");
}
} }

View File

@ -1,9 +1,7 @@
using System.IO;
using UnityEngine; using UnityEngine;
public class LevelNextButton : MonoBehaviour public class LevelNextButton : MonoBehaviour
{ {
public AudioSource sfxSource;
public LevelsLoader levelsLoader; public LevelsLoader levelsLoader;
public void Start() public void Start()
@ -11,18 +9,8 @@ public class LevelNextButton : MonoBehaviour
levelsLoader = GameObject.FindGameObjectWithTag("LevelsLoader").GetComponent<LevelsLoader>(); levelsLoader = GameObject.FindGameObjectWithTag("LevelsLoader").GetComponent<LevelsLoader>();
} }
public void Update()
{
if (Input.GetKeyDown(KeyCode.RightArrow))
{
NextLevel();
}
}
public void NextLevel() public void NextLevel()
{ {
levelsLoader.NextLevel(); levelsLoader.NextLevel();
sfxSource.clip = Resources.Load<AudioClip>(Path.Combine("Sounds", "click"));
sfxSource.Play();
} }
} }

View File

@ -1,9 +1,7 @@
using System.IO;
using UnityEngine; using UnityEngine;
public class LevelPreviousButton : MonoBehaviour public class LevelPreviousButton : MonoBehaviour
{ {
public AudioSource sfxSource;
public LevelsLoader levelsLoader; public LevelsLoader levelsLoader;
public void Start() public void Start()
@ -11,18 +9,8 @@ public class LevelPreviousButton : MonoBehaviour
levelsLoader = GameObject.FindGameObjectWithTag("LevelsLoader").GetComponent<LevelsLoader>(); levelsLoader = GameObject.FindGameObjectWithTag("LevelsLoader").GetComponent<LevelsLoader>();
} }
public void Update()
{
if (Input.GetKeyDown(KeyCode.LeftArrow))
{
PreviousLevel();
}
}
public void PreviousLevel() public void PreviousLevel()
{ {
levelsLoader.PreviousLevel(); levelsLoader.PreviousLevel();
sfxSource.clip = Resources.Load<AudioClip>(Path.Combine("Sounds", "click"));
sfxSource.Play();
} }
} }

View File

@ -1,25 +1,16 @@
using System.IO;
using UnityEngine; using UnityEngine;
using UnityEngine.SceneManagement; using UnityEngine.SceneManagement;
public class MainMenu : MonoBehaviour public class MainMenu : MonoBehaviour
{ {
public AudioSource sfxSource;
public void LaunchGame() public void LaunchGame()
{ {
sfxSource.clip = Resources.Load<AudioClip>(Path.Combine("Sounds", "click")); SceneManager.LoadSceneAsync("SelectLevelScene");
sfxSource.Play();
StartCoroutine(LevelHomeButton.PlaySoundAndLoadScene(sfxSource, "SelectLevelScene"));
} }
public void OpenImport() public void OpenImport()
{ {
sfxSource.clip = Resources.Load<AudioClip>(Path.Combine("Sounds", "click")); SceneManager.LoadSceneAsync("ImportScene");
sfxSource.Play();
StartCoroutine(LevelHomeButton.PlaySoundAndLoadScene(sfxSource, "ImportScene"));
} }
public void QuitGame() public void QuitGame()
@ -29,34 +20,16 @@ public class MainMenu : MonoBehaviour
public void LevelEditor() public void LevelEditor()
{ {
sfxSource.clip = Resources.Load<AudioClip>(Path.Combine("Sounds", "click")); SceneManager.LoadSceneAsync("LevelEditorScene");
sfxSource.Play();
StartCoroutine(LevelHomeButton.PlaySoundAndLoadScene(sfxSource, "LevelEditorScene"));
}
public void CreateVoidLevel()
{
PlayerPrefs.SetInt("CreateMode", 1);
sfxSource.clip = Resources.Load<AudioClip>(Path.Combine("Sounds", "click"));
sfxSource.Play();
StartCoroutine(LevelHomeButton.PlaySoundAndLoadScene(sfxSource, "LevelEditorScene"));
} }
public void EditorChoice() public void EditorChoice()
{ {
sfxSource.clip = Resources.Load<AudioClip>(Path.Combine("Sounds", "click")); SceneManager.LoadSceneAsync("EditorChoiceScene");
sfxSource.Play();
StartCoroutine(LevelHomeButton.PlaySoundAndLoadScene(sfxSource, "EditorChoiceScene"));
} }
public void EditLevel() public void CreateLevel()
{ {
sfxSource.clip = Resources.Load<AudioClip>(Path.Combine("Sounds", "click")); SceneManager.LoadSceneAsync("CreateLevelScene");
sfxSource.Play();
StartCoroutine(LevelHomeButton.PlaySoundAndLoadScene(sfxSource, "SelectLevelToEditScene"));
} }
} }

View File

@ -1,4 +1,3 @@
using System.IO;
using UnityEngine; using UnityEngine;
using UnityEngine.SceneManagement; using UnityEngine.SceneManagement;
using UnityEngine.UI; using UnityEngine.UI;
@ -8,36 +7,32 @@ public class PauseMenu : MonoBehaviour
public GameObject pauseMenu; public GameObject pauseMenu;
public GameObject pauseButton; public GameObject pauseButton;
public LevelLoader levelLoader; public LevelLoader levelLoader;
public AudioSource sfxSource;
public Slider volumeSlider; public Slider volumeSlider;
public void Start() public void Start()
{ {
if (PlayerPrefs.HasKey("Volume")) if (PlayerPrefs.HasKey("Volume"))
{ {
levelLoader.musicSource.volume = PlayerPrefs.GetFloat("Volume"); levelLoader.audioSource.volume = PlayerPrefs.GetFloat("Volume");
volumeSlider.value = levelLoader.musicSource.volume; volumeSlider.value = levelLoader.audioSource.volume;
} }
else else
{ {
levelLoader.musicSource.volume = 1f; levelLoader.audioSource.volume = 1f;
volumeSlider.value = 1f; volumeSlider.value = 1f;
} }
} }
public void ChangeVolume() public void ChangeVolume()
{ {
levelLoader.musicSource.volume = volumeSlider.value; levelLoader.audioSource.volume = volumeSlider.value;
PlayerPrefs.SetFloat("Volume", levelLoader.musicSource.volume); PlayerPrefs.SetFloat("Volume", levelLoader.audioSource.volume);
} }
public void Pause() public void Pause()
{ {
sfxSource.clip = Resources.Load<AudioClip>(Path.Combine("Sounds", "click"));
sfxSource.Play();
Time.timeScale = 0; Time.timeScale = 0;
levelLoader.musicSource.Pause(); levelLoader.audioSource.Pause();
pauseMenu.SetActive(true); pauseMenu.SetActive(true);
pauseButton.SetActive(false); pauseButton.SetActive(false);
@ -46,19 +41,13 @@ public class PauseMenu : MonoBehaviour
public void Home() public void Home()
{ {
Time.timeScale = 1; Time.timeScale = 1;
sfxSource.clip = Resources.Load<AudioClip>(Path.Combine("Sounds", "click")); SceneManager.LoadScene("HomeScene");
sfxSource.Play();
StartCoroutine(LevelHomeButton.PlaySoundAndLoadScene(sfxSource, "HomeScene"));
} }
public void Resume() public void Resume()
{ {
sfxSource.clip = Resources.Load<AudioClip>(Path.Combine("Sounds", "click"));
sfxSource.Play();
Time.timeScale = 1; Time.timeScale = 1;
levelLoader.musicSource.Play(); levelLoader.audioSource.Play();
pauseMenu.SetActive(false); pauseMenu.SetActive(false);
pauseButton.SetActive(true); pauseButton.SetActive(true);

View File

@ -1,4 +1,3 @@
using System.IO;
using UnityEngine; using UnityEngine;
using UnityEngine.SceneManagement; using UnityEngine.SceneManagement;
@ -12,9 +11,6 @@ public class Player : MonoBehaviour
public bool IsColliding { get; set; } = true; public bool IsColliding { get; set; } = true;
public bool HasStarted { get; set; } = false; public bool HasStarted { get; set; } = false;
public bool CanJump { get; set; } = true; public bool CanJump { get; set; } = true;
public PauseMenu pauseMenu;
public AudioSource sfxSource;
public bool editMode { get; set; } = false;
public IGameMode CurrentGameMode { get; set; } public IGameMode CurrentGameMode { get; set; }
public float SpeedMultiplier = 1f; public float SpeedMultiplier = 1f;
@ -28,14 +24,10 @@ public class Player : MonoBehaviour
GameObject loaderObj = GameObject.FindGameObjectWithTag("LevelsLoader"); GameObject loaderObj = GameObject.FindGameObjectWithTag("LevelsLoader");
if (loaderObj != null) if (loaderObj != null)
{
LevelsLoader = loaderObj.GetComponent<LevelsLoader>(); LevelsLoader = loaderObj.GetComponent<LevelsLoader>();
}
else else
{
Debug.LogWarning("LevelsLoader introuvable : Progression désactivée pour ce niveau."); Debug.LogWarning("LevelsLoader introuvable : Progression désactivée pour ce niveau.");
} }
}
public void Start() public void Start()
{ {
@ -46,80 +38,18 @@ public class Player : MonoBehaviour
CurrentGameMode = new NormalGameMode(); CurrentGameMode = new NormalGameMode();
} }
public bool IsAI
{
get
{
if (PlayerPrefs.HasKey("AI"))
{
return PlayerPrefs.GetInt("AI") == 1;
}
else
{
return false;
}
}
set
{
PlayerPrefs.SetInt("AI", value ? 1 : 0);
}
}
public void Update() public void Update()
{ {
CurrentGameMode?.Update(this); if (CurrentGameMode != null)
CurrentGameMode.Update(this);
if (LevelsLoader != null) if (LevelsLoader != null)
{
LevelsLoader.CalculateCurrentProgressionPercent(transform.position); LevelsLoader.CalculateCurrentProgressionPercent(transform.position);
} }
if (Input.GetKeyDown(KeyCode.Escape))
{
if (pauseMenu.pauseMenu.activeSelf)
{
pauseMenu.Resume();
}
else
{
pauseMenu.Pause();
}
}
}
public virtual void OnCollisionEnter2D(Collision2D collision) public virtual void OnCollisionEnter2D(Collision2D collision)
{ {
CurrentGameMode?.OnCollisionEnter(this, collision); CurrentGameMode?.OnCollisionEnter(this, collision);
if (editMode && (collision.gameObject.CompareTag("Kill") || collision.gameObject.CompareTag("Win")))
{
GameObject spawn = new GameObject("AutoSpawnPoint");
spawn.transform.position = new Vector3(-16, -3, 0f);
transform.position = spawn.transform.position;
RigidBody.linearVelocity = Vector2.zero;
SpeedMultiplier = 1f;
CurrentGameMode = new NormalGameMode();
SpriteRenderer.sprite = Resources.Load<Sprite>("Shapes/BaseSquare");
return;
}
if (collision.gameObject.CompareTag("Kill"))
{
SpriteRenderer.sprite = Resources.Load<Sprite>("Shapes/Explosion");
Time.timeScale = 0;
sfxSource.clip = Resources.Load<AudioClip>(Path.Combine("Sounds", "death"));
sfxSource.Play();
StartCoroutine(LevelHomeButton.PlaySoundAndLoadScene(sfxSource, SceneManager.GetActiveScene().name));
}
if (collision.gameObject.CompareTag("Win"))
{
SpriteRenderer.sprite = Resources.Load<Sprite>("Shapes/Explosion");
Time.timeScale = 0;
sfxSource.clip = Resources.Load<AudioClip>(Path.Combine("Sounds", "win"));
sfxSource.Play();
StartCoroutine(LevelHomeButton.PlaySoundAndLoadScene(sfxSource, "SelectLevelScene"));
}
} }
public void OnCollisionExit2D(Collision2D collision) public void OnCollisionExit2D(Collision2D collision)
@ -149,10 +79,6 @@ public class Player : MonoBehaviour
SpeedMultiplier /= 1.5f; SpeedMultiplier /= 1.5f;
Destroy(collision.gameObject); Destroy(collision.gameObject);
} }
else if (collision.CompareTag("AICollider") && IsAI)
{
CurrentGameMode.Jump(this);
}
} }
public void ChangeGameMode(IGameMode newMode) public void ChangeGameMode(IGameMode newMode)

View File

@ -18,29 +18,25 @@ public class PlayerCamera : MonoBehaviour
private void Update() private void Update()
{ {
if (!isPlaying) return; if (isPlaying)
{
Player player = playerObject.GetComponent<Player>(); Player player = playerObject.GetComponent<Player>();
// Choix du minY selon le mode de jeu float minYFollow = normalMinYFollow;
float minYFollow = (player.CurrentGameMode is ShipGameMode) if (player.CurrentGameMode is ShipGameMode)
? shipMinYFollow {
: normalMinYFollow; minYFollow = shipMinYFollow;
}
// Calcul de la cible Y
float targetY = initialY; float targetY = initialY;
if (playerObject.transform.position.y > minYFollow) if (playerObject.transform.position.y > minYFollow)
{
targetY = playerObject.transform.position.y; targetY = playerObject.transform.position.y;
}
// Interpolation douce
float newY = Mathf.Lerp(transform.position.y, targetY, smoothSpeed * Time.deltaTime); float newY = Mathf.Lerp(transform.position.y, targetY, smoothSpeed * Time.deltaTime);
// Clamp pour éviter de descendre sous Y = 0 transform.position = new Vector3(playerObject.transform.position.x, newY, transform.position.z);
newY = Mathf.Max(newY, 0f); }
// On suit aussi l'axe X du joueur
float newX = playerObject.transform.position.x;
transform.position = new Vector3(newX, newY, transform.position.z);
} }
} }

View File

@ -1,74 +0,0 @@
using UnityEngine;
using UnityEngine.UI;
public class SelectDifficulty : MonoBehaviour
{
public GameObject selectDifficultyPanel;
public GameObject mainSaveButton;
public StarsRenderer starsRenderer;
public JSONExporter jsonExporter;
private int currentDifficulty;
private const int MinDiff = 1;
private const int MaxDiff = 5;
void Awake()
{
if (selectDifficultyPanel == null)
{
selectDifficultyPanel = GameObject.Find("SelectDifficultyPanel");
}
if (mainSaveButton == null)
{
mainSaveButton = GameObject.Find("MainSaveButton");
}
}
void Start()
{
currentDifficulty = starsRenderer != null
? starsRenderer.GetCurrentDifficulty()
: MinDiff;
currentDifficulty = Mathf.Clamp(currentDifficulty, MinDiff, MaxDiff);
UpdateUI();
}
private void UpdateUI()
{
starsRenderer.UseAutomaticMode();
starsRenderer?.SetManualDifficulty(currentDifficulty);
}
public void OpenSelectDifficulty()
{
selectDifficultyPanel.SetActive(true);
mainSaveButton.SetActive(false);
UpdateUI();
}
public void PreviousDifficulty()
{
if (currentDifficulty > MinDiff)
{
currentDifficulty--;
UpdateUI();
}
}
public void NextDifficulty()
{
if (currentDifficulty < MaxDiff)
{
currentDifficulty++;
UpdateUI();
}
}
public void Cancel()
{
selectDifficultyPanel.SetActive(false);
mainSaveButton.SetActive(true);
}
}

View File

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

View File

@ -1,96 +0,0 @@
using UnityEngine;
using UnityEngine.UI;
public class StarsRenderer : MonoBehaviour
{
public Image starTemplate;
public RectTransform starsContainer;
public LevelsLoader levelsLoader;
public float extraPadding = 10f;
private bool useManualMode = false;
private int manualDifficulty = 1;
private float starSpacing;
private int lastRenderedDifficulty = -1;
void Start()
{
if (starTemplate == null || starsContainer == null)
{
Debug.LogError("Star template ou starsContainer non assigné !", this);
enabled = false;
return;
}
starTemplate.gameObject.SetActive(false);
if (levelsLoader == null)
{
var loaderObj = GameObject.FindGameObjectWithTag("LevelsLoader");
if (loaderObj != null)
levelsLoader = loaderObj.GetComponent<LevelsLoader>();
}
starSpacing = starTemplate.rectTransform.sizeDelta.x + extraPadding;
lastRenderedDifficulty = -1;
}
void Update()
{
int target = GetCurrentDifficulty();
if (target != lastRenderedDifficulty)
RenderStarsInternal(target);
}
public void SetManualDifficulty(int difficulty)
{
useManualMode = true;
manualDifficulty = Mathf.Clamp(difficulty, 1, 5);
lastRenderedDifficulty = -1;
RenderStarsInternal(manualDifficulty);
}
public void UseAutomaticMode()
{
useManualMode = false;
lastRenderedDifficulty = -1;
}
public int GetCurrentDifficulty()
{
if (useManualMode)
return manualDifficulty;
if (levelsLoader != null && levelsLoader.levelCurrent != null)
return Mathf.Clamp(levelsLoader.levelCurrent.difficulty, 1, 5);
return 1;
}
private void RenderStarsInternal(int difficulty)
{
for (int i = starsContainer.childCount - 1; i >= 0; i--)
{
var child = starsContainer.GetChild(i);
if (child.gameObject != starTemplate.gameObject)
Destroy(child.gameObject);
}
lastRenderedDifficulty = difficulty;
float totalWidth = difficulty * starSpacing - extraPadding;
float startX = -totalWidth / 2 + starTemplate.rectTransform.sizeDelta.x / 2;
for (int i = 0; i < difficulty; i++)
{
var star = Instantiate(starTemplate, starsContainer);
star.gameObject.SetActive(true);
star.rectTransform.anchoredPosition = new Vector2(startX + i * starSpacing, 0f);
star.rectTransform.SetAsLastSibling();
}
}
}

View File

@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 443f905013127a44f9c3dcf5a8fed74b

View File

@ -8,7 +8,6 @@ public class TestManager : MonoBehaviour
public Transform spawnPoint; public Transform spawnPoint;
public GameObject editorUI; public GameObject editorUI;
public PlayerCamera playerCamera; public PlayerCamera playerCamera;
public AudioSource sfxSource;
private bool isTesting = false; private bool isTesting = false;
@ -28,7 +27,6 @@ public class TestManager : MonoBehaviour
else else
{ {
gameMode = new NormalGameMode(); gameMode = new NormalGameMode();
currentPlayer.editMode = true;
currentPlayer.ChangeGameMode(gameMode); currentPlayer.ChangeGameMode(gameMode);
currentPlayer.SpeedMultiplier = 0f; currentPlayer.SpeedMultiplier = 0f;
@ -70,16 +68,12 @@ public class TestManager : MonoBehaviour
} }
if (editorUI != null) if (editorUI != null)
{
Debug.LogError("editor UI null");
editorUI.SetActive(false); editorUI.SetActive(false);
}
currentPlayer.transform.position = spawnPoint.position; currentPlayer.transform.position = spawnPoint.position;
currentPlayer.transform.rotation = Quaternion.Euler(0f, 0f, 0f);
currentPlayer.RigidBody.freezeRotation = true;
currentPlayer.RigidBody.linearVelocity = Vector2.zero; currentPlayer.RigidBody.linearVelocity = Vector2.zero;
currentPlayer.SpeedMultiplier = 1f; currentPlayer.SpeedMultiplier = 1f;
currentPlayer.SpriteRenderer.sprite = Resources.Load<Sprite>("Shapes/BaseSquare");
currentPlayer.ChangeGameMode(gameMode); currentPlayer.ChangeGameMode(gameMode);
isTesting = true; isTesting = true;
@ -94,7 +88,9 @@ public class TestManager : MonoBehaviour
currentPlayer.SpriteRenderer.enabled = true; currentPlayer.SpriteRenderer.enabled = true;
if (currentPlayer.Particle != null) if (currentPlayer.Particle != null)
currentPlayer.Particle.Play(); currentPlayer.Particle.Play(); // ✅ Démarrer la particule
Debug.Log("[TestManager] Test du niveau démarré !");
} }
public void StopTest() public void StopTest()
@ -109,7 +105,7 @@ public class TestManager : MonoBehaviour
currentPlayer.SpeedMultiplier = 0f; currentPlayer.SpeedMultiplier = 0f;
if (currentPlayer.Particle != null) if (currentPlayer.Particle != null)
currentPlayer.Particle.Stop(true, ParticleSystemStopBehavior.StopEmittingAndClear); currentPlayer.Particle.Stop(true, ParticleSystemStopBehavior.StopEmittingAndClear); // ✅ Arrêter proprement
if (currentPlayer.SpriteRenderer != null) if (currentPlayer.SpriteRenderer != null)
currentPlayer.SpriteRenderer.enabled = false; currentPlayer.SpriteRenderer.enabled = false;
@ -125,5 +121,7 @@ public class TestManager : MonoBehaviour
} }
isTesting = false; isTesting = false;
Debug.Log("[TestManager] Test du niveau arrêté, joueur reset et caméra recentrée !");
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 353 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 415 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 702 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 616 KiB

View File

@ -8,11 +8,11 @@ repeat
if (Le joueur percute un obstacle ?) then (Oui) if (Le joueur percute un obstacle ?) then (Oui)
:Le joueur meurt; :Le joueur meurt;
:Augmenter le nombre d'essais de 1; :Augmenter le nombre d'essais de 1;
:Perdre toutes les bonus; :Perdre toutes les pièces et bonus;
else (Non) else (Non)
partition "Actions du joueur" { partition "Actions du joueur" {
group Saut group Saut
if (L'utilisateur appuie sur espace ?) then (Oui) if (L'utilisateur clique sur l'écran ?) then (Oui)
:Le joueur effectue un saut; :Le joueur effectue un saut;
endif endif
end group end group
@ -27,15 +27,15 @@ repeat
end group end group
endif endif
if (Le joueur percute un bonus ?) then (Oui) if (Le joueur clique sur un bonus dans son inventaire ?) then (Oui)
group Activation de Bonus group Activation de Bonus
:Le joueur clique sur un bonus dans l'inventaire; :Le joueur clique sur un bonus dans l'inventaire;
switch (Type de bonus) switch (Type de bonus)
case (Temps ralenti) case (Temps ralenti)
:Activer ralentissement du temps; :Activer ralentissement du temps;
:Durée : 3 secondes; :Temps ralenti : 3 secondes;
case (Temps accéléré) case (Annulation d'obstacle)
:Activer accélération du temps; :Supprimer tous les obstacles;
:Durée : 3 secondes; :Durée : 3 secondes;
endswitch endswitch
end group end group
@ -54,6 +54,9 @@ repeat
:Quitter le niveau; :Quitter le niveau;
:Retour au menu principal; :Retour au menu principal;
stop stop
case (Mode Checkpoint)
:Activer/Désactiver le mode Checkpoint;
:Reprendre la partie;
case (Volume) case (Volume)
:Modifier le volume sonore; :Modifier le volume sonore;
:Revenir au menu de pause; :Revenir au menu de pause;
@ -69,6 +72,7 @@ repeat
if (Le joueur touche la zone de fin ?) then (Oui) if (Le joueur touche la zone de fin ?) then (Oui)
:Terminer le niveau; :Terminer le niveau;
:Animation de fin de niveau; :Animation de fin de niveau;
:Conserver les pièces obtenues;
break break
endif endif
} }

View File

@ -11,7 +11,7 @@ repeat
:Perdre toutes les pièces et bonus; :Perdre toutes les pièces et bonus;
else (Non) else (Non)
partition "Actions du joueur" { partition "Actions du joueur" {
if (L'utilisateur appuie sur espace ?) then (Oui) if (L'utilisateur clique sur l'écran ?) then (Oui)
:Le joueur effectue un saut; :Le joueur effectue un saut;
note right note right
**Saut** **Saut**
@ -29,12 +29,12 @@ repeat
end note end note
endif endif
if (Le joueur percute un bonus ?) then (Oui) if (Le joueur clique sur un bonus dans son inventaire ?) then (Oui)
:Activer un bonus; :Activer un bonus;
note right note right
**Activation de Bonus** **Activation de Bonus**
- Déclenche l'effet du bonus sélectionné. - Déclenche l'effet du bonus sélectionné.
- Exemple : Ralentissement du temps. - Exemple : Invincibilité, Double saut.
end note end note
endif endif
} }
@ -44,7 +44,7 @@ repeat
:Arriver sur le menu de pause; :Arriver sur le menu de pause;
note right note right
**Menu de pause** **Menu de pause**
- Affiche les options : Reprendre, Quitter, Volume. - Affiche les options : Reprendre, Quitter, Mode Checkpoint, Volume.
end note end note
endif endif
} }
@ -53,6 +53,12 @@ repeat
if (Le joueur touche la zone de fin ?) then (Oui) if (Le joueur touche la zone de fin ?) then (Oui)
:Terminer le niveau; :Terminer le niveau;
:Afficher une animation de fin de niveau; :Afficher une animation de fin de niveau;
:Conserver les pièces obtenues;
note right
**Fin du Niveau**
- Succès enregistré.
- Les pièces collectées sont sauvegardées.
end note
endif endif
} }
endif endif

View File

@ -5,9 +5,9 @@ start
switch (Type de bonus) switch (Type de bonus)
case (Temps ralenti) case (Temps ralenti)
:Activer ralentissement du temps; :Activer ralentissement du temps;
:Durée : 3 secondes; :Temps ralenti : 3 secondes;
case (Temps accéléré) case (Annulation d'obstacle)
:Activer accélération du temps; :Supprimer tous les obstacles;
:Durée : 3 secondes; :Durée : 3 secondes;
endswitch endswitch
stop stop

View File

@ -1,7 +1,7 @@
@startuml sub-bonus @startuml sub-bonus
start start
if (Le joueur percute un bonus ?) then (Oui) if (Le joueur touche un bonus ?) then (Oui)
:Ajouter le bonus à l'inventaire; :Ajouter le bonus à l'inventaire;
else (Non) else (Non)
endif endif

View File

@ -0,0 +1,10 @@
@startuml sub-bumper
start
if (Le joueur touche un bumper ?) then (Oui)
:Effectuer un grand saut;
else (Non)
endif
stop
@enduml

View File

@ -7,6 +7,10 @@ switch (Forme)
:Mode fusée; :Mode fusée;
case (Forme roue) case (Forme roue)
:Mode roue; :Mode roue;
case (Forme sens inversé)
:Mode sens inversé;
case (Forme gravité inversée)
:Mode gravité inversée;
endswitch endswitch
stop stop

View File

@ -11,10 +11,13 @@ else (Quitter)
:Quitter le niveau; :Quitter le niveau;
:Retour au menu principal; :Retour au menu principal;
stop stop
else (Mode Checkpoint)
:Activer/Désactiver le mode Checkpoint;
:Revenir au menu de pause;
else (Volume) else (Volume)
:Modifier le volume sonore; :Modifier le volume sonore;
:Revenir au menu de pause; :Revenir au menu de pause;
else (Menu de sélection de niveau) else (Menu de sleection de niveau)
:Revenir au menu de selection de niveau; :Revenir au menu de selection de niveau;
endif endif

View File

@ -0,0 +1,10 @@
@startuml sub-pieces
start
if (Le joueur touche une pièce ?) then (Oui)
:Ajouter la pièce au niveau;
else (Non)
endif
stop
@enduml

View File

@ -1,303 +0,0 @@
@startuml Geometry Dash - Diagramme de classe léger
skinparam style strictuml
skinparam classAttributeIconSize 0
skinparam classFontStyle Bold
hide enum methods
class PlayerCamera {
{field} + playerObject: GameObject
{field} + normalMinYFollow: float
{field} + shipMinYFollow: float
{field} + smoothSpeed: float
{field} - initialY: float
{field} + isPlaying: bool
{method} - Start()
{method} - Update()
}
class Player {
{field} + RigidBody: Rigidbody2D {get} {private set}
{field} + Transform: Transform {get} {private set}
{field} + Particle: ParticleSystem {get} {private set}
{field} + LevelsLoader: LevelsLoader {get} {set}
{field} + SpriteRenderer: SpriteRenderer {get} {private set}
{field} + IsColliding: bool {get} {set}
{field} + HasStarted: bool {get} {set}
{field} + CanJump: bool {get} {set}
{field} + CurrentGameMode: IGameMode {get} {set}
{field} + SpeedMultiplier: float
{method} + Awake()
{method} + Start()
{method} + Update()
{method} + OnCollisionEnter2D(collision: Collision2D)
{method} + OnCollisionExit2D(collision: Collision2D)
{method} + OnTriggerEnter2D(collision: Collider2D)
{method} + ChangeGameMode(newMode: IGameMode)
}
Player o--> LevelsLoader : <<References>>
Player o--> IGameMode : <<Has>>
class PauseMenu {
{field} + pauseMenu: GameObject
{field} + pauseButton: GameObject
{field} + levelLoader: LevelLoader
{field} + volumeSlider: Slider
{method} + Start()
{method} + ChangeVolume()
{method} + Pause()
{method} + Home()
{method} + Resume()
}
PauseMenu --> LevelLoader : <<References>>
PauseMenu --> GameObject : <<References>>
PauseMenu --> Slider : <<References>>
class MainMenu {
{method} + LaunchGame()
{method} + OpenImport()
{method} + QuitGame()
{method} + LevelEditor()
{method} + EditorChoice()
{method} + CreateLevel()
}
class LevelStat {
{field} + JsonName: string {get} {set}
{field} + totalJumps: Integer
{field} + totalAttempts: Integer
{field} + progressionPercent: Integer
{method} + {static} CreateFromJSON(jsonString: string): LevelStat
}
class LevelsLoader {
{field} + levels: List<Level>
{field} + levelCurrent: Level
{method} - Start()
{method} - LoadAllLevels()
{method} - SaveLevelCurrent()
{method} + NextLevel()
{method} + PreviousLevel()
{method} + IncreaseTotalJumps()
{method} + IncreaseTotalAttempts()
{method} + CalculateCurrentProgressionPercent(playerPosition: Vector3): Integer
{method} + RefreshLevels()
}
LevelsLoader *--> Level : <<Owns>>
class LevelLoader {
{field} + levelsLoader: LevelsLoader
{field} + audioSource: AudioSource
{field} + progressionText: Text
{field} - groundY: float
{method} - GetPrefab(type: string): GameObject
{method} - LoadAudio()
{method} - LoadElements()
{method} + Start()
{method} + Update()
}
LevelLoader o--> LevelsLoader : <<References>>
LevelLoader *--> AudioSource : <<Owns>>
LevelLoader --> Text : <<References>>
class LevelEditor {
{field} - currentBlock: GameObject
{field} - isPlacingBlock: bool
{field} - currentScale: Vector3
{field} - scaleStep: float
{field} + blockGroupContainer: Transform
{field} + buttonPrefabTemplate: GameObject
{field} - currentPage: Integer
{field} - buttonsPerPage: Integer {constant}
{field} - blockPrefabs: List<GameObject>
{field} - currentButtons: List<GameObject>
{field} - resizingTarget: GameObject
{field} - isResizing: bool
{field} - originalMousePos: Vector3
{field} - originalScale: Vector3
{field} - currentResizeAxis: ResizeAxis
{method} - Start()
{method} - LoadPrefabs()
{method} - GenerateButtons()
{method} - ClearCurrentButtons()
{method} + NextPage()
{method} + PreviousPage()
{method} - SelectPrefab(prefab: GameObject)
{method} - Update()
{method} - PlaceBlock()
{method} - TrySnapToNearbyBlock()
{method} - InstantiateAndPrepare(prefab: GameObject, scaleOverride: Vector3?)
{method} - HandleBlockRotation()
}
LevelEditor o--> blockGroupContainer : <<References>>
LevelEditor --> buttonPrefabTemplate : <<References>>
LevelEditor *--> blockPrefabs : <<Owns>>
LevelEditor *--> currentButtons : <<Owns>>
LevelEditor o--> currentBlock : <<References>>
LevelEditor o--> resizingTarget : <<References>>
LevelEditor *--> ResizeAxis : <<Has>>
enum ResizeAxis <<enumeration>> {
None
Horizontal
Vertical
}
class LevelElement {
{field} + type: string
{field} + x: float
{field} + y: float
{field} + scaleX: float
{field} + scaleY: float
}
class Level {
{field} + {static} {readOnly} LAST_X: Integer = 15
{field} + JsonName: string {get} {set}
{field} + TotalJumps: Integer {get} {set}
{field} + TotalAttempts: Integer {get} {set}
{field} + ProgressionPercent: Integer {get} {set}
{field} + ProgressionPercentMax: Integer {get} {set}
{field} + name: string
{field} + musicName: string
{field} + order: Integer
{field} + elements: List<LevelElement>
{field} + LastX: float {get}
{method} + {static} CreateFromJSON(jsonString: string): Level
}
Level *--> LevelElement : <<Composed of>>
class JSONImporter {
{field} + statusText: TMP_Text
{method} - Awake()
{method} - Start()
{method} + ImportJSON()
{method} - ShowFileBrowser(): IEnumerator
{method} - UpdateStatus(message: string, color: Color)
}
JSONImporter --> TMP_Text : <<References>>
class JSONExporter {
{field} + statusText: TMP_Text
{field} - editor: LevelEditor
{field} - levelsFolder: string
{method} - Awake()
{method} - Start()
{method} + ExportJSON()
{method} - ShowSaveDialog(): IEnumerator
{method} - SetStatus(message: string, color: Color)
}
JSONExporter o--> LevelEditor : <<References>>
JSONExporter --> TMP_Text : <<References>>
class SerializableElement <<private>> {
{field} + type: string
{field} + x: float
{field} + y: float
{field} + scaleX: float
{field} + scaleY: float
}
JSONExporter ..> SerializableElement : <<Uses>>
class LevelData <<private>> {
{field} + name: string
{field} + musicName: string
{field} + order: Integer
{field} + elements: SerializableElement[*]
}
LevelData *--> SerializableElement : <<Composed of>>
JSONExporter ..> LevelData : <<Uses>>
interface IGameMode <<interface>> {
{method} + Update(player: Player) {abstract}
{method} + OnCollisionEnter(player: Player, collision: Collision2D) {abstract}
{method} + OnCollisionExit(player: Player, collision: Collision2D) {abstract}
}
class ShipGameMode implements IGameMode {
{field} - HorizontalSpeed: float {constant}
{field} - JumpForce: float {constant}
{field} - JumpKey: KeyCode {constant}
{field} - UpperAngle: float {constant}
{field} - LowerAngle: float {constant}
{field} - RotationTransitionDuration: float {constant}
{method} + Update(player: Player)
{method} - GetCurrentZAngle(player: Player): float
{method} - Jump(player: Player)
{method} + OnCollisionEnter(player: Player, collision: Collision2D)
{method} + OnCollisionExit(player: Player, collision: Collision2D)
}
ShipGameMode ..|> IGameMode
ShipGameMode ..> Player : <<Uses>>
class NormalGameMode implements IGameMode {
{field} - HorizontalSpeed: float {constant}
{field} - JumpForce: float {constant}
{field} - JumpKey: KeyCode {constant}
{field} - isRotating: bool
{field} - targetRotationAngle: float
{field} - rotationSpeed: float {readOnly}
{method} + Update(player: Player)
{method} - Jump(player: Player)
{method} - PerformRotation(player: Player)
{method} - IsJumping(player: Player): bool
{method} - AlignRotation(player: Player)
{method} - UpdateParticlePositionAndRotation(player: Player)
{method} + OnCollisionEnter(player: Player, collision: Collision2D)
{method} + OnCollisionExit(player: Player, collision: Collision2D)
}
NormalGameMode ..|> IGameMode
NormalGameMode ..> Player : <<Uses>>
' Tags
class ShipPortal { }
class CubePortal { }
class BonusBoostSpeed { }
class BonusSlowSpeed { }
class Kill { }
class Win { }
class Ground { }
class WinnerWall { }
class Block { }
class SmallObstacle { }
class Spike { }
class Portal { }
class Bonus { }
Player ..> ShipPortal : <<Uses Tag>>
Player ..> CubePortal : <<Uses Tag>>
Player ..> BonusBoostSpeed : <<Uses Tag>>
Player ..> BonusSlowSpeed : <<Uses Tag>>
ShipGameMode ..> Kill : <<Uses Tag>>
ShipGameMode ..> Win : <<Uses Tag>>
ShipGameMode ..> Ground : <<Uses Tag>>
NormalGameMode ..> Kill : <<Uses Tag>>
NormalGameMode ..> Win : <<Uses Tag>>
LevelLoader ..> WinnerWall : <<Uses Prefab>>
LevelLoader ..> Ground : <<Uses Prefab>>
LevelEditor ..> Ground : <<Uses Tag>>
LevelEditor ..> Block : <<Uses Tag>>
LevelEditor ..> SmallObstacle : <<Uses Tag>>
LevelEditor ..> Spike : <<Uses Tag>>
LevelEditor ..> Portal : <<Uses Tag>>
LevelEditor ..> Bonus : <<Uses Tag>>
LevelsLoader ..> WinnerWall : <<Uses Prefab>>
@enduml

View File

@ -5,581 +5,107 @@ skinparam classAttributeIconSize 0
skinparam classFontStyle Bold skinparam classFontStyle Bold
hide enum methods hide enum methods
package UnityEngine { class GameManager {
class GameObject { - score: int
} - isPaused: Boolean
class MonoBehaviour { + StartGame()
} + RestartLevel()
class Rigidbody2D { + PauseGame()
} + ResumeGame()
class Transform { + UpdateScore(points: int)
}
class ParticleSystem {
}
class SpriteRenderer {
}
class Collider2D {
}
class Collision2D {
}
class Vector3 {
}
class Vector2 {
}
class Quaternion {
}
class Mathf {
{method} + Lerp(...) {static}
{method} + Round(...) {static}
{method} + Clamp(...) {static}
{method} + Sin(...) {static}
{method} + Abs(...) {static}
{method} + DeltaAngle(...) {static}
{method} + MoveTowardsAngle(...) {static}
{method} + RoundToInt(...) {static}
}
class Time {
{method} + deltaTime: float {static} {readOnly}
{method} + timeScale: float {static}
}
class Input {
{method} + GetKey(...) {static}
{method} + GetKeyDown(...) {static}
{method} + GetMouseButtonDown(...) {static}
{method} + GetMouseButtonUp(...) {static}
{method} + GetAxis(...) {static}
}
class Camera {
{method} + main: Camera {static} {readOnly}
{method} + ScreenToWorldPoint(...)
}
class Physics2D {
{method} + OverlapBoxAll(...) {static}
{method} + RaycastAll(...) {static}
{method} + OverlapPoint(...) {static}
{method} + OverlapAreaAll(...) {static}
}
class Resources {
{method} + Load<T>(...) {static}
{method} + LoadAll<T>(...) {static}
}
class PlayerPrefs {
{method} + GetFloat(...) {static}
{method} + SetFloat(...) {static}
{method} + HasKey(...) {static}
}
class AudioSource {
{method} + volume: float
{method} + clip: AudioClip
{method} + Play()
{method} + Pause()
}
class AudioClip {
}
class Slider {
}
class Button {
}
class Image {
}
class RectTransform {
}
class Bounds {
}
class Debug {
{method} + Log(...) {static}
{method} + LogWarning(...) {static}
{method} + LogError(...) {static}
}
class Application {
{method} + persistentDataPath: string {static} {readOnly}
{method} + dataPath: string {static} {readOnly}
{method} + Quit() {static}
}
class Canvas {
{method} + ForceUpdateCanvases() {static}
}
class UnityEngine.Object {
{method} + FindAnyObjectByType<T>(...) {static}
}
class Renderer {
}
}
package UnityEngine.SceneManagement {
class SceneManager {
{method} + LoadScene(...) {static}
{method} + LoadSceneAsync(...) {static}
{method} + GetActiveScene(...) {static}
}
}
package UnityEngine.UI {
class Text {
}
}
package TMPro {
class TMP_Text {
}
}
package System {
package IO {
class Path {
{method} + Combine(...) {static}
{method} + GetFileNameWithoutExtension(...) {static}
}
class File {
{method} + Exists(...) {static}
{method} + ReadAllText(...) {static}
{method} + WriteAllText(...) {static}
{method} + Copy(...) {static}
{method} + GetExtension(...) {static}
{method} + GetFileName(...) {static}
{method} + GetFileNameWithoutExtension(...) {static}
}
class Directory {
{method} + Exists(...) {static}
{method} + CreateDirectory(...) {static}
}
}
package Collections {
class IEnumerator {
}
package Generic {
class List<T> {
}
}
}
}
package SimpleFileBrowser {
class FileBrowser {
{method} + WaitForLoadDialog(...) {static}
{method} + WaitForSaveDialog(...) {static}
{method} + Success: bool {static} {readOnly}
{method} + Result: string[*] {static} {readOnly}
{method} + PickMode: enumeration {static} {readOnly}
}
}
class PlayerCamera {
{field} + playerObject: UnityEngine.GameObject
{field} + normalMinYFollow: float
{field} + shipMinYFollow: float
{field} + smoothSpeed: float
{field} - initialY: float
{field} + isPlaying: bool
{method} - Start()
{method} - Update()
}
PlayerCamera --|> UnityEngine.MonoBehaviour
PlayerCamera --> UnityEngine.GameObject : <<References>>
PlayerCamera ..> UnityEngine.Mathf : <<Uses>>
PlayerCamera ..> UnityEngine.Time : <<Uses>>
PlayerCamera ..> Player : <<Uses>>
PlayerCamera ..> ShipGameMode : <<Uses>>
PlayerCamera ..> UnityEngine.Transform : <<Uses>>
PlayerCamera ..> UnityEngine.Vector3 : <<Uses>>
class Player {
{field} + RigidBody: UnityEngine.Rigidbody2D {get} {private set}
{field} + Transform: UnityEngine.Transform {get} {private set}
{field} + Particle: UnityEngine.ParticleSystem {get} {private set}
{field} + LevelsLoader: LevelsLoader {get} {set}
{field} + SpriteRenderer: UnityEngine.SpriteRenderer {get} {private set}
{field} + IsColliding: bool {get} {set}
{field} + HasStarted: bool {get} {set}
{field} + CanJump: bool {get} {set}
{field} + CurrentGameMode: IGameMode {get} {set}
{field} + SpeedMultiplier: float
{method} + Awake()
{method} + Start()
{method} + Update()
{method} + OnCollisionEnter2D(collision: UnityEngine.Collision2D)
{method} + OnCollisionExit2D(collision: UnityEngine.Collision2D)
{method} + OnTriggerEnter2D(collision: UnityEngine.Collider2D)
{method} + ChangeGameMode(newMode: IGameMode)
}
Player --|> UnityEngine.MonoBehaviour
Player *--> UnityEngine.Rigidbody2D : <<Owns>>
Player *--> UnityEngine.Transform : <<Owns>>
Player *--> UnityEngine.ParticleSystem : <<Owns>>
Player o--> LevelsLoader : <<References>>
Player *--> UnityEngine.SpriteRenderer : <<Owns>>
Player o--> IGameMode : <<Has>>
Player ..> UnityEngine.Resources : <<Uses>>
Player ..> UnityEngine.Debug : <<Uses>>
Player ..> ShipPortal : <<Uses>>
Player ..> CubePortal : <<Uses>>
Player ..> BonusBoostSpeed : <<Uses>>
Player ..> BonusSlowSpeed : <<Uses>>
Player ..> NormalGameMode : <<Uses>>
Player ..> UnityEngine.Collision2D : <<Uses>>
Player ..> UnityEngine.Collider2D : <<Uses>>
class PauseMenu {
{field} + pauseMenu: UnityEngine.GameObject
{field} + pauseButton: UnityEngine.GameObject
{field} + levelLoader: LevelLoader
{field} + volumeSlider: UnityEngine.UI.Slider
{method} + Start()
{method} + ChangeVolume()
{method} + Pause()
{method} + Home()
{method} + Resume()
}
PauseMenu --|> UnityEngine.MonoBehaviour
PauseMenu --> UnityEngine.GameObject : <<References>>
PauseMenu --> LevelLoader : <<References>>
PauseMenu --> UnityEngine.UI.Slider : <<References>>
PauseMenu ..> UnityEngine.PlayerPrefs : <<Uses>>
PauseMenu ..> UnityEngine.Time : <<Uses>>
PauseMenu ..> UnityEngine.SceneManagement.SceneManager : <<Uses>>
class MainMenu {
{method} + LaunchGame()
{method} + OpenImport()
{method} + QuitGame()
{method} + LevelEditor()
{method} + EditorChoice()
{method} + CreateLevel()
}
MainMenu --|> UnityEngine.MonoBehaviour
MainMenu ..> UnityEngine.SceneManagement.SceneManager : <<Uses>>
MainMenu ..> UnityEngine.Application : <<Uses>>
class LevelStat {
{field} + JsonName: string {get} {set}
{field} + totalJumps: Integer
{field} + totalAttempts: Integer
{field} + progressionPercent: Integer
{method} + {static} CreateFromJSON(jsonString: string): LevelStat
}
LevelStat ..> UnityEngine.JsonUtility : <<Uses>>
class LevelsLoader {
{field} + levels: System.Collections.Generic.List<Level>
{field} + levelCurrent: Level
{method} - Start()
{method} - LoadAllLevels()
{method} - SaveLevelCurrent()
{method} + NextLevel()
{method} + PreviousLevel()
{method} + IncreaseTotalJumps()
{method} + IncreaseTotalAttempts()
{method} + CalculateCurrentProgressionPercent(playerPosition: UnityEngine.Vector3): Integer
{method} + RefreshLevels()
}
LevelsLoader --|> UnityEngine.MonoBehaviour
LevelsLoader *--> Level : <<Owns>>
LevelsLoader ..> UnityEngine.TextAsset : <<Uses>>
LevelsLoader ..> UnityEngine.Resources : <<Uses>>
LevelsLoader ..> System.IO.Path : <<Uses>>
LevelsLoader ..> UnityEngine.Application : <<Uses>>
LevelsLoader ..> System.IO.File : <<Uses>>
LevelsLoader ..> UnityEngine.JsonUtility : <<Uses>>
LevelsLoader ..> LevelStat : <<Uses>>
LevelsLoader ..> UnityEngine.Vector3 : <<Uses>>
LevelsLoader ..> UnityEngine.Mathf : <<Uses>>
LevelsLoader ..> WinnerWall : <<Uses>>
LevelsLoader ..> UnityEngine.GameObject : <<Uses>>
LevelsLoader ..> UnityEngine.Renderer : <<Uses>>
LevelsLoader ..> System.Collections.Generic.List : <<Uses>>
class LevelLoader {
{field} + levelsLoader: LevelsLoader
{field} + audioSource: UnityEngine.AudioSource
{field} + progressionText: UnityEngine.UI.Text
{field} - groundY: float
{method} - GetPrefab(type: string): UnityEngine.GameObject
{method} - LoadAudio()
{method} - LoadElements()
{method} + Start()
{method} + Update()
}
LevelLoader --|> UnityEngine.MonoBehaviour
LevelLoader o--> LevelsLoader : <<References>>
LevelLoader *--> UnityEngine.AudioSource : <<Owns>>
LevelLoader --> UnityEngine.UI.Text : <<References>>
LevelLoader ..> System.IO.Path : <<Uses>>
LevelLoader ..> UnityEngine.Resources : <<Uses>>
LevelLoader ..> UnityEngine.PlayerPrefs : <<Uses>>
LevelLoader ..> UnityEngine.GameObject : <<Uses>>
LevelLoader ..> UnityEngine.Vector3 : <<Uses>>
LevelLoader ..> UnityEngine.Quaternion : <<Uses>>
LevelLoader ..> UnityEngine.Transform : <<Uses>>
LevelLoader ..> WinnerWall : <<Uses>>
LevelLoader ..> Level : <<Uses>>
LevelLoader ..> Ground : <<Uses>>
LevelLoader ..> UnityEngine.AudioClip : <<Uses>>
LevelLoader ..> UnityEngine.Renderer : <<Uses>>
class LevelEditor {
{field} - currentBlock: UnityEngine.GameObject
{field} - isPlacingBlock: bool
{field} - currentScale: UnityEngine.Vector3
{field} - scaleStep: float
{field} + blockGroupContainer: UnityEngine.Transform
{field} + buttonPrefabTemplate: UnityEngine.GameObject
{field} - currentPage: Integer
{field} - buttonsPerPage: Integer {constant}
{field} - blockPrefabs: System.Collections.Generic.List<UnityEngine.GameObject>
{field} - currentButtons: System.Collections.Generic.List<UnityEngine.GameObject>
{field} - resizingTarget: UnityEngine.GameObject
{field} - isResizing: bool
{field} - originalMousePos: UnityEngine.Vector3
{field} - originalScale: UnityEngine.Vector3
{field} - currentResizeAxis: ResizeAxis
{method} - Start()
{method} - LoadPrefabs()
{method} - GenerateButtons()
{method} - ClearCurrentButtons()
{method} + NextPage()
{method} + PreviousPage()
{method} - SelectPrefab(prefab: UnityEngine.GameObject)
{method} - Update()
{method} - PlaceBlock()
{method} - TrySnapToNearbyBlock()
{method} - InstantiateAndPrepare(prefab: UnityEngine.GameObject, scaleOverride: UnityEngine.Vector3?)
{method} - HandleBlockRotation()
}
LevelEditor --|> UnityEngine.MonoBehaviour
LevelEditor o--> blockGroupContainer : <<References>>
LevelEditor --> buttonPrefabTemplate : <<References>>
LevelEditor *--> blockPrefabs : <<Owns>>
LevelEditor *--> currentButtons : <<Owns>>
LevelEditor o--> currentBlock : <<References>>
LevelEditor o--> resizingTarget : <<References>>
LevelEditor ..> UnityEngine.GameObject : <<Uses>>
LevelEditor ..> UnityEngine.Vector3 : <<Uses>>
LevelEditor ..> UnityEngine.Mathf : <<Uses>>
LevelEditor ..> UnityEngine.Input : <<Uses>>
LevelEditor ..> UnityEngine.Camera : <<Uses>>
LevelEditor ..> UnityEngine.Physics2D : <<Uses>>
LevelEditor ..> UnityEngine.Collider2D : <<Uses>>
LevelEditor ..> UnityEngine.Bounds : <<Uses>>
LevelEditor ..> UnityEngine.SpriteRenderer : <<Uses>>
LevelEditor ..> UnityEngine.UI.Button : <<Uses>>
LevelEditor ..> UnityEngine.UI.Image : <<Uses>>
LevelEditor ..> UnityEngine.RectTransform : <<Uses>>
LevelEditor ..> UnityEngine.Debug : <<Uses>>
LevelEditor ..> System.Collections.Generic.List : <<Uses>>
LevelEditor ..> UnityEngine.Resources : <<Uses>>
LevelEditor ..> Player : <<Uses>> ' (via tags)
LevelEditor ..> Ground : <<Uses>> ' (via tags)
LevelEditor ..> Portal : <<Uses>> ' (via tags)
LevelEditor ..> SmallObstacle : <<Uses>> ' (via tags)
LevelEditor ..> Spike : <<Uses>> ' (via tags)
LevelEditor ..> Block : <<Uses>> ' (via tags)
LevelEditor ..> Bonus : <<Uses>> ' (via tags)
enum ResizeAxis <<enumeration>> {
None
Horizontal
Vertical
}
LevelEditor *--> ResizeAxis : <<Has>>
class LevelElement {
{field} + type: string
{field} + x: float
{field} + y: float
{field} + scaleX: float
{field} + scaleY: float
} }
class Level { class Level {
{field} + {static} {readOnly} LAST_X: Integer = 15 - name: String
{field} + JsonName: string {get} {set} - musicName: String
{field} + TotalJumps: Integer {get} {set} + StartLevel()
{field} + TotalAttempts: Integer {get} {set} + EndLevel()
{field} + ProgressionPercent: Integer {get} {set} + CheckCompletion(): Boolean
{field} + ProgressionPercentMax: Integer {get} {set}
{field} + name: string
{field} + musicName: string
{field} + order: Integer
{field} + elements: System.Collections.Generic.List<LevelElement>
{field} + LastX: float {get}
{method} + {static} CreateFromJSON(jsonString: string): Level
}
Level *--> LevelElement : <<Composed of>>
Level ..> UnityEngine.JsonUtility : <<Uses>>
Level ..> System.Collections.Generic.List : <<Uses>>
class JSONImporter {
{field} + statusText: TMPro.TMP_Text
{method} - Awake()
{method} - Start()
{method} + ImportJSON()
{method} - ShowFileBrowser(): System.Collections.IEnumerator
{method} - UpdateStatus(message: string, color: UnityEngine.Color)
}
JSONImporter --|> UnityEngine.MonoBehaviour
JSONImporter --> TMPro.TMP_Text : <<References>>
JSONImporter ..> System.Collections.IEnumerator : <<Uses>>
JSONImporter ..> SimpleFileBrowser.FileBrowser : <<Uses>>
JSONImporter ..> System.IO.Path : <<Uses>>
JSONImporter ..> System.IO.File : <<Uses>>
JSONImporter ..> UnityEngine.Color : <<Uses>>
JSONImporter ..> LevelsLoader : <<Uses>>
JSONImporter ..> UnityEngine.Object : <<Uses>>
JSONImporter ..> UnityEngine.Canvas : <<Uses>>
JSONImporter ..> UnityEngine.SceneManagement.SceneManager : <<Uses>>
class JSONExporter {
{field} + statusText: TMPro.TMP_Text
{field} - editor: LevelEditor
{field} - levelsFolder: string
{method} - Awake()
{method} - Start()
{method} + ExportJSON()
{method} - ShowSaveDialog(): System.Collections.IEnumerator
{method} - SetStatus(message: string, color: UnityEngine.Color)
}
JSONExporter --|> UnityEngine.MonoBehaviour
JSONExporter o--> LevelEditor : <<References>>
JSONExporter --> TMPro.TMP_Text : <<References>>
JSONExporter ..> System.Collections.IEnumerator : <<Uses>>
JSONExporter ..> System.Collections.Generic.List : <<Uses>>
JSONExporter ..> SimpleFileBrowser.FileBrowser : <<Uses>>
JSONExporter ..> System.IO.Path : <<Uses>>
JSONExporter ..> System.IO.File : <<Uses>>
JSONExporter ..> System.IO.Directory : <<Uses>>
JSONExporter ..> UnityEngine.Collider2D : <<Uses>>
JSONExporter ..> UnityEngine.Object : <<Uses>>
JSONExporter ..> UnityEngine.Vector3 : <<Uses>>
JSONExporter ..> UnityEngine.Mathf : <<Uses>>
JSONExporter ..> UnityEngine.JsonUtility : <<Uses>>
JSONExporter ..> UnityEngine.Color : <<Uses>>
JSONExporter ..> LevelsLoader : <<Uses>>
JSONExporter ..> UnityEngine.Canvas : <<Uses>>
class SerializableElement <<private>> {
{field} + type: string
{field} + x: float
{field} + y: float
{field} + scaleX: float
{field} + scaleY: float
}
JSONExporter ..> SerializableElement : <<Uses>>
class LevelData <<private>> {
{field} + name: string
{field} + musicName: string
{field} + order: Integer
{field} + elements: SerializableElement[*]
}
LevelData *--> SerializableElement : <<Composed of>>
JSONExporter ..> LevelData : <<Uses>>
interface IGameMode <<interface>> {
{method} + Update(player: Player) {abstract}
{method} + OnCollisionEnter(player: Player, collision: UnityEngine.Collision2D) {abstract}
{method} + OnCollisionExit(player: Player, collision: UnityEngine.Collision2D) {abstract}
} }
class ShipGameMode implements IGameMode { abstract class LevelElement {
{field} - HorizontalSpeed: float {constant} - x: Float
{field} - JumpForce: float {constant} - y: Float
{field} - JumpKey: UnityEngine.KeyCode {constant}
{field} - UpperAngle: float {constant}
{field} - LowerAngle: float {constant}
{field} - RotationTransitionDuration: float {constant}
{method} + Update(player: Player)
{method} - GetCurrentZAngle(player: Player): float
{method} - Jump(player: Player)
{method} + OnCollisionEnter(player: Player, collision: UnityEngine.Collision2D)
{method} + OnCollisionExit(player: Player, collision: UnityEngine.Collision2D)
} }
ShipGameMode ..|> IGameMode
ShipGameMode ..> Player : <<Uses>>
ShipGameMode ..> UnityEngine.Vector2 : <<Uses>>
ShipGameMode ..> UnityEngine.Input : <<Uses>>
ShipGameMode ..> UnityEngine.KeyCode : <<Uses>>
ShipGameMode ..> UnityEngine.Mathf : <<Uses>>
ShipGameMode ..> UnityEngine.Time : <<Uses>>
ShipGameMode ..> UnityEngine.Quaternion : <<Uses>>
ShipGameMode ..> UnityEngine.SceneManagement.SceneManager : <<Uses>>
ShipGameMode ..> UnityEngine.Collision2D : <<Uses>>
ShipGameMode ..> LevelsLoader : <<Uses>>
class NormalGameMode implements IGameMode { abstract class Obstacle extends LevelElement {
{field} - HorizontalSpeed: float {constant} + TriggerEffect(player: Player)
{field} - JumpForce: float {constant}
{field} - JumpKey: UnityEngine.KeyCode {constant}
{field} - isRotating: bool
{field} - targetRotationAngle: float
{field} - rotationSpeed: float {readOnly}
{method} + Update(player: Player)
{method} - Jump(player: Player)
{method} - PerformRotation(player: Player)
{method} - IsJumping(player: Player): bool
{method} - AlignRotation(player: Player)
{method} - UpdateParticlePositionAndRotation(player: Player)
{method} + OnCollisionEnter(player: Player, collision: UnityEngine.Collision2D)
{method} + OnCollisionExit(player: Player, collision: UnityEngine.Collision2D)
} }
NormalGameMode ..|> IGameMode
NormalGameMode ..> Player : <<Uses>>
NormalGameMode ..> UnityEngine.Vector2 : <<Uses>>
NormalGameMode ..> UnityEngine.Input : <<Uses>>
NormalGameMode ..> UnityEngine.KeyCode : <<Uses>>
NormalGameMode ..> UnityEngine.Mathf : <<Uses>>
NormalGameMode ..> UnityEngine.Time : <<Uses>>
NormalGameMode ..> UnityEngine.Quaternion : <<Uses>>
NormalGameMode ..> UnityEngine.SceneManagement.SceneManager : <<Uses>>
NormalGameMode ..> UnityEngine.Collision2D : <<Uses>>
NormalGameMode ..> LevelsLoader : <<Uses>>
NormalGameMode ..> UnityEngine.Vector3 : <<Uses>>
class Platform extends LevelElement {
}
' Tags class Spike extends Obstacle {
class ShipPortal { } + TriggerEffect(player: Player)
class CubePortal { } }
class BonusBoostSpeed { }
class BonusSlowSpeed { }
class Kill { }
class Win { }
class Ground { }
class WinnerWall { }
class Block { }
class SmallObstacle { }
class Spike { }
class Portal { }
class Bonus { }
Player ..> ShipPortal : <<Uses Tag>> class Portal extends LevelElement {
Player ..> CubePortal : <<Uses Tag>> - destination: Vector2
Player ..> BonusBoostSpeed : <<Uses Tag>> - type: PortalType
Player ..> BonusSlowSpeed : <<Uses Tag>> + Teleport(player: Player)
ShipGameMode ..> Kill : <<Uses Tag>> }
ShipGameMode ..> Win : <<Uses Tag>>
ShipGameMode ..> Ground : <<Uses Tag>> enum PortalType {
NormalGameMode ..> Kill : <<Uses Tag>> Normal, Gravity, Speed
NormalGameMode ..> Win : <<Uses Tag>> }
LevelLoader ..> WinnerWall : <<Uses Prefab>>
LevelLoader ..> Ground : <<Uses Prefab>> class Bumper extends LevelElement {
LevelEditor ..> Ground : <<Uses Tag>> - bounceForce: Float
LevelEditor ..> Block : <<Uses Tag>> + Bounce(player: Player)
LevelEditor ..> SmallObstacle : <<Uses Tag>> }
LevelEditor ..> Spike : <<Uses Tag>>
LevelEditor ..> Portal : <<Uses Tag>> class LevelEnd extends LevelElement {
LevelEditor ..> Bonus : <<Uses Tag>> + TriggerEndGame()
LevelsLoader ..> WinnerWall : <<Uses Prefab>> }
class Collectible extends LevelElement {
- points: int
+ Collect(player: Player)
}
class Player {
- JUMP_FORCE: static const Float = 26.6581
- SPEED: static const Float = 8.6
- rigidBody: Rigidbody2D
- isColliding: Boolean
- isGrounded: Boolean
- gravityScale: Float
+ Jump()
+ IsJumping(): Boolean
+ OnCollisionEnter2D(collision: Collision2D)
+ OnCollisionExit2D(collision: Collision2D)
+ ChangeGravity()
+ Die()
+ Respawn()
+ CollectItem(item: Collectible)
}
class LevelLoader {
+ LoadLevel(jsonPath: String): Level
+ UnloadLevel(level: Level)
}
class LevelParser {
+ ParseJSON(jsonData: String): Level
}
class MusicManager {
- currentTrack: String
- volume: Float
+ PlayMusic(musicPath: String)
+ StopMusic()
+ SetVolume(level: Float)
}
GameManager *--> Level : <<Manages>>
GameManager --> LevelLoader : <<Uses>>
LevelLoader --> LevelParser : <<Uses>>
Level *--> LevelElement : <<Contains>>
GameManager *--> Player : <<Owns>>
GameManager --> MusicManager : <<Controls>>
Player --> LevelEnd : <<Triggers>>
Player --> Portal : <<Interacts>>
Player --> Collectible : <<Collects>>
Obstacle --> Player : <<Affects>>
@enduml @enduml

View File

@ -1,4 +1,4 @@
@startuml Geometry Dash - Diagramme d'états du joueur @startuml Geometry Dash - Diagramme d'etats du joueur
start start
@ -16,6 +16,12 @@ repeat
switch (Forme) switch (Forme)
case (Forme fusée) case (Forme fusée)
:Mode fusée; :Mode fusée;
case (Forme roue)
:Mode roue;
case (Forme sens inversé)
:Mode sens inversé;
case (Forme gravité inversée)
:Mode gravité inversée;
endswitch endswitch
if (Le joueur percute un obstacle ?) then (Oui) if (Le joueur percute un obstacle ?) then (Oui)
:Le joueur meurt; :Le joueur meurt;
@ -32,8 +38,8 @@ repeat
:Le joueur meurt; :Le joueur meurt;
stop stop
endif endif
case (Temps accéléré) case (Annulation d'obstacle)
:Activer accélération du temps; :Supprimer tous les obstacles;
:Durée : 3 secondes; :Durée : 3 secondes;
endswitch endswitch
} }

View File

@ -4,64 +4,100 @@ left to right direction
actor Joueur as Joueur actor Joueur as Joueur
rectangle "Menu principal" { rectangle "Menu principal" {
usecase "Configurer les paramètres" as ConfigurerParametres
usecase "Accéder à la sélection des niveaux" as SelectionNiveau usecase "Accéder à la sélection des niveaux" as SelectionNiveau
usecase "Accéder à l'éditeur de niveau" as EditeurNiveau usecase "Accéder à l'éditeur de cartes" as EditeurCartes
usecase "Importer un niveau" as ImporterNiveau usecase "Consulter les statistiques" as ConsulterStats
usecase "Quitter le jeu" as QuitterJeu usecase "Voir les trophées et récompenses" as VoirTrophees
} }
rectangle "Sélection des niveaux" { rectangle "Sélection des niveaux" {
usecase "Parcourir les niveaux disponibles (passer au niveau suivant ou précédent)" as ParcourirNiveaux usecase "Parcourir les niveaux disponibles" as ParcourirNiveaux
usecase "Afficher les statistiques d'un niveau (nombre d'essais, nombre de sauts et progression record)" as AfficherDetailsNiveau usecase "Afficher les détails d'un niveau" as AfficherDetailsNiveau
usecase "Commencer un niveau" as CommencerNiveau usecase "Commencer un niveau" as CommencerNiveau
} }
rectangle "Pendant un niveau" { rectangle "Pendant un niveau" {
usecase "Appuyer sur la barre d'espace" as Sauter usecase "Sauter" as Sauter
usecase "Voir la progression dans le niveau" as VoirProgression
usecase "Mettre le jeu en pause" as MettrePause usecase "Mettre le jeu en pause" as MettrePause
} }
rectangle "Paramètres" {
usecase "Régler le volume du jeu" as ReglerVolume
usecase "Changer la musique de fond" as ChangerMusique
usecase "Lire les instructions d'aide" as LireAide
}
rectangle "Création de cartes" {
usecase "Créer une nouvelle carte" as CreerNouvelleCarte
usecase "Modifier une carte existante" as ModifierCarte
usecase "Tester une carte" as TesterCarte
usecase "Partager une carte" as PartagerCarte
usecase "Télécharger des cartes de la communauté" as TelechargerCartes
}
rectangle "Statistiques" {
usecase "Afficher les statistiques globales" as AfficherStatsGlobales
usecase "Afficher les statistiques de session" as AfficherStatsSession
}
rectangle "Trophées et récompenses" {
usecase "Voir les trophées débloqués" as VoirTropheesDebloques
usecase "Voir les pièces collectées" as VoirPieces
}
rectangle "Menu Pause" { rectangle "Menu Pause" {
usecase "Continuer" as Continuer usecase "Continuer" as Continuer
usecase "Revenir au menu principal" as RevenirMenuPrincipal usecase "Redémarrer la partie" as RedemarrerPartie
usecase "Régler le volume de la musique" as ReglerVolumeMusique usecase "Retour à la sélection des maps" as RetourSelection
usecase "Voir le nombre d'essais, nombre de sauts et progression record" as StatistiquesNiveau
}
rectangle "Création de niveaux" {
usecase "Créer un nouveau niveau" as CreerNouveauNiveau
usecase "Modifier un niveau existant" as ModifierNiveau
usecase "Tester un niveau" as TesterNiveau
usecase "Exporter un niveau" as ExporterNiveau
} }
Joueur --> ConfigurerParametres : <<extends>>
Joueur --> SelectionNiveau : <<extends>> Joueur --> SelectionNiveau : <<extends>>
Joueur --> EditeurNiveau : <<extends>> Joueur --> EditeurCartes : <<extends>>
Joueur --> ImporterNiveau : <<extends>> Joueur --> ConsulterStats : <<extends>>
Joueur --> QuitterJeu : <<extends>> Joueur --> VoirTrophees : <<extends>>
SelectionNiveau --> AfficherDetailsNiveau : <<include>> SelectionNiveau --> ParcourirNiveaux : <<include>>
SelectionNiveau --> ParcourirNiveaux : <<extends>> ParcourirNiveaux --> AfficherDetailsNiveau : <<extends>>
SelectionNiveau --> CommencerNiveau : <<extends>> ParcourirNiveaux --> CommencerNiveau : <<extends>>
CommencerNiveau --> Sauter : <<extends>> CommencerNiveau --> Sauter : <<extends>>
CommencerNiveau --> VoirProgression : <<include>>
CommencerNiveau --> MettrePause : <<extends>> CommencerNiveau --> MettrePause : <<extends>>
ConfigurerParametres --> ReglerVolume : <<extends>>
ConfigurerParametres --> ChangerMusique : <<extends>>
ConfigurerParametres --> LireAide : <<extends>>
EditeurCartes --> CreerNouvelleCarte : <<extends>>
EditeurCartes --> ModifierCarte : <<extends>>
EditeurCartes --> TelechargerCartes : <<extends>>
CreerNouvelleCarte --> TesterCarte : <<extends>>
ModifierCarte --> TesterCarte : <<extends>>
CreerNouvelleCarte --> PartagerCarte : <<extends>>
ModifierCarte --> PartagerCarte : <<extends>>
TesterCarte--> Sauter : <<extends>>
TesterCarte--> MettrePause : <<extends>>
ConsulterStats --> AfficherStatsGlobales : <<extends>>
ConsulterStats --> AfficherStatsSession : <<extends>>
VoirTrophees --> VoirTropheesDebloques : <<extends>>
VoirTrophees --> VoirPieces : <<extends>>
MettrePause --> Continuer : <<extends>> MettrePause --> Continuer : <<extends>>
MettrePause --> RevenirMenuPrincipal : <<extends>> MettrePause --> RedemarrerPartie : <<extends>>
MettrePause --> ReglerVolumeMusique : <<extends>> MettrePause --> RetourSelection : <<extends>>
MettrePause --> StatistiquesNiveau : <<include>>
EditeurNiveau --> CreerNouveauNiveau : <<extends>> RedemarrerPartie --> Sauter : <<extends>>
EditeurNiveau --> ModifierNiveau : <<extends>> RedemarrerPartie --> MettrePause : <<extends>>
CreerNouveauNiveau --> TesterNiveau : <<extends>> Continuer --> Sauter : <<extends>>
ModifierNiveau --> TesterNiveau : <<extends>> Continuer --> MettrePause : <<extends>>
CreerNouveauNiveau --> ExporterNiveau : <<extends>> RetourSelection --> ParcourirNiveaux : <<include>>
ModifierNiveau --> ExporterNiveau : <<extends>>
@enduml @enduml

View File

@ -7,7 +7,7 @@ Les modélisations UML du projet sont générés à partir des fichiers `.puml`
- [Diagramme de classes](./UML/class-diagram.puml) - [Diagramme de classes](./UML/class-diagram.puml)
- [Diagramme d'activités](./UML/activity-diagram/activity-diagram.puml) - [Diagramme d'activités](./UML/activity-diagram/activity-diagram.puml)
- [Diagramme de cas d'utilisation](./UML/use-case-diagram.puml) - [Diagramme de cas d'utilisation](./UML/use-case-diagram.puml)
- [Diagramme d'états](./UML/state-diagram.puml) - [Diagramme d'états](./UML/state-diagram/state-diagram.puml)
## Diagramme de Gantt ## Diagramme de Gantt

File diff suppressed because one or more lines are too long

View File

@ -1,16 +1,16 @@
{ {
"dependencies": { "dependencies": {
"com.unity.collab-proxy": "2.8.1", "com.unity.collab-proxy": "2.6.0",
"com.unity.feature.2d": "2.0.1", "com.unity.feature.2d": "2.0.1",
"com.unity.ide.rider": "3.0.36", "com.unity.ide.rider": "3.0.31",
"com.unity.ide.visualstudio": "2.0.23", "com.unity.ide.visualstudio": "2.0.22",
"com.unity.inputsystem": "1.14.0", "com.unity.inputsystem": "1.11.2",
"com.unity.multiplayer.center": "1.0.0", "com.unity.multiplayer.center": "1.0.0",
"com.unity.test-framework": "1.5.1", "com.unity.test-framework": "1.4.5",
"com.unity.timeline": "1.8.7", "com.unity.timeline": "1.8.7",
"com.unity.toolchain.linux-x86_64": "2.0.10", "com.unity.toolchain.linux-x86_64": "2.0.10",
"com.unity.ugui": "2.0.0", "com.unity.ugui": "2.0.0",
"com.unity.visualscripting": "1.9.6", "com.unity.visualscripting": "1.9.4",
"com.yasirkula.simplefilebrowser": "https://github.com/yasirkula/UnitySimpleFileBrowser.git", "com.yasirkula.simplefilebrowser": "https://github.com/yasirkula/UnitySimpleFileBrowser.git",
"com.unity.modules.accessibility": "1.0.0", "com.unity.modules.accessibility": "1.0.0",
"com.unity.modules.ai": "1.0.0", "com.unity.modules.ai": "1.0.0",

View File

@ -1,11 +1,11 @@
{ {
"dependencies": { "dependencies": {
"com.unity.2d.animation": { "com.unity.2d.animation": {
"version": "10.1.4", "version": "10.1.3",
"depth": 1, "depth": 1,
"source": "registry", "source": "registry",
"dependencies": { "dependencies": {
"com.unity.2d.common": "9.0.7", "com.unity.2d.common": "9.0.6",
"com.unity.2d.sprite": "1.0.0", "com.unity.2d.sprite": "1.0.0",
"com.unity.collections": "1.2.4", "com.unity.collections": "1.2.4",
"com.unity.modules.animation": "1.0.0", "com.unity.modules.animation": "1.0.0",
@ -14,7 +14,7 @@
"url": "https://packages.unity.com" "url": "https://packages.unity.com"
}, },
"com.unity.2d.aseprite": { "com.unity.2d.aseprite": {
"version": "1.1.9", "version": "1.1.6",
"depth": 1, "depth": 1,
"source": "registry", "source": "registry",
"dependencies": { "dependencies": {
@ -26,7 +26,7 @@
"url": "https://packages.unity.com" "url": "https://packages.unity.com"
}, },
"com.unity.2d.common": { "com.unity.2d.common": {
"version": "9.0.7", "version": "9.0.6",
"depth": 2, "depth": 2,
"source": "registry", "source": "registry",
"dependencies": { "dependencies": {
@ -62,11 +62,11 @@
"dependencies": {} "dependencies": {}
}, },
"com.unity.2d.spriteshape": { "com.unity.2d.spriteshape": {
"version": "10.0.7", "version": "10.0.6",
"depth": 1, "depth": 1,
"source": "registry", "source": "registry",
"dependencies": { "dependencies": {
"com.unity.2d.common": "9.0.7", "com.unity.2d.common": "9.0.5",
"com.unity.mathematics": "1.1.0", "com.unity.mathematics": "1.1.0",
"com.unity.modules.physics2d": "1.0.0" "com.unity.modules.physics2d": "1.0.0"
}, },
@ -82,10 +82,11 @@
} }
}, },
"com.unity.2d.tilemap.extras": { "com.unity.2d.tilemap.extras": {
"version": "4.1.0", "version": "4.0.2",
"depth": 1, "depth": 1,
"source": "registry", "source": "registry",
"dependencies": { "dependencies": {
"com.unity.ugui": "1.0.0",
"com.unity.2d.tilemap": "1.0.0", "com.unity.2d.tilemap": "1.0.0",
"com.unity.modules.tilemap": "1.0.0", "com.unity.modules.tilemap": "1.0.0",
"com.unity.modules.jsonserialize": "1.0.0" "com.unity.modules.jsonserialize": "1.0.0"
@ -93,7 +94,7 @@
"url": "https://packages.unity.com" "url": "https://packages.unity.com"
}, },
"com.unity.burst": { "com.unity.burst": {
"version": "1.8.21", "version": "1.8.18",
"depth": 3, "depth": 3,
"source": "registry", "source": "registry",
"dependencies": { "dependencies": {
@ -103,7 +104,7 @@
"url": "https://packages.unity.com" "url": "https://packages.unity.com"
}, },
"com.unity.collab-proxy": { "com.unity.collab-proxy": {
"version": "2.8.1", "version": "2.6.0",
"depth": 0, "depth": 0,
"source": "registry", "source": "registry",
"dependencies": {}, "dependencies": {},
@ -124,26 +125,27 @@
"com.unity.ext.nunit": { "com.unity.ext.nunit": {
"version": "2.0.5", "version": "2.0.5",
"depth": 1, "depth": 1,
"source": "builtin", "source": "registry",
"dependencies": {} "dependencies": {},
"url": "https://packages.unity.com"
}, },
"com.unity.feature.2d": { "com.unity.feature.2d": {
"version": "2.0.1", "version": "2.0.1",
"depth": 0, "depth": 0,
"source": "builtin", "source": "builtin",
"dependencies": { "dependencies": {
"com.unity.2d.animation": "10.1.4", "com.unity.2d.animation": "10.1.3",
"com.unity.2d.pixel-perfect": "5.0.3", "com.unity.2d.pixel-perfect": "5.0.3",
"com.unity.2d.psdimporter": "9.0.3", "com.unity.2d.psdimporter": "9.0.3",
"com.unity.2d.sprite": "1.0.0", "com.unity.2d.sprite": "1.0.0",
"com.unity.2d.spriteshape": "10.0.7", "com.unity.2d.spriteshape": "10.0.6",
"com.unity.2d.tilemap": "1.0.0", "com.unity.2d.tilemap": "1.0.0",
"com.unity.2d.tilemap.extras": "4.1.0", "com.unity.2d.tilemap.extras": "4.0.2",
"com.unity.2d.aseprite": "1.1.9" "com.unity.2d.aseprite": "1.1.6"
} }
}, },
"com.unity.ide.rider": { "com.unity.ide.rider": {
"version": "3.0.36", "version": "3.0.31",
"depth": 0, "depth": 0,
"source": "registry", "source": "registry",
"dependencies": { "dependencies": {
@ -152,7 +154,7 @@
"url": "https://packages.unity.com" "url": "https://packages.unity.com"
}, },
"com.unity.ide.visualstudio": { "com.unity.ide.visualstudio": {
"version": "2.0.23", "version": "2.0.22",
"depth": 0, "depth": 0,
"source": "registry", "source": "registry",
"dependencies": { "dependencies": {
@ -161,7 +163,7 @@
"url": "https://packages.unity.com" "url": "https://packages.unity.com"
}, },
"com.unity.inputsystem": { "com.unity.inputsystem": {
"version": "1.14.0", "version": "1.11.2",
"depth": 0, "depth": 0,
"source": "registry", "source": "registry",
"dependencies": { "dependencies": {
@ -208,21 +210,22 @@
"url": "https://packages.unity.com" "url": "https://packages.unity.com"
}, },
"com.unity.test-framework": { "com.unity.test-framework": {
"version": "1.5.1", "version": "1.4.5",
"depth": 0, "depth": 0,
"source": "builtin", "source": "registry",
"dependencies": { "dependencies": {
"com.unity.ext.nunit": "2.0.3", "com.unity.ext.nunit": "2.0.3",
"com.unity.modules.imgui": "1.0.0", "com.unity.modules.imgui": "1.0.0",
"com.unity.modules.jsonserialize": "1.0.0" "com.unity.modules.jsonserialize": "1.0.0"
} },
"url": "https://packages.unity.com"
}, },
"com.unity.test-framework.performance": { "com.unity.test-framework.performance": {
"version": "3.1.0", "version": "3.0.3",
"depth": 3, "depth": 3,
"source": "registry", "source": "registry",
"dependencies": { "dependencies": {
"com.unity.test-framework": "1.1.33", "com.unity.test-framework": "1.1.31",
"com.unity.modules.jsonserialize": "1.0.0" "com.unity.modules.jsonserialize": "1.0.0"
}, },
"url": "https://packages.unity.com" "url": "https://packages.unity.com"
@ -259,7 +262,7 @@
} }
}, },
"com.unity.visualscripting": { "com.unity.visualscripting": {
"version": "1.9.6", "version": "1.9.4",
"depth": 0, "depth": 0,
"source": "registry", "source": "registry",
"dependencies": { "dependencies": {

Some files were not shown because too many files have changed in this diff Show More