Compare commits
33 Commits
leaderboar
...
dev
Author | SHA1 | Date | |
---|---|---|---|
75614e4bc8 | |||
e570e8018d | |||
1e3ecf0342 | |||
fdccf955bf | |||
![]() |
21a93ce751 | ||
0dbe96c0c3 | |||
f949377c46 | |||
cda263839d | |||
fa16eaa0cc | |||
5a58064e4d | |||
15a847cbde | |||
ef6ed85e52 | |||
aa0cd27d87 | |||
f36578c429 | |||
75c890766c | |||
8ca5097604 | |||
be419b5c78 | |||
ced8078398 | |||
![]() |
2b8dec8ba7 | ||
![]() |
06af055344 | ||
![]() |
b3a2d8b1e6 | ||
![]() |
3b1774515b | ||
a9b626b86e | |||
2d5bf6002f | |||
![]() |
27e4584d88 | ||
fc7914f4c5 | |||
9401b9fc8a | |||
08338d6dc7 | |||
2bf911a312 | |||
f47def84dd | |||
47d6adf479 | |||
2898130a82 | |||
ee95dd043f |
13
.idea/.idea.AwesomeRunner-/.idea/.gitignore
generated
vendored
Normal file
13
.idea/.idea.AwesomeRunner-/.idea/.gitignore
generated
vendored
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# Rider ignored files
|
||||||
|
/projectSettingsUpdater.xml
|
||||||
|
/contentModel.xml
|
||||||
|
/.idea.AwesomeRunner-.iml
|
||||||
|
/modules.xml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
4
.idea/.idea.AwesomeRunner-/.idea/encodings.xml
generated
Normal file
4
.idea/.idea.AwesomeRunner-/.idea/encodings.xml
generated
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Encoding" addBOMForNewFiles="with BOM under Windows, with no BOM otherwise" />
|
||||||
|
</project>
|
8
.idea/.idea.AwesomeRunner-/.idea/indexLayout.xml
generated
Normal file
8
.idea/.idea.AwesomeRunner-/.idea/indexLayout.xml
generated
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="UserContentModel">
|
||||||
|
<attachedFolders />
|
||||||
|
<explicitIncludes />
|
||||||
|
<explicitExcludes />
|
||||||
|
</component>
|
||||||
|
</project>
|
6
.idea/.idea.AwesomeRunner-/.idea/vcs.xml
generated
Normal file
6
.idea/.idea.AwesomeRunner-/.idea/vcs.xml
generated
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
13
.idea/.idea.SAE/.idea/.gitignore
generated
vendored
Normal file
13
.idea/.idea.SAE/.idea/.gitignore
generated
vendored
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# Rider ignored files
|
||||||
|
/.idea.SAE.iml
|
||||||
|
/modules.xml
|
||||||
|
/projectSettingsUpdater.xml
|
||||||
|
/contentModel.xml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
4
.idea/.idea.SAE/.idea/encodings.xml
generated
Normal file
4
.idea/.idea.SAE/.idea/encodings.xml
generated
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Encoding" addBOMForNewFiles="with BOM under Windows, with no BOM otherwise" />
|
||||||
|
</project>
|
8
.idea/.idea.SAE/.idea/indexLayout.xml
generated
Normal file
8
.idea/.idea.SAE/.idea/indexLayout.xml
generated
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="UserContentModel">
|
||||||
|
<attachedFolders />
|
||||||
|
<explicitIncludes />
|
||||||
|
<explicitExcludes />
|
||||||
|
</component>
|
||||||
|
</project>
|
6
.idea/.idea.SAE/.idea/vcs.xml
generated
Normal file
6
.idea/.idea.SAE/.idea/vcs.xml
generated
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
8
.idea/indexLayout.xml
generated
Normal file
8
.idea/indexLayout.xml
generated
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="UserContentModel">
|
||||||
|
<attachedFolders />
|
||||||
|
<explicitIncludes />
|
||||||
|
<explicitExcludes />
|
||||||
|
</component>
|
||||||
|
</project>
|
7
.idea/projectSettingsUpdater.xml
generated
Normal file
7
.idea/projectSettingsUpdater.xml
generated
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="RiderProjectSettingsUpdater">
|
||||||
|
<option name="singleClickDiffPreview" value="1" />
|
||||||
|
<option name="vcsConfiguration" value="3" />
|
||||||
|
</component>
|
||||||
|
</project>
|
6
.idea/vcs.xml
generated
Normal file
6
.idea/vcs.xml
generated
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
70
.idea/workspace.xml
generated
Normal file
70
.idea/workspace.xml
generated
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ChangeListManager">
|
||||||
|
<list default="true" id="bbce60c9-b020-43bc-ac91-3e747354e409" name="Changes" comment="">
|
||||||
|
<change beforePath="$PROJECT_DIR$/Assets/Scenes/DeathScreen1VS1.unity" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/Scenes/DeathScreen1VS1.unity" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/Assets/Sprites/CameraRenderTexture.renderTexture" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/Sprites/CameraRenderTexture.renderTexture" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json" beforeDir="false" afterPath="$PROJECT_DIR$/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json" afterDir="false" />
|
||||||
|
</list>
|
||||||
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
|
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||||
|
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||||
|
</component>
|
||||||
|
<component name="Git.Settings">
|
||||||
|
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||||
|
</component>
|
||||||
|
<component name="HighlightingSettingsPerFile">
|
||||||
|
<setting file="mock://C:/Users/teddy/OneDrive/Documents/BUT3/SAE/Assets/Scenes/DeathScreen.unity" root0="SKIP_HIGHLIGHTING" />
|
||||||
|
<setting file="mock://C:/Users/teddy/OneDrive/Documents/BUT3/SAE/Assets/Scenes/DeathScreen.unity" root0="SKIP_HIGHLIGHTING" />
|
||||||
|
<setting file="mock://C:/Users/teddy/OneDrive/Documents/BUT3/SAE/Assets/Scenes/DeathScreen1VS1.unity" root0="SKIP_HIGHLIGHTING" />
|
||||||
|
<setting file="mock://C:/Users/teddy/OneDrive/Documents/BUT3/SAE/Assets/Scenes/DeathScreen1VS1.unity" root0="SKIP_HIGHLIGHTING" />
|
||||||
|
<setting file="mock://C:/Users/teddy/OneDrive/Documents/BUT3/SAE/Assets/Scenes/DeathScreen1VS1.unity" root0="SKIP_HIGHLIGHTING" />
|
||||||
|
<setting file="mock://C:/Users/teddy/OneDrive/Documents/BUT3/SAE/Assets/Scenes/MainMenu.unity" root0="SKIP_HIGHLIGHTING" />
|
||||||
|
<setting file="mock://C:/Users/teddy/OneDrive/Documents/BUT3/SAE/Assets/Scenes/MainMenu.unity" root0="SKIP_HIGHLIGHTING" />
|
||||||
|
<setting file="mock://C:/Users/teddy/OneDrive/Documents/BUT3/SAE/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json" root0="FORCE_HIGHLIGHTING" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectColorInfo"><![CDATA[{
|
||||||
|
"associatedIndex": 8
|
||||||
|
}]]></component>
|
||||||
|
<component name="ProjectId" id="2rfdTSaHd8CQV55SaQfRGNTGbwL" />
|
||||||
|
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
|
||||||
|
<component name="ProjectViewState">
|
||||||
|
<option name="hideEmptyMiddlePackages" value="true" />
|
||||||
|
<option name="showLibraryContents" value="true" />
|
||||||
|
</component>
|
||||||
|
<component name="PropertiesComponent"><![CDATA[{
|
||||||
|
"keyToString": {
|
||||||
|
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||||
|
"git-widget-placeholder": "dev",
|
||||||
|
"node.js.detected.package.eslint": "true",
|
||||||
|
"node.js.detected.package.tslint": "true",
|
||||||
|
"node.js.selected.package.eslint": "(autodetect)",
|
||||||
|
"node.js.selected.package.tslint": "(autodetect)",
|
||||||
|
"nodejs_package_manager_path": "npm",
|
||||||
|
"vue.rearranger.settings.migration": "true"
|
||||||
|
}
|
||||||
|
}]]></component>
|
||||||
|
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
|
||||||
|
<component name="TaskManager">
|
||||||
|
<task active="true" id="Default" summary="Default task">
|
||||||
|
<changelist id="bbce60c9-b020-43bc-ac91-3e747354e409" name="Changes" comment="" />
|
||||||
|
<created>1736954071558</created>
|
||||||
|
<option name="number" value="Default" />
|
||||||
|
<option name="presentableId" value="Default" />
|
||||||
|
<updated>1736954071558</updated>
|
||||||
|
<workItem from="1736954074577" duration="429000" />
|
||||||
|
</task>
|
||||||
|
<servers />
|
||||||
|
</component>
|
||||||
|
<component name="TypeScriptGeneratedFilesManager">
|
||||||
|
<option name="version" value="3" />
|
||||||
|
</component>
|
||||||
|
<component name="UnityProjectConfiguration" hasMinimizedUI="false" />
|
||||||
|
<component name="UnityProjectDiscoverer">
|
||||||
|
<option name="unityProjectFolder" value="true" />
|
||||||
|
</component>
|
||||||
|
<component name="VcsManagerConfiguration">
|
||||||
|
<option name="CLEAR_INITIAL_COMMIT_MESSAGE" value="true" />
|
||||||
|
</component>
|
||||||
|
</project>
|
Binary file not shown.
Binary file not shown.
2
.vscode/settings.json
vendored
2
.vscode/settings.json
vendored
@ -51,5 +51,5 @@
|
|||||||
"temp/": true,
|
"temp/": true,
|
||||||
"Temp/": true
|
"Temp/": true
|
||||||
},
|
},
|
||||||
"dotnet.defaultSolution": "AwesomeRunner.sln"
|
"dotnet.defaultSolution": "AwesomeRunner-.sln"
|
||||||
}
|
}
|
File diff suppressed because it is too large
Load Diff
108
Assets/Animations/animationend.controller
Normal file
108
Assets/Animations/animationend.controller
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!91 &9100000
|
||||||
|
AnimatorController:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_Name: animationend
|
||||||
|
serializedVersion: 5
|
||||||
|
m_AnimatorParameters:
|
||||||
|
- m_Name: Blend
|
||||||
|
m_Type: 1
|
||||||
|
m_DefaultFloat: 0
|
||||||
|
m_DefaultInt: 0
|
||||||
|
m_DefaultBool: 0
|
||||||
|
m_Controller: {fileID: 9100000}
|
||||||
|
- m_Name: Run
|
||||||
|
m_Type: 4
|
||||||
|
m_DefaultFloat: 0
|
||||||
|
m_DefaultInt: 0
|
||||||
|
m_DefaultBool: 0
|
||||||
|
m_Controller: {fileID: 9100000}
|
||||||
|
- m_Name: Jump
|
||||||
|
m_Type: 4
|
||||||
|
m_DefaultFloat: 0
|
||||||
|
m_DefaultInt: 0
|
||||||
|
m_DefaultBool: 0
|
||||||
|
m_Controller: {fileID: 9100000}
|
||||||
|
- m_Name: Dead
|
||||||
|
m_Type: 4
|
||||||
|
m_DefaultFloat: 0
|
||||||
|
m_DefaultInt: 0
|
||||||
|
m_DefaultBool: 0
|
||||||
|
m_Controller: {fileID: 9100000}
|
||||||
|
- m_Name: Slide
|
||||||
|
m_Type: 4
|
||||||
|
m_DefaultFloat: 0
|
||||||
|
m_DefaultInt: 0
|
||||||
|
m_DefaultBool: 0
|
||||||
|
m_Controller: {fileID: 9100000}
|
||||||
|
- m_Name: Idle
|
||||||
|
m_Type: 4
|
||||||
|
m_DefaultFloat: 0
|
||||||
|
m_DefaultInt: 0
|
||||||
|
m_DefaultBool: 0
|
||||||
|
m_Controller: {fileID: 9100000}
|
||||||
|
m_AnimatorLayers:
|
||||||
|
- serializedVersion: 5
|
||||||
|
m_Name: Base Layer
|
||||||
|
m_StateMachine: {fileID: 7459675453670605269}
|
||||||
|
m_Mask: {fileID: 0}
|
||||||
|
m_Motions: []
|
||||||
|
m_Behaviours: []
|
||||||
|
m_BlendingMode: 0
|
||||||
|
m_SyncedLayerIndex: -1
|
||||||
|
m_DefaultWeight: 0
|
||||||
|
m_IKPass: 0
|
||||||
|
m_SyncedLayerAffectsTiming: 0
|
||||||
|
m_Controller: {fileID: 9100000}
|
||||||
|
--- !u!1102 &5334629767517593806
|
||||||
|
AnimatorState:
|
||||||
|
serializedVersion: 6
|
||||||
|
m_ObjectHideFlags: 1
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_Name: a_Idle_Happy
|
||||||
|
m_Speed: 1
|
||||||
|
m_CycleOffset: 0
|
||||||
|
m_Transitions: []
|
||||||
|
m_StateMachineBehaviours: []
|
||||||
|
m_Position: {x: 50, y: 50, z: 0}
|
||||||
|
m_IKOnFeet: 0
|
||||||
|
m_WriteDefaultValues: 0
|
||||||
|
m_Mirror: 0
|
||||||
|
m_SpeedParameterActive: 0
|
||||||
|
m_MirrorParameterActive: 0
|
||||||
|
m_CycleOffsetParameterActive: 0
|
||||||
|
m_TimeParameterActive: 0
|
||||||
|
m_Motion: {fileID: 7400000, guid: e411d29e9f3ed4148a6f9d807e00efcd, type: 2}
|
||||||
|
m_Tag:
|
||||||
|
m_SpeedParameter:
|
||||||
|
m_MirrorParameter:
|
||||||
|
m_CycleOffsetParameter:
|
||||||
|
m_TimeParameter:
|
||||||
|
--- !u!1107 &7459675453670605269
|
||||||
|
AnimatorStateMachine:
|
||||||
|
serializedVersion: 6
|
||||||
|
m_ObjectHideFlags: 1
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_Name: Base Layer
|
||||||
|
m_ChildStates:
|
||||||
|
- serializedVersion: 1
|
||||||
|
m_State: {fileID: 5334629767517593806}
|
||||||
|
m_Position: {x: 10, y: 120, z: 0}
|
||||||
|
m_ChildStateMachines: []
|
||||||
|
m_AnyStateTransitions: []
|
||||||
|
m_EntryTransitions: []
|
||||||
|
m_StateMachineTransitions: {}
|
||||||
|
m_StateMachineBehaviours: []
|
||||||
|
m_AnyStatePosition: {x: 30, y: 0, z: 0}
|
||||||
|
m_EntryPosition: {x: -230, y: 120, z: 0}
|
||||||
|
m_ExitPosition: {x: 950, y: 170, z: 0}
|
||||||
|
m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
|
||||||
|
m_DefaultState: {fileID: 5334629767517593806}
|
8
Assets/Animations/animationend.controller.meta
Normal file
8
Assets/Animations/animationend.controller.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 104b61ba2d831c84e9200f18cdf2cd2f
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 9100000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
16
Assets/DeathScreen1VS1.cs
Normal file
16
Assets/DeathScreen1VS1.cs
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
public class DeathScreen1VS1 : MonoBehaviour
|
||||||
|
{
|
||||||
|
// Start is called once before the first execution of Update after the MonoBehaviour is created
|
||||||
|
void Start()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update is called once per frame
|
||||||
|
void Update()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
2
Assets/DeathScreen1VS1.cs.meta
Normal file
2
Assets/DeathScreen1VS1.cs.meta
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: ee53811d3959d1b4ca9782e0dfc97ccf
|
@ -9,6 +9,8 @@ Material:
|
|||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_Name: m_jammo_metal 1
|
m_Name: m_jammo_metal 1
|
||||||
m_Shader: {fileID: 4800000, guid: 73ef4de7c429719438a73d771100db7c, type: 3}
|
m_Shader: {fileID: 4800000, guid: 73ef4de7c429719438a73d771100db7c, type: 3}
|
||||||
|
m_Parent: {fileID: 0}
|
||||||
|
m_ModifiedSerializedProperties: 0
|
||||||
m_ValidKeywords: []
|
m_ValidKeywords: []
|
||||||
m_InvalidKeywords:
|
m_InvalidKeywords:
|
||||||
- _METALLICGLOSSMAP
|
- _METALLICGLOSSMAP
|
||||||
@ -19,6 +21,7 @@ Material:
|
|||||||
m_CustomRenderQueue: -1
|
m_CustomRenderQueue: -1
|
||||||
stringTagMap: {}
|
stringTagMap: {}
|
||||||
disabledShaderPasses: []
|
disabledShaderPasses: []
|
||||||
|
m_LockedProperties:
|
||||||
m_SavedProperties:
|
m_SavedProperties:
|
||||||
serializedVersion: 3
|
serializedVersion: 3
|
||||||
m_TexEnvs:
|
m_TexEnvs:
|
||||||
@ -85,3 +88,4 @@ Material:
|
|||||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||||
m_BuildTextureStacks: []
|
m_BuildTextureStacks: []
|
||||||
|
m_AllowLocking: 1
|
||||||
|
@ -2,20 +2,26 @@
|
|||||||
%TAG !u! tag:unity3d.com,2011:
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
--- !u!21 &2100000
|
--- !u!21 &2100000
|
||||||
Material:
|
Material:
|
||||||
serializedVersion: 6
|
serializedVersion: 8
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
m_PrefabInstance: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_Name: m_jammo_metal
|
m_Name: m_jammo_metal
|
||||||
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
|
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
|
||||||
m_ShaderKeywords: _METALLICGLOSSMAP _NORMALMAP
|
m_Parent: {fileID: 0}
|
||||||
|
m_ModifiedSerializedProperties: 0
|
||||||
|
m_ValidKeywords:
|
||||||
|
- _METALLICGLOSSMAP
|
||||||
|
- _NORMALMAP
|
||||||
|
m_InvalidKeywords: []
|
||||||
m_LightmapFlags: 4
|
m_LightmapFlags: 4
|
||||||
m_EnableInstancingVariants: 0
|
m_EnableInstancingVariants: 0
|
||||||
m_DoubleSidedGI: 0
|
m_DoubleSidedGI: 0
|
||||||
m_CustomRenderQueue: -1
|
m_CustomRenderQueue: -1
|
||||||
stringTagMap: {}
|
stringTagMap: {}
|
||||||
disabledShaderPasses: []
|
disabledShaderPasses: []
|
||||||
|
m_LockedProperties:
|
||||||
m_SavedProperties:
|
m_SavedProperties:
|
||||||
serializedVersion: 3
|
serializedVersion: 3
|
||||||
m_TexEnvs:
|
m_TexEnvs:
|
||||||
@ -55,6 +61,7 @@ Material:
|
|||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
m_Offset: {x: 0, y: 0}
|
m_Offset: {x: 0, y: 0}
|
||||||
|
m_Ints: []
|
||||||
m_Floats:
|
m_Floats:
|
||||||
- _BumpScale: 1
|
- _BumpScale: 1
|
||||||
- _Cutoff: 0.5
|
- _Cutoff: 0.5
|
||||||
@ -75,3 +82,5 @@ Material:
|
|||||||
m_Colors:
|
m_Colors:
|
||||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
m_BuildTextureStacks: []
|
||||||
|
m_AllowLocking: 1
|
||||||
|
@ -2,19 +2,26 @@
|
|||||||
%TAG !u! tag:unity3d.com,2011:
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
--- !u!21 &2100000
|
--- !u!21 &2100000
|
||||||
Material:
|
Material:
|
||||||
serializedVersion: 6
|
serializedVersion: 8
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
m_PrefabInternal: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_Name: comuter_wall
|
m_Name: comuter_wall
|
||||||
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
|
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
|
||||||
m_ShaderKeywords: _METALLICGLOSSMAP
|
m_Parent: {fileID: 0}
|
||||||
m_LightmapFlags: 5
|
m_ModifiedSerializedProperties: 0
|
||||||
|
m_ValidKeywords:
|
||||||
|
- _EMISSION
|
||||||
|
- _METALLICGLOSSMAP
|
||||||
|
m_InvalidKeywords: []
|
||||||
|
m_LightmapFlags: 1
|
||||||
m_EnableInstancingVariants: 0
|
m_EnableInstancingVariants: 0
|
||||||
m_DoubleSidedGI: 0
|
m_DoubleSidedGI: 0
|
||||||
m_CustomRenderQueue: -1
|
m_CustomRenderQueue: -1
|
||||||
stringTagMap: {}
|
stringTagMap: {}
|
||||||
disabledShaderPasses: []
|
disabledShaderPasses: []
|
||||||
|
m_LockedProperties:
|
||||||
m_SavedProperties:
|
m_SavedProperties:
|
||||||
serializedVersion: 3
|
serializedVersion: 3
|
||||||
m_TexEnvs:
|
m_TexEnvs:
|
||||||
@ -54,19 +61,26 @@ Material:
|
|||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
m_Offset: {x: 0, y: 0}
|
m_Offset: {x: 0, y: 0}
|
||||||
|
m_Ints: []
|
||||||
m_Floats:
|
m_Floats:
|
||||||
- _BumpScale: 1
|
- _BumpScale: 1
|
||||||
- _Cutoff: 0.5
|
- _Cutoff: 0.5
|
||||||
- _DetailNormalMapScale: 1
|
- _DetailNormalMapScale: 1
|
||||||
- _DstBlend: 0
|
- _DstBlend: 0
|
||||||
|
- _GlossMapScale: 1
|
||||||
- _Glossiness: 0.5
|
- _Glossiness: 0.5
|
||||||
|
- _GlossyReflections: 1
|
||||||
- _Metallic: 0
|
- _Metallic: 0
|
||||||
- _Mode: 0
|
- _Mode: 0
|
||||||
- _OcclusionStrength: 1
|
- _OcclusionStrength: 1
|
||||||
- _Parallax: 0.02
|
- _Parallax: 0.02
|
||||||
|
- _SmoothnessTextureChannel: 0
|
||||||
|
- _SpecularHighlights: 1
|
||||||
- _SrcBlend: 1
|
- _SrcBlend: 1
|
||||||
- _UVSec: 0
|
- _UVSec: 0
|
||||||
- _ZWrite: 1
|
- _ZWrite: 1
|
||||||
m_Colors:
|
m_Colors:
|
||||||
- _Color: {r: 0.8, g: 0.8, b: 0.8, a: 1}
|
- _Color: {r: 0.8, g: 0.8, b: 0.8, a: 1}
|
||||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
m_BuildTextureStacks: []
|
||||||
|
m_AllowLocking: 1
|
||||||
|
@ -2,19 +2,25 @@
|
|||||||
%TAG !u! tag:unity3d.com,2011:
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
--- !u!21 &2100000
|
--- !u!21 &2100000
|
||||||
Material:
|
Material:
|
||||||
serializedVersion: 6
|
serializedVersion: 8
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
m_PrefabInternal: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_Name: No Name
|
m_Name: No Name
|
||||||
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
|
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
|
||||||
m_ShaderKeywords:
|
m_Parent: {fileID: 0}
|
||||||
m_LightmapFlags: 5
|
m_ModifiedSerializedProperties: 0
|
||||||
|
m_ValidKeywords:
|
||||||
|
- _EMISSION
|
||||||
|
m_InvalidKeywords: []
|
||||||
|
m_LightmapFlags: 1
|
||||||
m_EnableInstancingVariants: 0
|
m_EnableInstancingVariants: 0
|
||||||
m_DoubleSidedGI: 0
|
m_DoubleSidedGI: 0
|
||||||
m_CustomRenderQueue: -1
|
m_CustomRenderQueue: -1
|
||||||
stringTagMap: {}
|
stringTagMap: {}
|
||||||
disabledShaderPasses: []
|
disabledShaderPasses: []
|
||||||
|
m_LockedProperties:
|
||||||
m_SavedProperties:
|
m_SavedProperties:
|
||||||
serializedVersion: 3
|
serializedVersion: 3
|
||||||
m_TexEnvs:
|
m_TexEnvs:
|
||||||
@ -54,19 +60,26 @@ Material:
|
|||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
m_Offset: {x: 0, y: 0}
|
m_Offset: {x: 0, y: 0}
|
||||||
|
m_Ints: []
|
||||||
m_Floats:
|
m_Floats:
|
||||||
- _BumpScale: 1
|
- _BumpScale: 1
|
||||||
- _Cutoff: 0.5
|
- _Cutoff: 0.5
|
||||||
- _DetailNormalMapScale: 1
|
- _DetailNormalMapScale: 1
|
||||||
- _DstBlend: 0
|
- _DstBlend: 0
|
||||||
|
- _GlossMapScale: 1
|
||||||
- _Glossiness: 0.5
|
- _Glossiness: 0.5
|
||||||
|
- _GlossyReflections: 1
|
||||||
- _Metallic: 0
|
- _Metallic: 0
|
||||||
- _Mode: 0
|
- _Mode: 0
|
||||||
- _OcclusionStrength: 1
|
- _OcclusionStrength: 1
|
||||||
- _Parallax: 0.02
|
- _Parallax: 0.02
|
||||||
|
- _SmoothnessTextureChannel: 0
|
||||||
|
- _SpecularHighlights: 1
|
||||||
- _SrcBlend: 1
|
- _SrcBlend: 1
|
||||||
- _UVSec: 0
|
- _UVSec: 0
|
||||||
- _ZWrite: 1
|
- _ZWrite: 1
|
||||||
m_Colors:
|
m_Colors:
|
||||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
m_BuildTextureStacks: []
|
||||||
|
m_AllowLocking: 1
|
||||||
|
@ -8,7 +8,8 @@ public class laserScript : MonoBehaviour {
|
|||||||
// Use this for initialization
|
// Use this for initialization
|
||||||
void Start () {
|
void Start () {
|
||||||
laserLine = GetComponentInChildren<LineRenderer> ();
|
laserLine = GetComponentInChildren<LineRenderer> ();
|
||||||
laserLine.SetWidth (.2f, .2f);
|
laserLine.startWidth = .2f;
|
||||||
|
laserLine.endWidth = .2f;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update is called once per frame
|
// Update is called once per frame
|
||||||
|
8
Assets/Prefabs/Coins.meta
Normal file
8
Assets/Prefabs/Coins.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: aa7ee8fd100668c43a4a6598a35a3ad6
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
163
Assets/Prefabs/Coins/Coins.prefab
Normal file
163
Assets/Prefabs/Coins/Coins.prefab
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!1 &9117726010709451998
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 2262208576908815080}
|
||||||
|
- component: {fileID: 3572880127954793139}
|
||||||
|
- component: {fileID: 6612934893704467973}
|
||||||
|
- component: {fileID: 2619330802336550126}
|
||||||
|
- component: {fileID: 6803980266743182291}
|
||||||
|
- component: {fileID: 6108635676596831665}
|
||||||
|
- component: {fileID: 1187001800563073841}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: Coins
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!4 &2262208576908815080
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 9117726010709451998}
|
||||||
|
serializedVersion: 2
|
||||||
|
m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068}
|
||||||
|
m_LocalPosition: {x: 0, y: 2, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 0.05, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 0}
|
||||||
|
m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0}
|
||||||
|
--- !u!33 &3572880127954793139
|
||||||
|
MeshFilter:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 9117726010709451998}
|
||||||
|
m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0}
|
||||||
|
--- !u!23 &6612934893704467973
|
||||||
|
MeshRenderer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 9117726010709451998}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_CastShadows: 1
|
||||||
|
m_ReceiveShadows: 1
|
||||||
|
m_DynamicOccludee: 1
|
||||||
|
m_StaticShadowCaster: 0
|
||||||
|
m_MotionVectors: 1
|
||||||
|
m_LightProbeUsage: 1
|
||||||
|
m_ReflectionProbeUsage: 1
|
||||||
|
m_RayTracingMode: 2
|
||||||
|
m_RayTraceProcedural: 0
|
||||||
|
m_RayTracingAccelStructBuildFlagsOverride: 0
|
||||||
|
m_RayTracingAccelStructBuildFlags: 1
|
||||||
|
m_SmallMeshCulling: 1
|
||||||
|
m_RenderingLayerMask: 1
|
||||||
|
m_RendererPriority: 0
|
||||||
|
m_Materials:
|
||||||
|
- {fileID: 2100000, guid: 9fc1d0d62308b2a47839d64bc3a4983d, type: 2}
|
||||||
|
m_StaticBatchInfo:
|
||||||
|
firstSubMesh: 0
|
||||||
|
subMeshCount: 0
|
||||||
|
m_StaticBatchRoot: {fileID: 0}
|
||||||
|
m_ProbeAnchor: {fileID: 0}
|
||||||
|
m_LightProbeVolumeOverride: {fileID: 0}
|
||||||
|
m_ScaleInLightmap: 1
|
||||||
|
m_ReceiveGI: 1
|
||||||
|
m_PreserveUVs: 0
|
||||||
|
m_IgnoreNormalsForChartDetection: 0
|
||||||
|
m_ImportantGI: 0
|
||||||
|
m_StitchLightmapSeams: 1
|
||||||
|
m_SelectedEditorRenderState: 3
|
||||||
|
m_MinimumChartSize: 4
|
||||||
|
m_AutoUVMaxDistance: 0.5
|
||||||
|
m_AutoUVMaxAngle: 89
|
||||||
|
m_LightmapParameters: {fileID: 0}
|
||||||
|
m_SortingLayerID: 0
|
||||||
|
m_SortingLayer: 0
|
||||||
|
m_SortingOrder: 0
|
||||||
|
m_AdditionalVertexStreams: {fileID: 0}
|
||||||
|
--- !u!136 &2619330802336550126
|
||||||
|
CapsuleCollider:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 9117726010709451998}
|
||||||
|
m_Material: {fileID: 0}
|
||||||
|
m_IncludeLayers:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Bits: 0
|
||||||
|
m_ExcludeLayers:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Bits: 0
|
||||||
|
m_LayerOverridePriority: 0
|
||||||
|
m_IsTrigger: 1
|
||||||
|
m_ProvidesContacts: 0
|
||||||
|
m_Enabled: 1
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Radius: 0.5000001
|
||||||
|
m_Height: 2
|
||||||
|
m_Direction: 1
|
||||||
|
m_Center: {x: 0.000000059604645, y: 0, z: -0.00000008940697}
|
||||||
|
--- !u!65 &6803980266743182291
|
||||||
|
BoxCollider:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 9117726010709451998}
|
||||||
|
m_Material: {fileID: 0}
|
||||||
|
m_IncludeLayers:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Bits: 0
|
||||||
|
m_ExcludeLayers:
|
||||||
|
serializedVersion: 2
|
||||||
|
m_Bits: 0
|
||||||
|
m_LayerOverridePriority: 0
|
||||||
|
m_IsTrigger: 1
|
||||||
|
m_ProvidesContacts: 0
|
||||||
|
m_Enabled: 1
|
||||||
|
serializedVersion: 3
|
||||||
|
m_Size: {x: 1.0000001, y: 2.0000005, z: 1.0000005}
|
||||||
|
m_Center: {x: 0.000000059604645, y: 0, z: -0.00000008940699}
|
||||||
|
--- !u!114 &6108635676596831665
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 9117726010709451998}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: ddaf0a1f90e1c46428ba5f029fd32ad0, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
coinValue: 1
|
||||||
|
--- !u!114 &1187001800563073841
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 9117726010709451998}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: ef8880022572d924bbe4f58655a16a6f, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
amplitude: 0.1
|
||||||
|
animationVelocity: {x: 0, y: 1, z: 0}
|
7
Assets/Prefabs/Coins/Coins.prefab.meta
Normal file
7
Assets/Prefabs/Coins/Coins.prefab.meta
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: b23a39661488b4b4bb909b4285f3f874
|
||||||
|
PrefabImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -104,7 +104,7 @@ BoxCollider:
|
|||||||
m_Enabled: 1
|
m_Enabled: 1
|
||||||
serializedVersion: 3
|
serializedVersion: 3
|
||||||
m_Size: {x: 2, y: 2, z: 2}
|
m_Size: {x: 2, y: 2, z: 2}
|
||||||
m_Center: {x: 0, y: 0, z: 0}
|
m_Center: {x: 0, y: 0.5, z: 0}
|
||||||
--- !u!114 &6632165759313513218
|
--- !u!114 &6632165759313513218
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@ -230,8 +230,8 @@ BoxCollider:
|
|||||||
m_ProvidesContacts: 0
|
m_ProvidesContacts: 0
|
||||||
m_Enabled: 1
|
m_Enabled: 1
|
||||||
serializedVersion: 3
|
serializedVersion: 3
|
||||||
m_Size: {x: 2, y: 2, z: 2}
|
m_Size: {x: 2, y: 1.75, z: 2}
|
||||||
m_Center: {x: 0, y: 0, z: 0}
|
m_Center: {x: 0, y: 2.25, z: 0}
|
||||||
--- !u!114 &-5363852902891024896
|
--- !u!114 &-5363852902891024896
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@ -245,7 +245,7 @@ MonoBehaviour:
|
|||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
<IsOnAllLanes>k__BackingField: 0
|
<IsOnAllLanes>k__BackingField: 0
|
||||||
<IsInevitable>k__BackingField: 1
|
<IsInevitable>k__BackingField: 0
|
||||||
--- !u!4 &4156031263124959724 stripped
|
--- !u!4 &4156031263124959724 stripped
|
||||||
Transform:
|
Transform:
|
||||||
m_CorrespondingSourceObject: {fileID: -4216859302048453862, guid: 02c07866f16913044aea6679ce17cfc5, type: 3}
|
m_CorrespondingSourceObject: {fileID: -4216859302048453862, guid: 02c07866f16913044aea6679ce17cfc5, type: 3}
|
||||||
|
File diff suppressed because it is too large
Load Diff
5799
Assets/Prefabs/Player2.prefab
Normal file
5799
Assets/Prefabs/Player2.prefab
Normal file
File diff suppressed because it is too large
Load Diff
7
Assets/Prefabs/Player2.prefab.meta
Normal file
7
Assets/Prefabs/Player2.prefab.meta
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 4865203f6c333ec41aa9c857891d9921
|
||||||
|
PrefabImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
5799
Assets/Prefabs/Player3.prefab
Normal file
5799
Assets/Prefabs/Player3.prefab
Normal file
File diff suppressed because it is too large
Load Diff
7
Assets/Prefabs/Player3.prefab.meta
Normal file
7
Assets/Prefabs/Player3.prefab.meta
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 6e6131461623f7f4e9622a07b5ea2f48
|
||||||
|
PrefabImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -24,13 +24,13 @@ Transform:
|
|||||||
m_PrefabInstance: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_GameObject: {fileID: 1385490266177085035}
|
m_GameObject: {fileID: 1385490266177085035}
|
||||||
|
serializedVersion: 2
|
||||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
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: []
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_RootOrder: 0
|
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!114 &3244299530156243158
|
--- !u!114 &3244299530156243158
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
@ -44,5 +44,5 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: 1290664e863a3d34596917f255587b4c, type: 3}
|
m_Script: {fileID: 11500000, guid: 1290664e863a3d34596917f255587b4c, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
capacity: 30
|
capacity: 10
|
||||||
prefab: {fileID: 6716018880928220119, guid: aa7da947970bb714fa7924d204fe2bdd, type: 3}
|
prefab: {fileID: 6716018880928220119, guid: aa7da947970bb714fa7924d204fe2bdd, type: 3}
|
||||||
|
@ -24,13 +24,13 @@ Transform:
|
|||||||
m_PrefabInstance: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_GameObject: {fileID: 4737509690352194895}
|
m_GameObject: {fileID: 4737509690352194895}
|
||||||
|
serializedVersion: 2
|
||||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
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: []
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_RootOrder: 0
|
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!114 &6300939898152622968
|
--- !u!114 &6300939898152622968
|
||||||
MonoBehaviour:
|
MonoBehaviour:
|
||||||
@ -44,5 +44,5 @@ MonoBehaviour:
|
|||||||
m_Script: {fileID: 11500000, guid: 1290664e863a3d34596917f255587b4c, type: 3}
|
m_Script: {fileID: 11500000, guid: 1290664e863a3d34596917f255587b4c, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
capacity: 20
|
capacity: 10
|
||||||
prefab: {fileID: 6716018880928220119, guid: aa7da947970bb714fa7924d204fe2bdd, type: 3}
|
prefab: {fileID: 6716018880928220119, guid: aa7da947970bb714fa7924d204fe2bdd, type: 3}
|
||||||
|
8
Assets/Resources.meta
Normal file
8
Assets/Resources.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 723c7ecb1f81a8c47a6c3853e476b507
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
48
Assets/Scenes/CoinPool.prefab
Normal file
48
Assets/Scenes/CoinPool.prefab
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!1 &7658440756881775109
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 2738643474112209314}
|
||||||
|
- component: {fileID: 8935043373779239955}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: CoinPool
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!4 &2738643474112209314
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 7658440756881775109}
|
||||||
|
serializedVersion: 2
|
||||||
|
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||||
|
m_LocalPosition: {x: 3.7201803, y: -0.29014507, z: 29.534254}
|
||||||
|
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!114 &8935043373779239955
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 7658440756881775109}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: c4456a434a6301241bcca08c705b96c4, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier:
|
||||||
|
capacity: 0
|
||||||
|
prefab: {fileID: 6108635676596831665, guid: b23a39661488b4b4bb909b4285f3f874, type: 3}
|
7
Assets/Scenes/CoinPool.prefab.meta
Normal file
7
Assets/Scenes/CoinPool.prefab.meta
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 44cf83f237ca73248933ea3c97149a4a
|
||||||
|
PrefabImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,9 @@
|
|||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
|
<<<<<<<< HEAD:Assets/TextMesh Pro/Examples & Extras/Scenes/27 - Double Pass Shader Example.unity.meta
|
||||||
guid: 43c23d1fff294aa4b90d180240a2295a
|
guid: 43c23d1fff294aa4b90d180240a2295a
|
||||||
|
========
|
||||||
|
guid: 9fc0d4010bbf28b4594072e72b8655ab
|
||||||
|
>>>>>>>> 4c350d16a4b31db0659a0e5146e5626a353b2200:Assets/Scenes/DeathScreen.unity.meta
|
||||||
DefaultImporter:
|
DefaultImporter:
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
userData:
|
userData:
|
||||||
|
2375
Assets/Scenes/DeathScreen1VS1.unity
Normal file
2375
Assets/Scenes/DeathScreen1VS1.unity
Normal file
File diff suppressed because it is too large
Load Diff
7
Assets/Scenes/DeathScreen1VS1.unity.meta
Normal file
7
Assets/Scenes/DeathScreen1VS1.unity.meta
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 0c8ab113f15a70d4083297e24fb728f0
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
5892
Assets/Scenes/DuoGameScene.unity
Normal file
5892
Assets/Scenes/DuoGameScene.unity
Normal file
File diff suppressed because it is too large
Load Diff
7
Assets/Scenes/DuoGameScene.unity.meta
Normal file
7
Assets/Scenes/DuoGameScene.unity.meta
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 682d64d1d4474994cba4504e7df89dd0
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
File diff suppressed because it is too large
Load Diff
1183
Assets/Scenes/SkinMenuPlayer1.unity
Normal file
1183
Assets/Scenes/SkinMenuPlayer1.unity
Normal file
File diff suppressed because it is too large
Load Diff
7
Assets/Scenes/SkinMenuPlayer1.unity.meta
Normal file
7
Assets/Scenes/SkinMenuPlayer1.unity.meta
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 72410a9edaee92c4e86511fe51f4aeaf
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
1183
Assets/Scenes/SkinMenuPlayer2.unity
Normal file
1183
Assets/Scenes/SkinMenuPlayer2.unity
Normal file
File diff suppressed because it is too large
Load Diff
7
Assets/Scenes/SkinMenuPlayer2.unity.meta
Normal file
7
Assets/Scenes/SkinMenuPlayer2.unity.meta
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: f80e925cd90324449923b287b3fb0f5f
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
File diff suppressed because it is too large
Load Diff
@ -7,7 +7,7 @@ MonoBehaviour:
|
|||||||
m_PrefabInstance: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_GameObject: {fileID: 0}
|
m_GameObject: {fileID: 0}
|
||||||
m_Enabled: 1
|
m_Enabled: 0
|
||||||
m_EditorHideFlags: 0
|
m_EditorHideFlags: 0
|
||||||
m_Script: {fileID: 11500000, guid: 9055f72a604bc3f4ba01bc120f0643d2, type: 3}
|
m_Script: {fileID: 11500000, guid: 9055f72a604bc3f4ba01bc120f0643d2, type: 3}
|
||||||
m_Name: PlayerData
|
m_Name: PlayerData
|
||||||
@ -15,4 +15,6 @@ MonoBehaviour:
|
|||||||
<InvincibilityTime>k__BackingField: 600
|
<InvincibilityTime>k__BackingField: 600
|
||||||
<JumpHeight>k__BackingField: 6
|
<JumpHeight>k__BackingField: 6
|
||||||
<LaneSwitchSpeed>k__BackingField: 20
|
<LaneSwitchSpeed>k__BackingField: 20
|
||||||
<Speed>k__BackingField: 10
|
<InitialSpeed>k__BackingField: 10
|
||||||
|
<CurrentSpeed>k__BackingField: 401.62177
|
||||||
|
<SpeedAcceleration>k__BackingField: 1
|
||||||
|
@ -1,13 +1,39 @@
|
|||||||
using System.Collections;
|
using System;
|
||||||
|
using System.Collections;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
[CreateAssetMenu(fileName = "PlayerData", menuName = "ScriptableObjects/Player")]
|
[CreateAssetMenu(fileName = "PlayerData", menuName = "ScriptableObjects/Player")]
|
||||||
public class PlayerData : ScriptableObject
|
public sealed class PlayerData : ScriptableObject
|
||||||
{
|
{
|
||||||
[field: SerializeField] public int InvincibilityTime { get; private set; }
|
// Serialize Fields
|
||||||
|
[field: SerializeField] public int InvincibilityTime { get; private set; }
|
||||||
[field: SerializeField] public float JumpHeight { get; private set; }
|
[field: SerializeField] public float JumpHeight { get; private set; }
|
||||||
[field: SerializeField] public float LaneSwitchSpeed { get; private set; }
|
[field: SerializeField] public float LaneSwitchSpeed { get; private set; }
|
||||||
[field: SerializeField] public float InitialSpeed { get; private set; }
|
[field: SerializeField] public float InitialSpeed { get; private set; }
|
||||||
|
[field: SerializeField] public float CurrentSpeed { get; internal set; }
|
||||||
[field: SerializeField] public float SpeedAcceleration { get; private set; }
|
[field: SerializeField] public float SpeedAcceleration { get; private set; }
|
||||||
[field: SerializeField] public float CurrentSpeed { get; set; }
|
|
||||||
|
// Other attributes
|
||||||
|
private bool onPause = false;
|
||||||
|
|
||||||
|
private void Awake()
|
||||||
|
{
|
||||||
|
CurrentSpeed = InitialSpeed;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Reset()
|
||||||
|
{
|
||||||
|
CurrentSpeed = InitialSpeed;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Update()
|
||||||
|
{
|
||||||
|
if (!onPause)
|
||||||
|
CurrentSpeed += SpeedAcceleration / 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void isPaused(bool isPaused)
|
||||||
|
{
|
||||||
|
onPause = isPaused;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -36,11 +36,11 @@ public class FollowingCamera : MonoBehaviour
|
|||||||
Vector3 moveVector = new Vector3(target.position.x, target.position.y, target.position.z);
|
Vector3 moveVector = new Vector3(target.position.x, target.position.y, target.position.z);
|
||||||
//Quaternion rotationVector = Quaternion.Euler(target.rotation.y, target.rotation.y, defaultTargetRotation.z);
|
//Quaternion rotationVector = Quaternion.Euler(target.rotation.y, target.rotation.y, defaultTargetRotation.z);
|
||||||
//float curveX = GameSession.Instance.Curver.CurveStrengthX;
|
//float curveX = GameSession.Instance.Curver.CurveStrengthX;
|
||||||
//camTransform.rotation = target.rotation;
|
camTransform.rotation = target.rotation;
|
||||||
Vector3 toPos = moveVector + (target.rotation * defaultDistance);
|
Vector3 toPos = moveVector + (target.rotation * defaultDistance);
|
||||||
//Vector3 toPos = target.position + (target.rotation * defaultDistance);
|
//Vector3 toPos = target.position + (target.rotation * defaultDistance);
|
||||||
Vector3 curPos = Vector3.SmoothDamp(camTransform.position, toPos, ref velocity, distanceDamp);
|
Vector3 curPos = Vector3.SmoothDamp(camTransform.position, toPos, ref velocity, distanceDamp);
|
||||||
camTransform.position = curPos;
|
camTransform.position = curPos;
|
||||||
camTransform.LookAt(camTransform, target.up);
|
camTransform.LookAt(target, target.up);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ using UnityEngine;
|
|||||||
public class Coin : PoolingObject<Coin>, ICollectable,IResettable
|
public class Coin : PoolingObject<Coin>, ICollectable,IResettable
|
||||||
{
|
{
|
||||||
[SerializeField] private int coinValue;
|
[SerializeField] private int coinValue;
|
||||||
|
public int CoinValue => coinValue;
|
||||||
|
|
||||||
private SinAnimator sinAnimator;
|
private SinAnimator sinAnimator;
|
||||||
public Renderer Renderer { get; private set; }
|
public Renderer Renderer { get; private set; }
|
||||||
@ -23,7 +24,9 @@ public class Coin : PoolingObject<Coin>, ICollectable,IResettable
|
|||||||
gameObject.SetActive(false);
|
gameObject.SetActive(false);
|
||||||
OnCoinCollected?.Invoke(coinValue);
|
OnCoinCollected?.Invoke(coinValue);
|
||||||
OnCoinDissapeared?.Invoke(this);
|
OnCoinDissapeared?.Invoke(this);
|
||||||
|
ReturnToPool();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateStartPositionForSinAnimator()
|
public void UpdateStartPositionForSinAnimator()
|
||||||
{
|
{
|
||||||
sinAnimator.UpdateStartPosition();
|
sinAnimator.UpdateStartPosition();
|
||||||
|
9
Assets/Scripts/GameSession/GameResult.cs
Normal file
9
Assets/Scripts/GameSession/GameResult.cs
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
namespace Assets.Scripts.GameSession
|
||||||
|
{
|
||||||
|
public class GameResult
|
||||||
|
{
|
||||||
|
public static string MatchResult { get; set; }
|
||||||
|
public static int score { get; set; }
|
||||||
|
public static int coinsEarned { get; set; }
|
||||||
|
}
|
||||||
|
}
|
3
Assets/Scripts/GameSession/GameResult.cs.meta
Normal file
3
Assets/Scripts/GameSession/GameResult.cs.meta
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 2ccf940b8a6f4771951a3760a7865928
|
||||||
|
timeCreated: 1739468701
|
@ -1,20 +1,26 @@
|
|||||||
using System.Collections;
|
using System;
|
||||||
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Assets.Scripts.GameSession;
|
||||||
|
using JetBrains.Annotations;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.SceneManagement;
|
using UnityEngine.SceneManagement;
|
||||||
|
|
||||||
[RequireComponent(typeof(WorldCurver))]
|
[RequireComponent(typeof(WorldCurver))]
|
||||||
public class GameSession : MonoBehaviour,IResettable
|
public class GameSession : MonoBehaviour,IResettable
|
||||||
{
|
{
|
||||||
[SerializeField] private Player currentPlayer;
|
[SerializeField] private Player player1;
|
||||||
|
[SerializeField] [CanBeNull] private Player player2;
|
||||||
[SerializeField] private Scoreboard scoreboard;
|
[SerializeField] private Scoreboard scoreboard;
|
||||||
public static GameSession Instance { get; private set; }
|
[SerializeField] private bool isDuoMode;
|
||||||
public WorldCurver Curver { get; private set; }
|
[SerializeField] private PlayerData playerData;
|
||||||
private IInputTranslator inputTranslator;
|
public static GameSession Instance { get; private set; }
|
||||||
|
private WorldCurver Curver { get; set; }
|
||||||
private bool isSessionPaused = false;
|
private IInputTranslator _player1InputTranslator;
|
||||||
private float speedAtPause;
|
private IInputTranslator _player2InputTranslator;
|
||||||
private bool isInputAlreadyRestricted = false;
|
private bool _isSessionPaused = false;
|
||||||
|
private bool _isInputAlreadyRestricted = false;
|
||||||
|
private float _speedAtPause;
|
||||||
|
|
||||||
private void Awake()
|
private void Awake()
|
||||||
{
|
{
|
||||||
@ -32,57 +38,59 @@ public class GameSession : MonoBehaviour,IResettable
|
|||||||
}
|
}
|
||||||
private void Update()
|
private void Update()
|
||||||
{
|
{
|
||||||
inputTranslator.Tick();
|
playerData.Update();
|
||||||
|
_player1InputTranslator.Tick();
|
||||||
|
if (isDuoMode)
|
||||||
|
{
|
||||||
|
_player2InputTranslator.Tick();
|
||||||
|
}
|
||||||
|
|
||||||
Curver.Tick();
|
Curver.Tick();
|
||||||
// curver.SinCurveX();
|
// curver.SinCurveX();
|
||||||
// Curver.SinCurveY();
|
// Curver.SinCurveY();
|
||||||
//Curver.TurnWorldToLeft();
|
//Curver.TurnWorldToLeft();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Init()
|
private void Init()
|
||||||
{
|
{
|
||||||
if (ApplicationUtil.platform == RuntimePlatform.Android || ApplicationUtil.platform == RuntimePlatform.IPhonePlayer)
|
var player1Holder = new KeyBindingHolder();
|
||||||
{
|
player1Holder.Init(false);
|
||||||
IBindingHolder<TouchBinding> touchHolder = new TouchBindingHolder();
|
_player1InputTranslator = new InputTranslator<KeyBinding>(player1Holder, false);
|
||||||
inputTranslator = new InputTranslator<TouchBinding>(touchHolder);
|
var player2Holder = new KeyBindingHolder();
|
||||||
}
|
player2Holder.Init(true);
|
||||||
else
|
_player2InputTranslator = new InputTranslator<KeyBinding>(player2Holder, true);
|
||||||
{
|
|
||||||
IBindingHolder<KeyBinding> keyHolder = new KeyBindingHolder();
|
playerData.Reset();
|
||||||
inputTranslator = new InputTranslator<KeyBinding>(keyHolder);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddCommandTranslator(ICommandTranslator translator)
|
public void AddCommandTranslator(ICommandTranslator translator, bool isPlayer2)
|
||||||
{
|
{
|
||||||
inputTranslator.AddCommandTranslator(translator);
|
if (isPlayer2)
|
||||||
|
{
|
||||||
|
_player2InputTranslator.AddCommandTranslator(translator);
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
_player1InputTranslator.AddCommandTranslator(translator);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void PauseSession(bool isPaused)
|
public void PauseSession(bool isPaused)
|
||||||
{
|
{
|
||||||
|
playerData.isPaused(isPaused);
|
||||||
// Save the speed before pausing the game and restore it while the game resume
|
|
||||||
if (isPaused)
|
|
||||||
{
|
|
||||||
speedAtPause = currentPlayer.PlayerData.CurrentSpeed;
|
|
||||||
}else{
|
|
||||||
currentPlayer.PlayerData.CurrentSpeed = speedAtPause;
|
|
||||||
}
|
|
||||||
|
|
||||||
Time.timeScale = isPaused ? 0 : 1;
|
Time.timeScale = isPaused ? 0 : 1;
|
||||||
if (!isSessionPaused && inputTranslator.IsTranslationResticted(InputConstants.InGameCommands))
|
if (!_isSessionPaused && _player1InputTranslator.IsTranslationResticted(InputConstants.InGameCommands) && _player2InputTranslator.IsTranslationResticted(InputConstants.InGameCommands) )
|
||||||
{
|
{
|
||||||
isInputAlreadyRestricted = true;
|
_isInputAlreadyRestricted = true;
|
||||||
isSessionPaused = isPaused;
|
_isSessionPaused = isPaused;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!inputTranslator.IsTranslationResticted(InputConstants.InGameCommands))
|
if (!_player1InputTranslator.IsTranslationResticted(InputConstants.InGameCommands) && !_player2InputTranslator.IsTranslationResticted(InputConstants.InGameCommands))
|
||||||
{
|
{
|
||||||
isInputAlreadyRestricted = false;
|
_isInputAlreadyRestricted = false;
|
||||||
}
|
}
|
||||||
isSessionPaused = isPaused;
|
_isSessionPaused = isPaused;
|
||||||
if (isInputAlreadyRestricted)
|
if (_isInputAlreadyRestricted)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -91,52 +99,99 @@ public class GameSession : MonoBehaviour,IResettable
|
|||||||
|
|
||||||
public void RestrictInputs(List<ECommand> commands,bool isRestricted)
|
public void RestrictInputs(List<ECommand> commands,bool isRestricted)
|
||||||
{
|
{
|
||||||
inputTranslator.RestictTranslation(commands, isRestricted);
|
_player1InputTranslator.RestictTranslation(commands, isRestricted);
|
||||||
|
if (isDuoMode)
|
||||||
|
{
|
||||||
|
_player2InputTranslator.RestictTranslation(commands, isRestricted);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateScoreboard(ScoreboardEntry entry)
|
public void UpdateScoreboard(ScoreboardEntry entry)
|
||||||
{
|
{
|
||||||
scoreboard.AddScoreboardEntry(entry);
|
scoreboard.AddScoreboardEntry(entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool isCheckingEquality = false;
|
||||||
|
|
||||||
public void GoToGameScene()
|
public void HandlePlayerDeath(Player deadPlayer)
|
||||||
{
|
{
|
||||||
StartCoroutine(LoadGameSceneAsync());
|
if (isDuoMode)
|
||||||
|
{
|
||||||
|
if (isCheckingEquality) return;
|
||||||
|
|
||||||
|
isCheckingEquality = true;
|
||||||
|
StartCoroutine(CheckForEquality(deadPlayer));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
GameResult.score = player1.PlayerStatictics.Score;
|
||||||
|
GameResult.coinsEarned = player1.PlayerStatictics.coinCount;
|
||||||
|
SceneManager.LoadScene("DeathScreen");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private IEnumerator LoadGameSceneAsync()
|
private IEnumerator CheckForEquality(Player deadPlayer)
|
||||||
{
|
{
|
||||||
AsyncOperation asyncLoad = SceneManager.LoadSceneAsync("GameScene", LoadSceneMode.Single);
|
yield return new WaitForSeconds(0.3f);
|
||||||
asyncLoad.allowSceneActivation = false;
|
|
||||||
|
|
||||||
while (!asyncLoad.isDone)
|
if (player1.isDead && player2.isDead)
|
||||||
{
|
{
|
||||||
// Indiquer la progression de chargement (0 à 0.9)
|
SendResultToDeathScreen1VS1("DRAW");
|
||||||
float progress = Mathf.Clamp01(asyncLoad.progress / 0.9f);
|
}
|
||||||
Debug.Log($"Loading progress: {progress * 100}%");
|
else if (player1.isDead)
|
||||||
|
{
|
||||||
|
SendResultToDeathScreen1VS1("PLAYER2");
|
||||||
|
}
|
||||||
|
else if (player2.isDead)
|
||||||
|
{
|
||||||
|
SendResultToDeathScreen1VS1("PLAYER1");
|
||||||
|
}
|
||||||
|
|
||||||
// Activer la scène lorsqu'elle est prête
|
isCheckingEquality = false;
|
||||||
if (asyncLoad.progress >= 0.9f)
|
}
|
||||||
{
|
|
||||||
asyncLoad.allowSceneActivation = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
yield return null;
|
private void SendResultToDeathScreen1VS1(string result)
|
||||||
|
{
|
||||||
|
//MatchResult = result;
|
||||||
|
GameResult.score = player1.PlayerStatictics.Score;
|
||||||
|
GameResult.coinsEarned = player1.PlayerStatictics.coinCount;
|
||||||
|
GameResult.MatchResult = result;
|
||||||
|
SceneManager.LoadScene("DeathScreen1VS1");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void PausePlayAgain()
|
||||||
|
{
|
||||||
|
if (isDuoMode)
|
||||||
|
{
|
||||||
|
GoToScene.GoToDuoMode();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
GoToScene.GoToSoloMode();
|
||||||
}
|
}
|
||||||
ResetToDefault();
|
ResetToDefault();
|
||||||
}
|
}
|
||||||
|
public void PauseBackToMainMenu()
|
||||||
|
|
||||||
public void GoToMainMenu()
|
|
||||||
{
|
{
|
||||||
SceneManager.LoadScene("MainMenu", LoadSceneMode.Single);
|
GoToScene.GoToMainMenu();
|
||||||
ResetToDefault();
|
ResetToDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ResetToDefault()
|
public void ResetToDefault()
|
||||||
{
|
{
|
||||||
PauseSession(false);
|
PauseSession(false);
|
||||||
if(currentPlayer !=null)
|
playerData.Reset();
|
||||||
currentPlayer.ResetToDefault();
|
if(player1 !=null)
|
||||||
|
player1.ResetToDefault();
|
||||||
|
if (isDuoMode && player2 != null)
|
||||||
|
{
|
||||||
|
player2.ResetToDefault();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public PlayerData GetPlayerData()
|
||||||
|
{
|
||||||
|
return this.playerData;
|
||||||
}
|
}
|
||||||
}
|
}
|
38
Assets/Scripts/GameSession/GoToScene.cs
Normal file
38
Assets/Scripts/GameSession/GoToScene.cs
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.SceneManagement;
|
||||||
|
|
||||||
|
namespace Assets.Scripts.GameSession
|
||||||
|
{
|
||||||
|
public class GoToScene : MonoBehaviour
|
||||||
|
{
|
||||||
|
public static void GoToSoloMode()
|
||||||
|
{
|
||||||
|
SceneManager.LoadScene("SoloGameScene", LoadSceneMode.Single);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void GoToDuoMode()
|
||||||
|
{
|
||||||
|
SceneManager.LoadScene("DuoGameScene", LoadSceneMode.Single);
|
||||||
|
}
|
||||||
|
public static void GoToMainMenu()
|
||||||
|
{
|
||||||
|
SceneManager.LoadScene("MainMenu", LoadSceneMode.Single);
|
||||||
|
}
|
||||||
|
public static void GoToDeathScreenSolo()
|
||||||
|
{
|
||||||
|
SceneManager.LoadScene("DeathScreen", LoadSceneMode.Single);
|
||||||
|
}
|
||||||
|
public static void GoToDeathScreen1VS1()
|
||||||
|
{
|
||||||
|
SceneManager.LoadScene("DeathScreen1VS1", LoadSceneMode.Single);
|
||||||
|
}
|
||||||
|
public static void GoToSkinMenuPlayer1()
|
||||||
|
{
|
||||||
|
SceneManager.LoadScene("SkinMenuPlayer1", LoadSceneMode.Single);
|
||||||
|
}
|
||||||
|
public static void GoToSkinMenuPlayer2()
|
||||||
|
{
|
||||||
|
SceneManager.LoadScene("SkinMenuPlayer2", LoadSceneMode.Single);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
3
Assets/Scripts/GameSession/GoToScene.cs.meta
Normal file
3
Assets/Scripts/GameSession/GoToScene.cs.meta
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 90560e670cf9430d920225316b227914
|
||||||
|
timeCreated: 1736947730
|
@ -8,6 +8,6 @@ using System.Threading.Tasks;
|
|||||||
public interface IBindingHolder<T> where T : IBinding
|
public interface IBindingHolder<T> where T : IBinding
|
||||||
{
|
{
|
||||||
public Dictionary<ECommand, T> InputBindings { get; }
|
public Dictionary<ECommand, T> InputBindings { get; }
|
||||||
public void Init();
|
public void Init(Boolean isPlayer2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using System.Collections;
|
using System;
|
||||||
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
@ -10,17 +11,32 @@ public class KeyBindingHolder : IBindingHolder<KeyBinding>
|
|||||||
private readonly Dictionary<ECommand, KeyBinding> DefaultKeyBindings = new Dictionary<ECommand, KeyBinding>
|
private readonly Dictionary<ECommand, KeyBinding> DefaultKeyBindings = new Dictionary<ECommand, KeyBinding>
|
||||||
{
|
{
|
||||||
{ECommand.NONE, new KeyBinding(KeyCode.None)},
|
{ECommand.NONE, new KeyBinding(KeyCode.None)},
|
||||||
{ECommand.DOWN, new KeyBinding(KeyCode.DownArrow,KeyCode.S)},
|
{ECommand.DOWN, new KeyBinding(KeyCode.DownArrow)},
|
||||||
{ECommand.UP, new KeyBinding(KeyCode.UpArrow,KeyCode.W)},
|
{ECommand.UP, new KeyBinding(KeyCode.UpArrow)},
|
||||||
{ECommand.LEFT, new KeyBinding(KeyCode.LeftArrow,KeyCode.A)},
|
{ECommand.LEFT, new KeyBinding(KeyCode.LeftArrow)},
|
||||||
{ECommand.RIGHT, new KeyBinding(KeyCode.RightArrow,KeyCode.D)},
|
{ECommand.RIGHT, new KeyBinding(KeyCode.RightArrow)},
|
||||||
{ECommand.OPEN_SCOREBOARD, new KeyBinding(KeyCode.Tab)},
|
{ECommand.OPEN_SCOREBOARD, new KeyBinding(KeyCode.Tab)},
|
||||||
{ECommand.OPEN_PAUSE_MENU, new KeyBinding(KeyCode.Escape)}
|
{ECommand.OPEN_PAUSE_MENU, new KeyBinding(KeyCode.Escape)}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private readonly Dictionary<ECommand, KeyBinding> Player2KeyBindings = new Dictionary<ECommand, KeyBinding>
|
||||||
|
{
|
||||||
|
{ECommand.DOWN2, new KeyBinding(KeyCode.S)},
|
||||||
|
{ECommand.UP2, new KeyBinding(KeyCode.Z)},
|
||||||
|
{ECommand.LEFT2, new KeyBinding(KeyCode.Q)},
|
||||||
|
{ECommand.RIGHT2, new KeyBinding(KeyCode.D)},
|
||||||
|
};
|
||||||
|
|
||||||
public void Init()
|
public void Init(Boolean isPlayer2)
|
||||||
{
|
{
|
||||||
if (InputBindings == null)
|
if (InputBindings == null)
|
||||||
InputBindings = DefaultKeyBindings;
|
if (isPlayer2)
|
||||||
|
{
|
||||||
|
InputBindings = Player2KeyBindings;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
InputBindings = DefaultKeyBindings;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,24 +0,0 @@
|
|||||||
using System.Collections;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using UnityEngine;
|
|
||||||
|
|
||||||
|
|
||||||
public class TouchBindingHolder : IBindingHolder<TouchBinding>
|
|
||||||
{
|
|
||||||
public Dictionary<ECommand, TouchBinding> InputBindings { get; private set; }
|
|
||||||
|
|
||||||
private readonly Dictionary<ECommand, TouchBinding> DefaultTouchBindings = new Dictionary<ECommand, TouchBinding>
|
|
||||||
{
|
|
||||||
{ECommand.NONE, new TouchBinding(ETouchGesture.NONE)},
|
|
||||||
{ECommand.DOWN, new TouchBinding(ETouchGesture.SWIPE_DOWN)},
|
|
||||||
{ECommand.UP, new TouchBinding(ETouchGesture.SWIPE_UP)},
|
|
||||||
{ECommand.LEFT, new TouchBinding(ETouchGesture.SWIPE_LEFT)},
|
|
||||||
{ECommand.RIGHT, new TouchBinding(ETouchGesture.SWIPE_RIGHT)},
|
|
||||||
};
|
|
||||||
|
|
||||||
public void Init()
|
|
||||||
{
|
|
||||||
if (InputBindings == null)
|
|
||||||
InputBindings = DefaultTouchBindings;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,11 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 23353de203a94c447af7be38973acc1d
|
|
||||||
MonoImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
serializedVersion: 2
|
|
||||||
defaultReferences: []
|
|
||||||
executionOrder: 0
|
|
||||||
icon: {instanceID: 0}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
@ -1,6 +1,7 @@
|
|||||||
|
|
||||||
public enum ECommand
|
public enum ECommand
|
||||||
{
|
{
|
||||||
|
#region Player1
|
||||||
NONE = 0,
|
NONE = 0,
|
||||||
LEFT = 1,
|
LEFT = 1,
|
||||||
RIGHT = 2,
|
RIGHT = 2,
|
||||||
@ -8,5 +9,17 @@ public enum ECommand
|
|||||||
DOWN = 4,
|
DOWN = 4,
|
||||||
OPEN_SCOREBOARD = 5,
|
OPEN_SCOREBOARD = 5,
|
||||||
SHOOT = 6,
|
SHOOT = 6,
|
||||||
OPEN_PAUSE_MENU = 7
|
OPEN_PAUSE_MENU = 7,
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Player2
|
||||||
|
LEFT2 = 8,
|
||||||
|
RIGHT2 = 9,
|
||||||
|
UP2 = 10,
|
||||||
|
DOWN2 = 11,
|
||||||
|
OPEN_SCOREBOARD2 = 12,
|
||||||
|
SHOOT2 = 13,
|
||||||
|
OPEN_PAUSE_MENU2 = 14
|
||||||
|
#endregion
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
|
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
public interface IInputTranslator
|
public interface IInputTranslator
|
||||||
@ -17,11 +18,11 @@ public class InputTranslator<T> : IInputTranslator where T : IBinding
|
|||||||
private List<ICommandTranslator> commandTranslators;
|
private List<ICommandTranslator> commandTranslators;
|
||||||
private IBindingHolder<T> bindingHolder;
|
private IBindingHolder<T> bindingHolder;
|
||||||
|
|
||||||
public InputTranslator(IBindingHolder<T> holder)
|
public InputTranslator(IBindingHolder<T> holder, Boolean isPlayer2)
|
||||||
{
|
{
|
||||||
commandTranslators = new List<ICommandTranslator>();
|
commandTranslators = new List<ICommandTranslator>();
|
||||||
bindingHolder = holder;
|
bindingHolder = holder;
|
||||||
bindingHolder.Init();
|
bindingHolder.Init(isPlayer2);
|
||||||
}
|
}
|
||||||
//public void Init(IBindingHolder<T> holder)
|
//public void Init(IBindingHolder<T> holder)
|
||||||
//{
|
//{
|
||||||
|
@ -1,33 +1,36 @@
|
|||||||
using System.Collections;
|
using Pools;
|
||||||
using System.Collections.Generic;
|
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
[RequireComponent(typeof(BoxCollider))]
|
namespace Obstacles
|
||||||
public class Obstacle : PoolingObject<Obstacle>, IObstacle,IDamageDealer,IResettable
|
|
||||||
{
|
{
|
||||||
[field: SerializeField] public bool IsOnAllLanes { get; private set; }
|
[RequireComponent(typeof(BoxCollider))]
|
||||||
[field: SerializeField] public bool IsInevitable { get; private set; }
|
public class Obstacle : PoolingObject<Obstacle>, IObstacle,IDamageDealer,IResettable
|
||||||
public BoxCollider Collider { get; private set; }
|
{
|
||||||
|
[field: SerializeField] public bool IsOnAllLanes { get; private set; }
|
||||||
|
[field: SerializeField] public bool IsInevitable { get; private set; }
|
||||||
|
public BoxCollider Collider { get; private set; }
|
||||||
|
|
||||||
private void Awake()
|
private void Awake()
|
||||||
{
|
{
|
||||||
Collider = GetComponent<BoxCollider>();
|
Collider = GetComponent<BoxCollider>();
|
||||||
}
|
OwningPool = FindFirstObjectByType<ObstaclePool>();
|
||||||
public void ResetToDefault()
|
}
|
||||||
{
|
public void ResetToDefault()
|
||||||
transform.localPosition = Vector3.zero;
|
{
|
||||||
transform.position = Vector3.zero;
|
transform.localPosition = Vector3.zero;
|
||||||
transform.rotation = Quaternion.identity;
|
transform.position = Vector3.zero;
|
||||||
gameObject.transform.SetParent(OwningPool.transform);
|
transform.rotation = Quaternion.identity;
|
||||||
ReturnToPool();
|
gameObject.transform.SetParent(OwningPool.transform);
|
||||||
}
|
ReturnToPool();
|
||||||
public void Impact()
|
}
|
||||||
{
|
public void Impact()
|
||||||
ResetToDefault();
|
{
|
||||||
}
|
ResetToDefault();
|
||||||
|
}
|
||||||
|
|
||||||
public void DealDamage(IDamageable target, int amount)
|
public void DealDamage(IDamageable target, int amount)
|
||||||
{
|
{
|
||||||
target.TakeDamage(amount);
|
target.TakeDamage(amount);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@ public class Pause : MonoBehaviour,ICommandTranslator
|
|||||||
{
|
{
|
||||||
private void Start()
|
private void Start()
|
||||||
{
|
{
|
||||||
GameSession.Instance.AddCommandTranslator(this);
|
GameSession.Instance.AddCommandTranslator(this, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TranslateCommand(ECommand command, PressedState state)
|
public void TranslateCommand(ECommand command, PressedState state)
|
||||||
|
@ -41,7 +41,8 @@ public class Health : MonoBehaviour, IDamageable,IHealable, IResettable
|
|||||||
}
|
}
|
||||||
public void TakeDamage(int amount)
|
public void TakeDamage(int amount)
|
||||||
{
|
{
|
||||||
if (CurrentHealth > 0){
|
if (CurrentHealth > 0)
|
||||||
|
{
|
||||||
CurrentHealth -= amount;
|
CurrentHealth -= amount;
|
||||||
if (CurrentHealth <= 0){
|
if (CurrentHealth <= 0){
|
||||||
CurrentHealth = 0;
|
CurrentHealth = 0;
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.SceneManagement;
|
using UnityEngine.SceneManagement;
|
||||||
|
using UnityEngine.Serialization;
|
||||||
|
|
||||||
|
|
||||||
[RequireComponent(typeof(CharacterController))]
|
[RequireComponent(typeof(CharacterController))]
|
||||||
@ -8,7 +10,7 @@ using UnityEngine.SceneManagement;
|
|||||||
[RequireComponent(typeof(Health))]
|
[RequireComponent(typeof(Health))]
|
||||||
[RequireComponent(typeof(Statistics))]
|
[RequireComponent(typeof(Statistics))]
|
||||||
|
|
||||||
public class Player : MonoBehaviour,IResettable, ICommandTranslator
|
public class Player : MonoBehaviour, IResettable, ICommandTranslator
|
||||||
{
|
{
|
||||||
#region StateMachine
|
#region StateMachine
|
||||||
|
|
||||||
@ -20,85 +22,114 @@ public class Player : MonoBehaviour,IResettable, ICommandTranslator
|
|||||||
|
|
||||||
private Animator animator;
|
private Animator animator;
|
||||||
[SerializeField] private AnimationCurve jumpDeltaYCurve;
|
[SerializeField] private AnimationCurve jumpDeltaYCurve;
|
||||||
public AnimationCurve JumpDeltaYCurve { get { return jumpDeltaYCurve; } }
|
|
||||||
public PlayerAnimator PlayerAnimator { get; private set; }
|
public AnimationCurve JumpDeltaYCurve
|
||||||
|
{
|
||||||
|
get { return jumpDeltaYCurve; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public PlayerAnimator PlayerAnimator { get; private set; }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region PlayerComponents
|
#region PlayerComponents
|
||||||
|
|
||||||
[SerializeField] private PlayerData playerData;
|
[SerializeField] internal PlayerData playerData;
|
||||||
|
|
||||||
public IDamageable PlayerHealth { get; private set; }
|
public IDamageable PlayerHealth { get; private set; }
|
||||||
public Statistics PlayerStatictics { get; private set; }
|
public Statistics PlayerStatictics { get; private set; }
|
||||||
public PlayerData PlayerData { get { return playerData; } }
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region MovementControl
|
#region MovementControl
|
||||||
|
|
||||||
[SerializeField] private LaneSystem laneSystem;
|
[SerializeField] private LaneSystem laneSystem;
|
||||||
public LaneSystem LaneSystem { get { return laneSystem; } private set { laneSystem = value; } }
|
|
||||||
|
public LaneSystem LaneSystem
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return laneSystem;
|
||||||
|
}
|
||||||
|
private set
|
||||||
|
{
|
||||||
|
laneSystem = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public CharacterController CharacterController { get; private set; }
|
public CharacterController CharacterController { get; private set; }
|
||||||
public PlayerCollider PlayerCollider { get; private set; }
|
public PlayerCollider PlayerCollider { get; private set; }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Sounds
|
||||||
|
public AudioSource JumpSound;
|
||||||
|
#endregion
|
||||||
|
|
||||||
public bool IsInvincible { get; private set; }
|
public bool IsInvincible { get; private set; }
|
||||||
public float InvincibilityTime { get; private set; } //PLAYER DATA ScriptableObject
|
public float InvincibilityTime { get; private set; } //PLAYER DATA ScriptableObject
|
||||||
|
[SerializeField] private Boolean isPlayer2;
|
||||||
|
[SerializeField] private Boolean isPlaying1VS1;
|
||||||
|
public bool isDead = false;
|
||||||
|
|
||||||
private void Awake()
|
private void Awake()
|
||||||
{
|
{
|
||||||
GameSession.Instance.AddCommandTranslator(this);
|
playerData = GameSession.Instance.GetPlayerData();
|
||||||
|
Debug.Log("Player Awake : " + this);
|
||||||
|
GameSession.Instance.AddCommandTranslator(this, isPlayer2);
|
||||||
animator = GetComponent<Animator>();
|
animator = GetComponent<Animator>();
|
||||||
if (animator)
|
if (animator)
|
||||||
PlayerAnimator = new PlayerAnimator(animator);
|
PlayerAnimator = new PlayerAnimator(animator);
|
||||||
CharacterController = GetComponent<CharacterController>();
|
CharacterController = GetComponent<CharacterController>();
|
||||||
PlayerCollider = new PlayerCollider(CharacterController);
|
PlayerCollider = new PlayerCollider(CharacterController);
|
||||||
PlayerHealth = GetComponent<IDamageable>();
|
PlayerHealth = GetComponent<IDamageable>();
|
||||||
PlayerStatictics = GetComponent<Statistics>();
|
PlayerStatictics = GetComponent<Statistics>();
|
||||||
PlayerStateMachine = new PlayerStateMachine(this);
|
PlayerStateMachine = new PlayerStateMachine(this);
|
||||||
InvincibilityTime = playerData.InvincibilityTime;
|
InvincibilityTime = playerData.InvincibilityTime;
|
||||||
}
|
playerData.CurrentSpeed = playerData.InitialSpeed;
|
||||||
|
Debug.Log("Player Awake END");
|
||||||
|
}
|
||||||
|
|
||||||
private void OnEnable()
|
private void OnEnable()
|
||||||
{
|
{
|
||||||
PlayerHealth.OnOutOfHealth += Die;
|
PlayerHealth.OnOutOfHealth += Die;
|
||||||
}
|
}
|
||||||
// private void OnDisable()
|
|
||||||
// {
|
|
||||||
// PlayerHealth.OnOutOfHealth -= Die;
|
|
||||||
// }
|
|
||||||
private void Start()
|
private void Start()
|
||||||
{
|
{
|
||||||
PlayerStateMachine.SetState(PlayerStateMachine.PlayerStartingIdleState);
|
PlayerStateMachine.SetState(PlayerStateMachine.PlayerStartingIdleState);
|
||||||
|
JumpSound.GetComponent<AudioSource>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void Update()
|
private void Update()
|
||||||
{
|
{
|
||||||
playerData.CurrentSpeed += playerData.SpeedAcceleration / 100;
|
playerData.CurrentSpeed += playerData.SpeedAcceleration / 1000;
|
||||||
// Add smthg to manage the animator speed
|
|
||||||
PlayerStateMachine.Tick();
|
PlayerStateMachine.Tick();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void FixedUpdate()
|
private void FixedUpdate()
|
||||||
{
|
{
|
||||||
PlayerStateMachine.FixedTick();
|
PlayerStateMachine.FixedTick();
|
||||||
}
|
}
|
||||||
|
|
||||||
public float PendingAdditionalOffset { get; private set; }
|
public float PendingAdditionalOffset { get; private set; }
|
||||||
private void OnTriggerEnter(Collider other)
|
|
||||||
|
private void OnTriggerEnter(Collider other)
|
||||||
{
|
{
|
||||||
if (other.TryGetComponent(out IDamageDealer damageDealer)) //switch..case
|
if (other.TryGetComponent(out IDamageDealer damageDealer)) //switch..case
|
||||||
{
|
{
|
||||||
if (IsInvincible)
|
if (IsInvincible)
|
||||||
return;
|
return;
|
||||||
int damageAmount = 1;
|
int damageAmount = 1;
|
||||||
var damageableComponents = GetComponents<IDamageable>();
|
var damageableComponents = GetComponents<IDamageable>();
|
||||||
foreach (var component in damageableComponents)
|
foreach (var component in damageableComponents)
|
||||||
{
|
{
|
||||||
damageDealer.DealDamage(component, damageAmount);
|
damageDealer.DealDamage(component, damageAmount);
|
||||||
}
|
}
|
||||||
|
|
||||||
StartCoroutine(GrantInvincibility());
|
StartCoroutine(GrantInvincibility());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (other.TryGetComponent(out IObstacle obstacle)) //switch..case
|
if (other.TryGetComponent(out IObstacle obstacle)) //switch..case
|
||||||
{
|
{
|
||||||
obstacle.Impact();
|
obstacle.Impact();
|
||||||
@ -106,16 +137,21 @@ public class Player : MonoBehaviour,IResettable, ICommandTranslator
|
|||||||
else if (other.TryGetComponent(out ICollectable collectable))
|
else if (other.TryGetComponent(out ICollectable collectable))
|
||||||
{
|
{
|
||||||
collectable.Collect();
|
collectable.Collect();
|
||||||
|
|
||||||
|
if (other.TryGetComponent(out Coin coin))
|
||||||
|
{
|
||||||
|
PlayerStatictics.AddScore(coin.CoinValue);
|
||||||
|
coin.gameObject.SetActive(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Die()
|
private void Die()
|
||||||
{
|
{
|
||||||
PlayerData.CurrentSpeed = PlayerData.InitialSpeed;
|
isDead = true;
|
||||||
PlayerStateMachine.SetState(PlayerStateMachine.PlayerDeadState);
|
PlayerStateMachine.SetState(PlayerStateMachine.PlayerDeadState);
|
||||||
GameSession.Instance.UpdateScoreboard(new ScoreboardEntry(name,PlayerStatictics.Score));
|
GameSession.Instance.UpdateScoreboard(new ScoreboardEntry(name, PlayerStatictics.Score));
|
||||||
|
GameSession.Instance.HandlePlayerDeath(this); // Informe GameSession qu'un joueur est mort
|
||||||
SceneManager.LoadScene("DeathScreen");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerator GrantInvincibility()
|
public IEnumerator GrantInvincibility()
|
||||||
@ -124,19 +160,21 @@ public class Player : MonoBehaviour,IResettable, ICommandTranslator
|
|||||||
yield return new WaitForSeconds(InvincibilityTime);
|
yield return new WaitForSeconds(InvincibilityTime);
|
||||||
IsInvincible = false;
|
IsInvincible = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ReloadAnimator()
|
private void ReloadAnimator()
|
||||||
{
|
{
|
||||||
if (animator)
|
if (animator)
|
||||||
PlayerAnimator = new PlayerAnimator(animator);
|
PlayerAnimator = new PlayerAnimator(animator);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ResetToDefault()
|
public void ResetToDefault()
|
||||||
{
|
{
|
||||||
PlayerData.CurrentSpeed = PlayerData.InitialSpeed;
|
|
||||||
PlayerStateMachine.SetState(null);
|
PlayerStateMachine.SetState(null);
|
||||||
PlayerStatictics.ResetToDefault();
|
PlayerStatictics.ResetToDefault();
|
||||||
LaneSystem.ResetToDefault();
|
LaneSystem.ResetToDefault();
|
||||||
Physics.SyncTransforms();
|
Physics.SyncTransforms();
|
||||||
ReloadAnimator();
|
ReloadAnimator();
|
||||||
|
playerData.CurrentSpeed = playerData.InitialSpeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TranslateCommand(ECommand command, PressedState state)
|
public void TranslateCommand(ECommand command, PressedState state)
|
||||||
@ -146,15 +184,20 @@ public class Player : MonoBehaviour,IResettable, ICommandTranslator
|
|||||||
switch (command)
|
switch (command)
|
||||||
{
|
{
|
||||||
case ECommand.RIGHT:
|
case ECommand.RIGHT:
|
||||||
|
case ECommand.RIGHT2:
|
||||||
PlayerStateMachine.IncreaseTargetLane();
|
PlayerStateMachine.IncreaseTargetLane();
|
||||||
|
JumpSound.Play();
|
||||||
break;
|
break;
|
||||||
case ECommand.LEFT:
|
case ECommand.LEFT:
|
||||||
|
case ECommand.LEFT2:
|
||||||
PlayerStateMachine.DecreaseTargetLane();
|
PlayerStateMachine.DecreaseTargetLane();
|
||||||
break;
|
break;
|
||||||
case ECommand.UP:
|
case ECommand.UP:
|
||||||
|
case ECommand.UP2:
|
||||||
PlayerStateMachine.SetState(PlayerStateMachine.PlayerJumpState);
|
PlayerStateMachine.SetState(PlayerStateMachine.PlayerJumpState);
|
||||||
break;
|
break;
|
||||||
case ECommand.DOWN:
|
case ECommand.DOWN:
|
||||||
|
case ECommand.DOWN2:
|
||||||
PlayerStateMachine.SetState(PlayerStateMachine.PlayerSlideState);
|
PlayerStateMachine.SetState(PlayerStateMachine.PlayerSlideState);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -162,4 +205,5 @@ public class Player : MonoBehaviour,IResettable, ICommandTranslator
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,39 +1,38 @@
|
|||||||
using System.Collections;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
public class PlayerAnimator
|
public class PlayerAnimator
|
||||||
{
|
{
|
||||||
private Animator animator;
|
private readonly Animator _animator;
|
||||||
private int runningHash = Animator.StringToHash("Run");
|
private readonly int _runningHash = Animator.StringToHash("Run");
|
||||||
private int deadHash = Animator.StringToHash("Dead");
|
private readonly int _deadHash = Animator.StringToHash("Dead");
|
||||||
private int jumpHash = Animator.StringToHash("Jump");
|
private readonly int _jumpHash = Animator.StringToHash("Jump");
|
||||||
private int slideHash = Animator.StringToHash("Slide");
|
private readonly int _slideHash = Animator.StringToHash("Slide");
|
||||||
private int idleHash = Animator.StringToHash("Idle");
|
private readonly int _idleHash = Animator.StringToHash("Idle");
|
||||||
|
|
||||||
public PlayerAnimator(Animator animator)
|
public PlayerAnimator(Animator animator)
|
||||||
{
|
{
|
||||||
if (animator)
|
if (animator)
|
||||||
this.animator = animator;
|
this._animator = animator;
|
||||||
}
|
}
|
||||||
public void SetRunState(bool isRunning)
|
public void SetRunState(bool isRunning)
|
||||||
{
|
{
|
||||||
animator?.SetBool(runningHash, isRunning);
|
_animator?.SetBool(_runningHash, isRunning);
|
||||||
}
|
}
|
||||||
public void SetJumpState(bool isJumping)
|
public void SetJumpState(bool isJumping)
|
||||||
{
|
{
|
||||||
animator?.SetBool(jumpHash, isJumping);
|
_animator?.SetBool(_jumpHash, isJumping);
|
||||||
}
|
}
|
||||||
public void SetDeadState(bool isDead)
|
public void SetDeadState(bool isDead)
|
||||||
{
|
{
|
||||||
animator?.SetBool(deadHash, isDead);
|
_animator?.SetBool(_deadHash, isDead);
|
||||||
}
|
}
|
||||||
public void SetSlideState(bool isSliding)
|
public void SetSlideState(bool isSliding)
|
||||||
{
|
{
|
||||||
animator?.SetBool(slideHash, isSliding);
|
_animator?.SetBool(_slideHash, isSliding);
|
||||||
}
|
}
|
||||||
public void SetIdleState(bool isIdle)
|
public void SetIdleState(bool isIdle)
|
||||||
{
|
{
|
||||||
animator?.SetBool(idleHash, isIdle);
|
if(_animator){}
|
||||||
|
_animator?.SetBool(_idleHash, isIdle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ public abstract class MovingState : PlayerState
|
|||||||
private float speed; //SO
|
private float speed; //SO
|
||||||
private float laneSwitchSpeed; //SO
|
private float laneSwitchSpeed; //SO
|
||||||
protected const float gravity = -9.8f;
|
protected const float gravity = -9.8f;
|
||||||
private float invincibilityTime => playerSM.PlayerData.InvincibilityTime;
|
private float invincibilityTime => playerSM.playerData.InvincibilityTime;
|
||||||
public MovingState(PlayerStateMachine playerStateMachine) : base(playerStateMachine)
|
public MovingState(PlayerStateMachine playerStateMachine) : base(playerStateMachine)
|
||||||
{
|
{
|
||||||
this.playerSM = playerStateMachine;
|
this.playerSM = playerStateMachine;
|
||||||
@ -22,7 +22,6 @@ public abstract class MovingState : PlayerState
|
|||||||
public override void Tick()
|
public override void Tick()
|
||||||
{
|
{
|
||||||
speed = playerData.CurrentSpeed;
|
speed = playerData.CurrentSpeed;
|
||||||
//HandleDirection();
|
|
||||||
playerSM.HorizontalDeltaPosition = playerSM.PlayerTransform.forward * speed * Time.deltaTime ;
|
playerSM.HorizontalDeltaPosition = playerSM.PlayerTransform.forward * speed * Time.deltaTime ;
|
||||||
playerSM.HorizontalDeltaPosition += playerSM.PlayerTransform.forward * speed * Time.deltaTime;
|
playerSM.HorizontalDeltaPosition += playerSM.PlayerTransform.forward * speed * Time.deltaTime;
|
||||||
playerSM.UpdateDistance(playerSM.HorizontalDeltaPosition.z); //вынести в контроллер
|
playerSM.UpdateDistance(playerSM.HorizontalDeltaPosition.z); //вынести в контроллер
|
||||||
@ -38,28 +37,6 @@ public abstract class MovingState : PlayerState
|
|||||||
playerSM.VerticalDeltaPosition += gravity * Time.deltaTime;
|
playerSM.VerticalDeltaPosition += gravity * Time.deltaTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//private void HandleDirection()
|
|
||||||
//{
|
|
||||||
// switch (playerSM.InputDirection)
|
|
||||||
// {
|
|
||||||
// case EInputDirection.RIGHT:
|
|
||||||
// playerSM.IncreaseTargetLane();
|
|
||||||
// break;
|
|
||||||
// case EInputDirection.LEFT:
|
|
||||||
// playerSM.DecreaseTargetLane();
|
|
||||||
// break;
|
|
||||||
// case EInputDirection.UP:
|
|
||||||
// playerSM.SetState(playerSM.PlayerJumpState);
|
|
||||||
// break;
|
|
||||||
// case EInputDirection.DOWN:
|
|
||||||
// playerSM.SetState(playerSM.PlayerSlideState);
|
|
||||||
// break;
|
|
||||||
// default:
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
public void SwitchLane()
|
public void SwitchLane()
|
||||||
{
|
{
|
||||||
float sidewaysPos = playerTransform.localPosition.x;
|
float sidewaysPos = playerTransform.localPosition.x;
|
||||||
@ -83,9 +60,6 @@ public abstract class MovingState : PlayerState
|
|||||||
playerSM.HorizontalDeltaPosition += playerSM.PlayerTransform.right * diffX.x;
|
playerSM.HorizontalDeltaPosition += playerSM.PlayerTransform.right * diffX.x;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ public abstract class PlayerState : State<Player>
|
|||||||
public PlayerState(PlayerStateMachine playerStateMachine)
|
public PlayerState(PlayerStateMachine playerStateMachine)
|
||||||
{
|
{
|
||||||
playerSM = playerStateMachine;
|
playerSM = playerStateMachine;
|
||||||
playerData = playerStateMachine.PlayerData;
|
playerData = playerStateMachine.playerData;
|
||||||
playerTransform = playerStateMachine.PlayerTransform;
|
playerTransform = playerStateMachine.PlayerTransform;
|
||||||
}
|
}
|
||||||
public override void Tick()
|
public override void Tick()
|
||||||
|
@ -4,14 +4,13 @@ using UnityEngine.Animations.Rigging;
|
|||||||
public class PlayerStateMachine : StateMachine<Player>
|
public class PlayerStateMachine : StateMachine<Player>
|
||||||
{
|
{
|
||||||
private Player player;
|
private Player player;
|
||||||
private PlayerData playerData;
|
public PlayerData playerData;
|
||||||
private Transform playerTransform;
|
private Transform playerTransform;
|
||||||
public Transform PlayerTransform { get { return playerTransform; } }
|
public Transform PlayerTransform { get { return playerTransform; } }
|
||||||
public PlayerData PlayerData { get { return playerData; } }
|
|
||||||
public PlayerStateMachine(Player player)
|
public PlayerStateMachine(Player player)
|
||||||
{
|
{
|
||||||
this.player = player;
|
this.player = player;
|
||||||
playerData = player.PlayerData;
|
playerData = GameSession.Instance.GetPlayerData();
|
||||||
playerTransform = player.transform;
|
playerTransform = player.transform;
|
||||||
InitStates();
|
InitStates();
|
||||||
}
|
}
|
||||||
|
@ -2,17 +2,18 @@ using System;
|
|||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
using UnityEngine.Serialization;
|
||||||
|
|
||||||
public class Statistics : MonoBehaviour,IResettable
|
public class Statistics : MonoBehaviour,IResettable
|
||||||
{
|
{
|
||||||
private float distance;
|
private float distance;
|
||||||
private int coinCount;
|
public int coinCount;
|
||||||
private int coinMultiplier;
|
private int coinMultiplier;
|
||||||
public int Score { get; private set; }
|
public int Score { get; private set; }
|
||||||
public event Action<int> OnCoinCountChanged = delegate { };
|
public event Action<int> OnCoinCountChanged = delegate { };
|
||||||
public event Action<float> OnDistanceChanged = delegate { };
|
public event Action<float> OnDistanceChanged = delegate { };
|
||||||
public event Action<int> OnScoreCalculated = delegate { };
|
public event Action<int> OnScoreCalculated = delegate { };
|
||||||
[SerializeField] private PlayerHUDView PlayerHUD;
|
[FormerlySerializedAs("PlayerHUD")] [SerializeField] private PlayerHUDView playerHUD;
|
||||||
private void Awake()
|
private void Awake()
|
||||||
{
|
{
|
||||||
ResetToDefault();
|
ResetToDefault();
|
||||||
@ -43,7 +44,7 @@ public class Statistics : MonoBehaviour,IResettable
|
|||||||
{
|
{
|
||||||
Score = Mathf.FloorToInt(coinCount * coinMultiplier + distance);
|
Score = Mathf.FloorToInt(coinCount * coinMultiplier + distance);
|
||||||
OnScoreCalculated?.Invoke(Score);
|
OnScoreCalculated?.Invoke(Score);
|
||||||
PlayerHUD.UpdateScore(Score.ToString());
|
playerHUD.UpdateScore(Score.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ResetToDefault()
|
public void ResetToDefault()
|
||||||
@ -54,4 +55,12 @@ public class Statistics : MonoBehaviour,IResettable
|
|||||||
coinMultiplier = 1;
|
coinMultiplier = 1;
|
||||||
//gameOverPopUp.gameObject.SetActive(false);
|
//gameOverPopUp.gameObject.SetActive(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void AddScore(int amount)
|
||||||
|
{
|
||||||
|
Score += amount;
|
||||||
|
OnScoreCalculated?.Invoke(Score);
|
||||||
|
playerHUD.UpdateScore(Score.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,9 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
public class CoinPool : BasePool<Coin>
|
namespace Pools
|
||||||
{}
|
{
|
||||||
|
public sealed class CoinPool : BasePool<Coin>
|
||||||
|
{}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -8,6 +8,8 @@
|
|||||||
// </auto-generated>
|
// </auto-generated>
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using Obstacles;
|
||||||
|
|
||||||
namespace Pools
|
namespace Pools
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -1,36 +1,71 @@
|
|||||||
using Pools;
|
using Pools;
|
||||||
using System.Collections;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
public class ChunkGenerator : MonoBehaviour
|
public class ChunkGenerator : MonoBehaviour
|
||||||
{
|
{
|
||||||
[SerializeField] private LaneSystem LaneSystem;
|
[SerializeField] private LaneSystem LaneSystem;
|
||||||
public CoinPool CoinPool { get; private set; }
|
[SerializeField] private CoinPool coinPool;
|
||||||
[field: SerializeField] public List<ObstaclePool> ObstaclePools { get; private set; }
|
[field: SerializeField] public List<ObstaclePool> ObstaclePools { get; private set; }
|
||||||
private bool isFirstChunk = true;
|
|
||||||
|
private bool _isFirstChunk = true;
|
||||||
public Chunk Generate(Chunk chunkToFill)
|
public Chunk Generate(Chunk chunkToFill)
|
||||||
{
|
{
|
||||||
if (isFirstChunk)
|
if (_isFirstChunk)
|
||||||
{
|
{
|
||||||
isFirstChunk = false;
|
_isFirstChunk = false;
|
||||||
return chunkToFill;
|
return chunkToFill;
|
||||||
}
|
}
|
||||||
if (ObstaclePools.IsEmpty())
|
if (!ObstaclePools.IsEmpty())
|
||||||
return chunkToFill;
|
|
||||||
var obstaclePool = ObstaclePools.GetRandomElement();
|
|
||||||
var obstacle = obstaclePool.Spawn();
|
|
||||||
chunkToFill.Obstacles.Add(obstacle);
|
|
||||||
obstacle.transform.SetParent(chunkToFill.transform, true);
|
|
||||||
obstacle.transform.localPosition = chunkToFill.Grid.GetRandomPosition();
|
|
||||||
if (obstacle.IsOnAllLanes)
|
|
||||||
{
|
{
|
||||||
obstacle.transform.localPosition = new Vector3(
|
var obstaclePool = ObstaclePools.GetRandomElement();
|
||||||
LaneSystem.CenterLane * LaneSystem.LaneWidth,
|
var obstacle = obstaclePool.Spawn();
|
||||||
transform.localPosition.y,
|
chunkToFill.Obstacles.Add(obstacle);
|
||||||
transform.localPosition.z
|
obstacle.transform.SetParent(chunkToFill.transform, true);
|
||||||
);
|
obstacle.transform.localPosition = chunkToFill.Grid.GetRandomPosition();
|
||||||
|
|
||||||
|
if (obstacle.IsOnAllLanes)
|
||||||
|
{
|
||||||
|
obstacle.transform.localPosition = new Vector3(
|
||||||
|
LaneSystem.CenterLane * LaneSystem.LaneWidth,
|
||||||
|
transform.localPosition.y,
|
||||||
|
transform.localPosition.z
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Coin coin = coinPool.Spawn();
|
||||||
|
chunkToFill.Coins.Add(coin);
|
||||||
|
coin.transform.SetParent(chunkToFill.transform, true);
|
||||||
|
Vector3 randomPosition;
|
||||||
|
bool isPositionValid = false;
|
||||||
|
int laneIndex = Random.Range(0, LaneSystem.LaneCount);
|
||||||
|
randomPosition = new Vector3(
|
||||||
|
laneIndex * LaneSystem.LaneWidth,
|
||||||
|
chunkToFill.Grid.GetRandomPosition().y + 1.0f,
|
||||||
|
chunkToFill.Grid.GetRandomPosition().z
|
||||||
|
);
|
||||||
|
while (!isPositionValid)
|
||||||
|
{
|
||||||
|
isPositionValid = true;
|
||||||
|
foreach (var obstacle in chunkToFill.Obstacles)
|
||||||
|
{
|
||||||
|
if (Vector3.Distance(randomPosition, obstacle.transform.localPosition) < 1.0f)
|
||||||
|
{
|
||||||
|
isPositionValid = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!isPositionValid)
|
||||||
|
{
|
||||||
|
randomPosition = new Vector3(
|
||||||
|
laneIndex * LaneSystem.LaneWidth,
|
||||||
|
chunkToFill.Grid.GetRandomPosition().y + 1.0f,
|
||||||
|
chunkToFill.Grid.GetRandomPosition().z
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
coin.transform.localPosition = randomPosition;
|
||||||
|
coin.UpdateStartPositionForSinAnimator();
|
||||||
return chunkToFill;
|
return chunkToFill;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Obstacles;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
[RequireComponent(typeof(BoxCollider))]
|
[RequireComponent(typeof(BoxCollider))]
|
||||||
@ -37,6 +38,7 @@ public abstract class Chunk : PoolingObject<Chunk>, IResettable
|
|||||||
transform.localPosition = Vector3.zero;
|
transform.localPosition = Vector3.zero;
|
||||||
transform.position = Vector3.zero;
|
transform.position = Vector3.zero;
|
||||||
transform.rotation = Quaternion.identity;
|
transform.rotation = Quaternion.identity;
|
||||||
|
Coins.Clear();
|
||||||
}
|
}
|
||||||
private void OnTriggerExit(Collider other)
|
private void OnTriggerExit(Collider other)
|
||||||
{
|
{
|
||||||
|
@ -8,6 +8,7 @@ public class LaneSystem : MonoBehaviour,IResettable
|
|||||||
[field: SerializeField] public float LaneWidth { get; private set; }
|
[field: SerializeField] public float LaneWidth { get; private set; }
|
||||||
|
|
||||||
[SerializeField] private int laneCount;
|
[SerializeField] private int laneCount;
|
||||||
|
public int LaneCount => laneCount;
|
||||||
public List<int> Lanes { get; private set; }
|
public List<int> Lanes { get; private set; }
|
||||||
public float CurrentPosition { get; private set; }
|
public float CurrentPosition { get; private set; }
|
||||||
public float TargetPosition { get; set; }
|
public float TargetPosition { get; set; }
|
||||||
|
@ -1,92 +1,136 @@
|
|||||||
using System;
|
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
using UnityEngine.Networking;
|
||||||
|
using System;
|
||||||
|
|
||||||
|
[Serializable]
|
||||||
public class ScoreboardEntriesTable
|
public class ScoreboardEntriesTable
|
||||||
{
|
{
|
||||||
public ScoreboardEntriesTable(List<ScoreboardEntry> entries)
|
public List<ScoreboardEntry> listeScore;
|
||||||
|
|
||||||
|
public ScoreboardEntriesTable()
|
||||||
{
|
{
|
||||||
this.entries = entries;
|
listeScore = new List<ScoreboardEntry>();
|
||||||
}
|
}
|
||||||
public List<ScoreboardEntry> entries = new List<ScoreboardEntry>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Scoreboard : MonoBehaviour, ICommandTranslator
|
public class Scoreboard : MonoBehaviour
|
||||||
{
|
{
|
||||||
[SerializeField] private ScoreboardView scoreboardView;
|
private string apiUrl = "https://awesomerunner.lagaudiere.uk/score";
|
||||||
[SerializeField] private int maxEntries;
|
public List<ScoreboardEntry> entries = new List<ScoreboardEntry>();
|
||||||
private List<ScoreboardEntry> entries = new List<ScoreboardEntry>();
|
|
||||||
|
|
||||||
public event Action<ScoreboardEntry> OnEntryAdded;
|
public event Action<ScoreboardEntry> OnEntryAdded;
|
||||||
|
|
||||||
|
[SerializeField] private ScoreboardView scoreboardView;
|
||||||
|
|
||||||
private void Start()
|
private void Start()
|
||||||
{
|
{
|
||||||
GameSession.Instance.AddCommandTranslator(this);
|
StartCoroutine(GetScoreboard());
|
||||||
string jsonScoreboardEntries = PlayerPrefs.GetString("ScoreboardEntriesTableTest"); //Binary file
|
}
|
||||||
ScoreboardEntriesTable entriesTable = JsonUtility.FromJson<ScoreboardEntriesTable>(jsonScoreboardEntries);
|
private IEnumerator GetScoreboard()
|
||||||
if (entriesTable == null)
|
{
|
||||||
return;
|
Debug.Log("Fetching scoreboard...");
|
||||||
if (entriesTable.entries == null)
|
|
||||||
return;
|
|
||||||
for (int i = 0; i < entriesTable.entries.Count; i++)
|
|
||||||
{
|
|
||||||
entries.Add(entriesTable.entries[i]);
|
|
||||||
OnEntryAdded?.Invoke(entriesTable.entries[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sort scores descending then creates cards (invert this order cause issues)
|
using (UnityWebRequest request = UnityWebRequest.Get(apiUrl))
|
||||||
entries.Sort((x, y) => y.Score.CompareTo(x.Score));
|
{
|
||||||
scoreboardView.AddEntries(entries.GetRange(0, maxEntries));
|
yield return request.SendWebRequest();
|
||||||
|
|
||||||
|
if (request.result == UnityWebRequest.Result.Success)
|
||||||
|
{
|
||||||
|
string json = request.downloadHandler.text;
|
||||||
|
Debug.Log("Received JSON: " + json);
|
||||||
|
|
||||||
|
// Désérialiser directement en un tableau
|
||||||
|
ScoreboardEntry[] scoreboardEntriesArray = JsonHelper.FromJson<ScoreboardEntry>(json);
|
||||||
|
|
||||||
|
if (scoreboardEntriesArray != null)
|
||||||
|
{
|
||||||
|
entries = new List<ScoreboardEntry>(scoreboardEntriesArray);
|
||||||
|
SortScoreboardEntriesByHighscore(entries);
|
||||||
|
UpdateScoreboardView();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.LogError("Erreur lors de la récupération du scoreboard : " + request.error);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddScoreboardEntry(string entryName, int entryScore)
|
|
||||||
{
|
|
||||||
ScoreboardEntry entry = new ScoreboardEntry(entryName, entryScore);
|
|
||||||
entries.Add(entry);
|
|
||||||
OnEntryAdded?.Invoke(entry);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SortScoreboardEntriesByHighscore(List<ScoreboardEntry> entries)
|
|
||||||
{
|
|
||||||
entries.Sort((x,y) => y.Score.CompareTo(x.Score));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SortScoreboardCardsDatasByHighscore(List<PlayerScoreboardCardData> scoreboardCardDatas)
|
|
||||||
{
|
|
||||||
scoreboardCardDatas.Sort((x, y) => y.playerScore.CompareTo(x.playerScore));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void AddScoreboardEntry(ScoreboardEntry entry)
|
public void AddScoreboardEntry(ScoreboardEntry entry)
|
||||||
{
|
{
|
||||||
entries.Add(entry);
|
entries.Add(entry);
|
||||||
OnEntryAdded?.Invoke(entry);
|
SortScoreboardEntriesByHighscore(entries);
|
||||||
SaveScoreboardEntriesTable();
|
UpdateScoreboardView();
|
||||||
}
|
StartCoroutine(PostScoreboardEntry(entry));
|
||||||
|
|
||||||
public void SaveScoreboardEntriesTable()
|
|
||||||
{
|
|
||||||
ScoreboardEntriesTable scoreboardEntriesTable = new ScoreboardEntriesTable(entries);
|
|
||||||
string jsonScoreboardEntries = JsonUtility.ToJson(scoreboardEntriesTable);
|
|
||||||
PlayerPrefs.SetString("ScoreboardEntriesTableTest", jsonScoreboardEntries);
|
|
||||||
PlayerPrefs.Save();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TranslateCommand(ECommand command, PressedState state)
|
private IEnumerator PostScoreboardEntry(ScoreboardEntry entry)
|
||||||
{
|
{
|
||||||
switch (command)
|
string json = JsonUtility.ToJson(entry);
|
||||||
|
using (UnityWebRequest request = new UnityWebRequest(apiUrl, "POST"))
|
||||||
{
|
{
|
||||||
case ECommand.OPEN_SCOREBOARD:
|
byte[] bodyRaw = System.Text.Encoding.UTF8.GetBytes(json);
|
||||||
if (state.IsPressed == true)
|
request.uploadHandler = new UploadHandlerRaw(bodyRaw);
|
||||||
scoreboardView.Show(true);
|
request.downloadHandler = new DownloadHandlerBuffer();
|
||||||
if (state.IsReleased == true)
|
request.SetRequestHeader("Content-Type", "application/json");
|
||||||
scoreboardView.Show(false);
|
|
||||||
break;
|
yield return request.SendWebRequest();
|
||||||
default:
|
|
||||||
scoreboardView.Show(false);
|
if (request.result == UnityWebRequest.Result.Success)
|
||||||
break;
|
{
|
||||||
|
Debug.Log("Score ajouté avec succès !");
|
||||||
|
OnEntryAdded?.Invoke(entry);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.LogError("Erreur lors de l'ajout du score : " + request.error);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
private void SortScoreboardEntriesByHighscore(List<ScoreboardEntry> entries)
|
||||||
|
{
|
||||||
|
entries.Sort((x, y) => y.score.CompareTo(x.score));
|
||||||
|
}
|
||||||
|
private void UpdateScoreboardView()
|
||||||
|
{
|
||||||
|
Debug.Log("Updating scoreboard view...");
|
||||||
|
|
||||||
|
List<PlayerScoreboardCardData> scoreboardCardDatas = new List<PlayerScoreboardCardData>();
|
||||||
|
|
||||||
|
foreach (var entry in entries)
|
||||||
|
{
|
||||||
|
OnEntryAdded?.Invoke(entry);
|
||||||
|
scoreboardCardDatas.Add(new PlayerScoreboardCardData(entry.pseudo, entry.score.ToString()));
|
||||||
|
}
|
||||||
|
|
||||||
|
scoreboardView.AddPlayerCards(scoreboardCardDatas);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class JsonHelper
|
||||||
|
{
|
||||||
|
public static T[] FromJson<T>(string json)
|
||||||
|
{
|
||||||
|
string wrappedJson = "{\"items\":" + json + "}";
|
||||||
|
Wrapper<T> wrapper = JsonUtility.FromJson<Wrapper<T>>(wrappedJson);
|
||||||
|
return wrapper.items;
|
||||||
|
}
|
||||||
|
|
||||||
|
[System.Serializable]
|
||||||
|
private class Wrapper<T>
|
||||||
|
{
|
||||||
|
public T[] items;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Serializable]
|
||||||
|
public class ScoreboardEntriesWrapper
|
||||||
|
{
|
||||||
|
public ScoreboardEntry[] listeScore;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
@ -5,13 +6,13 @@ using UnityEngine;
|
|||||||
[System.Serializable]
|
[System.Serializable]
|
||||||
public class ScoreboardEntry
|
public class ScoreboardEntry
|
||||||
{
|
{
|
||||||
[SerializeField] private float score;
|
public string pseudo;
|
||||||
[SerializeField] private string name;
|
public int score;
|
||||||
public float Score { get { return score; } private set { score = value; } }
|
|
||||||
public string Name { get { return name; } private set { name = value; } }
|
public ScoreboardEntry(string pseudo, int score)
|
||||||
public ScoreboardEntry(string name,float score)
|
|
||||||
{
|
{
|
||||||
this.name = name;
|
this.pseudo = pseudo;
|
||||||
this.score = score;
|
this.score = score;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
8
Assets/Scripts/Skin.meta
Normal file
8
Assets/Scripts/Skin.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: a87de00688705474c882c4db176e76cf
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
33
Assets/Scripts/Skin/MenuManager.cs
Normal file
33
Assets/Scripts/Skin/MenuManager.cs
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
|
||||||
|
public class MenuManager : MonoBehaviour
|
||||||
|
{
|
||||||
|
public Image menuImage; // L'image affichée dans le menu
|
||||||
|
public Sprite[] menuSprites; // Tableau des 9 images de menu
|
||||||
|
|
||||||
|
private int player1Skin;
|
||||||
|
private int player2Skin;
|
||||||
|
|
||||||
|
void Start()
|
||||||
|
{
|
||||||
|
player1Skin = PlayerPrefs.GetInt("SelectedSkin_Player1", 0);
|
||||||
|
player2Skin = PlayerPrefs.GetInt("SelectedSkin_Player2", 0);
|
||||||
|
UpdateMenuImage();
|
||||||
|
}
|
||||||
|
|
||||||
|
void UpdateMenuImage()
|
||||||
|
{
|
||||||
|
int imageIndex = GetMenuImageIndex(player1Skin, player2Skin);
|
||||||
|
|
||||||
|
if (imageIndex >= 0 && imageIndex < menuSprites.Length)
|
||||||
|
{
|
||||||
|
menuImage.sprite = menuSprites[imageIndex];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetMenuImageIndex(int skin1, int skin2)
|
||||||
|
{
|
||||||
|
return skin1 * 3 + skin2; // Adapter selon ton nombre de skins
|
||||||
|
}
|
||||||
|
}
|
2
Assets/Scripts/Skin/MenuManager.cs.meta
Normal file
2
Assets/Scripts/Skin/MenuManager.cs.meta
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 73a49fe834731374cbc6b8886a79c0f1
|
26
Assets/Scripts/Skin/PlayerSkinManager.cs
Normal file
26
Assets/Scripts/Skin/PlayerSkinManager.cs
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
public class PlayerSkinManager : MonoBehaviour
|
||||||
|
{
|
||||||
|
public SkinnedMeshRenderer[] bodyParts; // Liste des renderers
|
||||||
|
public Material[] skins; // Liste des matériaux (à remplir dans l'Inspector)
|
||||||
|
public string playerId; // Identifiant unique du joueur
|
||||||
|
|
||||||
|
void Start()
|
||||||
|
{
|
||||||
|
// Charger le skin sélectionné pour ce joueur spécifique
|
||||||
|
int selectedSkin = PlayerPrefs.GetInt($"SelectedSkin_{playerId}", 0);
|
||||||
|
ApplySkin(selectedSkin);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ApplySkin(int index)
|
||||||
|
{
|
||||||
|
if (index >= 0 && index < skins.Length)
|
||||||
|
{
|
||||||
|
foreach (var part in bodyParts) // Appliquer à chaque partie du corps
|
||||||
|
{
|
||||||
|
part.material = skins[index];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
2
Assets/Scripts/Skin/PlayerSkinManager.cs.meta
Normal file
2
Assets/Scripts/Skin/PlayerSkinManager.cs.meta
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: aa943b55701d5e245bcdc37e137a1e73
|
13
Assets/Scripts/Skin/SkinSelector.cs
Normal file
13
Assets/Scripts/Skin/SkinSelector.cs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
public class SkinSelector : MonoBehaviour
|
||||||
|
{
|
||||||
|
public string playerId; // Identifiant unique du joueur
|
||||||
|
|
||||||
|
public void SelectSkin(int skinIndex)
|
||||||
|
{
|
||||||
|
// Sauvegarder l'index du skin choisi pour ce joueur spécifique
|
||||||
|
PlayerPrefs.SetInt($"SelectedSkin_{playerId}", skinIndex);
|
||||||
|
PlayerPrefs.Save();
|
||||||
|
}
|
||||||
|
}
|
2
Assets/Scripts/Skin/SkinSelector.cs.meta
Normal file
2
Assets/Scripts/Skin/SkinSelector.cs.meta
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 21b477373147aaf4a81c8bf75f8984a5
|
62
Assets/Scripts/UI/Views/DeathScreen1VS1.cs
Normal file
62
Assets/Scripts/UI/Views/DeathScreen1VS1.cs
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
using Assets.Scripts.GameSession;
|
||||||
|
using TMPro;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.SceneManagement;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
|
||||||
|
namespace UI.Views
|
||||||
|
{
|
||||||
|
public class DeathScreen1VS1 : MonoBehaviour
|
||||||
|
{
|
||||||
|
public TMP_Text Joueur1Text;
|
||||||
|
public TMP_Text Joueur2Text;
|
||||||
|
public TMP_Text CoinsText;
|
||||||
|
public TMP_Text ScoreText;
|
||||||
|
|
||||||
|
private void Start()
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(GameResult.MatchResult))
|
||||||
|
{
|
||||||
|
switch (GameResult.MatchResult)
|
||||||
|
{
|
||||||
|
case "PLAYER1":
|
||||||
|
if(Joueur2Text != null)
|
||||||
|
Joueur1Text.text = "WINNER !";
|
||||||
|
if(Joueur2Text != null)
|
||||||
|
Joueur2Text.text = "LOSER !";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "PLAYER2":
|
||||||
|
if(Joueur2Text != null )
|
||||||
|
Joueur2Text.text = "WINNER !";
|
||||||
|
if(Joueur2Text != null)
|
||||||
|
Joueur1Text.text = "LOSER !";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "DRAW":
|
||||||
|
if(Joueur1Text != null)
|
||||||
|
Joueur1Text.text = "Draw";
|
||||||
|
if(Joueur2Text != null)
|
||||||
|
Joueur2Text.text = "Draw";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
}
|
||||||
|
CoinsText.text = GameResult.coinsEarned.ToString();
|
||||||
|
ScoreText.text = GameResult.score.ToString() + "M";
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RestartGame()
|
||||||
|
{
|
||||||
|
SceneManager.LoadScene("DuoGameScene");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void QuitGame()
|
||||||
|
{
|
||||||
|
Application.Quit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
3
Assets/Scripts/UI/Views/DeathScreen1VS1.cs.meta
Normal file
3
Assets/Scripts/UI/Views/DeathScreen1VS1.cs.meta
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 80d0e44a44be4982a77850a10cbae2f9
|
||||||
|
timeCreated: 1736867806
|
@ -26,12 +26,12 @@ public class PausedView : BaseView
|
|||||||
|
|
||||||
mainMenuButton.onClick.AddListener(() =>
|
mainMenuButton.onClick.AddListener(() =>
|
||||||
{
|
{
|
||||||
GameSession.Instance.GoToMainMenu();
|
GameSession.Instance.PauseBackToMainMenu();
|
||||||
});
|
});
|
||||||
|
|
||||||
restartButton.onClick.AddListener(() =>
|
restartButton.onClick.AddListener(() =>
|
||||||
{
|
{
|
||||||
GameSession.Instance.GoToGameScene();
|
GameSession.Instance.PausePlayAgain();
|
||||||
});
|
});
|
||||||
base.Init();
|
base.Init();
|
||||||
}
|
}
|
||||||
|
@ -21,31 +21,37 @@ public class ScoreboardView : BaseView
|
|||||||
}
|
}
|
||||||
public void AddPlayerCards(List<PlayerScoreboardCardData> cardsData)
|
public void AddPlayerCards(List<PlayerScoreboardCardData> cardsData)
|
||||||
{
|
{
|
||||||
|
Debug.Log("Adding " + cardsData.Count + " player cards.");
|
||||||
|
|
||||||
foreach (var cardData in cardsData)
|
foreach (var cardData in cardsData)
|
||||||
{
|
{
|
||||||
|
Debug.Log("Card Data: " + cardData.playerName + " - " + cardData.playerScore);
|
||||||
AddPlayerCard(cardData);
|
AddPlayerCard(cardData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public void AddEntries(List<ScoreboardEntry> entries)
|
|
||||||
{
|
|
||||||
int rank = 1;
|
|
||||||
foreach (var entry in entries)
|
|
||||||
{
|
|
||||||
AddPlayerCard(new PlayerScoreboardCardData(rank + ".\t" + entry.Name, entry.Score.ToString()));
|
|
||||||
rank++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void AddPlayerCard(PlayerScoreboardCardData cardData)
|
private void AddPlayerCard(PlayerScoreboardCardData cardData)
|
||||||
{
|
{
|
||||||
//if (playerCards.ContainsKey(cardData.playerName))
|
if (layoutGroup == null)
|
||||||
// return;
|
{
|
||||||
|
Debug.LogError("layoutGroup is not assigned!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
PlayerScoreboardCard playerScoreboardCard = Instantiate(cardPrefab);
|
PlayerScoreboardCard playerScoreboardCard = Instantiate(cardPrefab);
|
||||||
playerScoreboardCard.transform.SetParent(layoutGroup.transform, false);
|
playerScoreboardCard.transform.SetParent(layoutGroup.transform, false);
|
||||||
playerScoreboardCard.UpdateCard(cardData);
|
playerScoreboardCard.UpdateCard(cardData);
|
||||||
|
|
||||||
|
Debug.Log("Player card created for: " + cardData.playerName);
|
||||||
|
|
||||||
playerCards.Add(playerScoreboardCard);
|
playerCards.Add(playerScoreboardCard);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void RemovePlayerCard(string cardTag)
|
public void RemovePlayerCard(string cardTag)
|
||||||
{
|
{
|
||||||
//if (playerCards.ContainsKey(cardTag))
|
//if (playerCards.ContainsKey(cardTag))
|
||||||
|
@ -1,140 +0,0 @@
|
|||||||
|
|
||||||
using System.Collections;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using UnityEngine;
|
|
||||||
using UnityEditor;
|
|
||||||
using System.Linq;
|
|
||||||
using System.IO;
|
|
||||||
|
|
||||||
public class CubemapTextureBuilder : EditorWindow
|
|
||||||
{
|
|
||||||
[MenuItem("Tools/Cubemap Builder")]
|
|
||||||
public static void OpenWindow()
|
|
||||||
{
|
|
||||||
GetWindow<CubemapTextureBuilder>();
|
|
||||||
}
|
|
||||||
|
|
||||||
Texture2D[] textures = new Texture2D[6];
|
|
||||||
string[] labels = new string[] {
|
|
||||||
"Right", "Left",
|
|
||||||
"Top", "Bottom",
|
|
||||||
"Front", "Back"
|
|
||||||
};
|
|
||||||
|
|
||||||
TextureFormat[] HDRFormats = new TextureFormat[] {
|
|
||||||
TextureFormat.ASTC_HDR_10x10 ,
|
|
||||||
TextureFormat.ASTC_HDR_12x12 ,
|
|
||||||
TextureFormat.ASTC_HDR_4x4 ,
|
|
||||||
TextureFormat.ASTC_HDR_5x5 ,
|
|
||||||
TextureFormat.ASTC_HDR_6x6 ,
|
|
||||||
TextureFormat.ASTC_HDR_8x8 ,
|
|
||||||
TextureFormat.BC6H ,
|
|
||||||
TextureFormat.RGBAFloat ,
|
|
||||||
TextureFormat.RGBAHalf
|
|
||||||
};
|
|
||||||
|
|
||||||
Vector2Int[] placementRects = new Vector2Int[]
|
|
||||||
{
|
|
||||||
new Vector2Int(2, 1),
|
|
||||||
new Vector2Int(0, 1),
|
|
||||||
new Vector2Int(1, 2),
|
|
||||||
new Vector2Int(1, 0),
|
|
||||||
new Vector2Int(1, 1),
|
|
||||||
new Vector2Int(3, 1),
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
private void OnGUI()
|
|
||||||
{
|
|
||||||
for (int i = 0; i < 6; i++)
|
|
||||||
{
|
|
||||||
textures[i] = EditorGUILayout.ObjectField(labels[i], textures[i], typeof(Texture2D), false) as Texture2D;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (GUILayout.Button("Build Cubemap"))
|
|
||||||
{
|
|
||||||
// Missing Texture
|
|
||||||
if (textures.Any(t => t == null))
|
|
||||||
{
|
|
||||||
EditorUtility.DisplayDialog("Cubemap Builder Error", "One or more texture is missing.", "Ok");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get size
|
|
||||||
var size = textures[0].width;
|
|
||||||
|
|
||||||
// Not all of the same size or square
|
|
||||||
if (textures.Any(t => (t.width != size) || (t.height != size)))
|
|
||||||
{
|
|
||||||
EditorUtility.DisplayDialog("Cubemap Builder Error", "All the textures need to be the same size and square.", "Ok");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var isHDR = HDRFormats.Any(f => f == textures[0].format);
|
|
||||||
var texturePaths = textures.Select(t => AssetDatabase.GetAssetPath(t)).ToArray();
|
|
||||||
|
|
||||||
// Should be ok, ask for the file path.
|
|
||||||
var path = EditorUtility.SaveFilePanel("Save Cubemap", Path.GetDirectoryName(texturePaths[0]), "Cubemap", isHDR ? "exr" : "png");
|
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(path)) return;
|
|
||||||
|
|
||||||
// Save the readable flag to restore it afterwards
|
|
||||||
var readableFlags = textures.Select(t => t.isReadable).ToArray();
|
|
||||||
|
|
||||||
// Get the importer and mark the textures as readable
|
|
||||||
var importers = texturePaths.Select(p => TextureImporter.GetAtPath(p) as TextureImporter).ToArray();
|
|
||||||
|
|
||||||
foreach (var importer in importers)
|
|
||||||
{
|
|
||||||
importer.isReadable = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
AssetDatabase.Refresh();
|
|
||||||
|
|
||||||
foreach (var p in texturePaths)
|
|
||||||
{
|
|
||||||
AssetDatabase.ImportAsset(p);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Build the cubemap texture
|
|
||||||
var cubeTexture = new Texture2D(size * 4, size * 3, isHDR ? TextureFormat.RGBAFloat : TextureFormat.RGBA32, false);
|
|
||||||
|
|
||||||
for (int i = 0; i < 6; i++)
|
|
||||||
{
|
|
||||||
cubeTexture.SetPixels(placementRects[i].x * size, placementRects[i].y * size, size, size, textures[i].GetPixels(0));
|
|
||||||
}
|
|
||||||
|
|
||||||
cubeTexture.Apply(false);
|
|
||||||
|
|
||||||
// Save the texture to the specified path, and destroy the temporary object
|
|
||||||
var bytes = isHDR ? cubeTexture.EncodeToEXR() : cubeTexture.EncodeToPNG();
|
|
||||||
|
|
||||||
File.WriteAllBytes(path, bytes);
|
|
||||||
|
|
||||||
DestroyImmediate(cubeTexture);
|
|
||||||
|
|
||||||
// Reset the read flags, and reimport everything
|
|
||||||
for (var i = 0; i < 6; i++)
|
|
||||||
{
|
|
||||||
importers[i].isReadable = readableFlags[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
path = path.Remove(0, Application.dataPath.Length - 6);
|
|
||||||
|
|
||||||
AssetDatabase.ImportAsset(path);
|
|
||||||
|
|
||||||
var cubeImporter = AssetImporter.GetAtPath(path) as TextureImporter;
|
|
||||||
cubeImporter.textureShape = TextureImporterShape.TextureCube;
|
|
||||||
cubeImporter.sRGBTexture = false;
|
|
||||||
cubeImporter.generateCubemap = TextureImporterGenerateCubemap.FullCubemap;
|
|
||||||
|
|
||||||
foreach (var p in texturePaths)
|
|
||||||
{
|
|
||||||
AssetDatabase.ImportAsset(p);
|
|
||||||
}
|
|
||||||
AssetDatabase.ImportAsset(path);
|
|
||||||
|
|
||||||
AssetDatabase.Refresh();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,11 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: f7b00d918e7b13c4c8823278d24d708a
|
|
||||||
MonoImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
serializedVersion: 2
|
|
||||||
defaultReferences: []
|
|
||||||
executionOrder: 0
|
|
||||||
icon: {instanceID: 0}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
@ -1,3 +1,4 @@
|
|||||||
|
using Assets.Scripts.GameSession;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.SceneManagement;
|
using UnityEngine.SceneManagement;
|
||||||
using UnityEngine.UI;
|
using UnityEngine.UI;
|
||||||
@ -20,6 +21,6 @@ public class RestartButton : MonoBehaviour
|
|||||||
|
|
||||||
public void RestartGame()
|
public void RestartGame()
|
||||||
{
|
{
|
||||||
SceneManager.LoadScene("GameScene");
|
GoToScene.GoToSoloMode();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
8
Assets/Sounds.meta
Normal file
8
Assets/Sounds.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 7a6cd05b162829143bc4b5dad38146f6
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
BIN
Assets/Sounds/Trailer Action Cinematic by Infraction [No Copyright Music] ⧸ Galactic.wav
(Stored with Git LFS)
Normal file
BIN
Assets/Sounds/Trailer Action Cinematic by Infraction [No Copyright Music] ⧸ Galactic.wav
(Stored with Git LFS)
Normal file
Binary file not shown.
@ -0,0 +1,23 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: ddf8fb13b61f8474d89b050db1febfc6
|
||||||
|
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:
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user