Compare commits

..

4 Commits

140 changed files with 23864 additions and 54458 deletions

View File

@ -1,13 +0,0 @@
# 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

View File

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding" addBOMForNewFiles="with BOM under Windows, with no BOM otherwise" />
</project>

View File

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="UserContentModel">
<attachedFolders />
<explicitIncludes />
<explicitExcludes />
</component>
</project>

View File

@ -1,6 +0,0 @@
<?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
View File

@ -1,13 +0,0 @@
# 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

View File

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding" addBOMForNewFiles="with BOM under Windows, with no BOM otherwise" />
</project>

View File

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="UserContentModel">
<attachedFolders />
<explicitIncludes />
<explicitExcludes />
</component>
</project>

View File

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

8
.idea/indexLayout.xml generated
View File

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="UserContentModel">
<attachedFolders />
<explicitIncludes />
<explicitExcludes />
</component>
</project>

View File

@ -1,7 +0,0 @@
<?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
View File

@ -1,6 +0,0 @@
<?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
View File

@ -1,70 +0,0 @@
<?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.

View File

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

View File

@ -1,108 +0,0 @@
%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}

View File

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 104b61ba2d831c84e9200f18cdf2cd2f
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 9100000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,16 +0,0 @@
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()
{
}
}

View File

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

View File

@ -9,8 +9,6 @@ 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
@ -21,7 +19,6 @@ 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:
@ -88,4 +85,3 @@ 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

View File

@ -2,26 +2,20 @@
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000 --- !u!21 &2100000
Material: Material:
serializedVersion: 8 serializedVersion: 6
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_Parent: {fileID: 0} m_ShaderKeywords: _METALLICGLOSSMAP _NORMALMAP
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:
@ -61,7 +55,6 @@ 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
@ -82,5 +75,3 @@ 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

View File

@ -2,26 +2,19 @@
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000 --- !u!21 &2100000
Material: Material:
serializedVersion: 8 serializedVersion: 6
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInternal: {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_Parent: {fileID: 0} m_ShaderKeywords: _METALLICGLOSSMAP
m_ModifiedSerializedProperties: 0 m_LightmapFlags: 5
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:
@ -61,26 +54,19 @@ 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

View File

@ -2,25 +2,19 @@
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000 --- !u!21 &2100000
Material: Material:
serializedVersion: 8 serializedVersion: 6
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInternal: {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_Parent: {fileID: 0} m_ShaderKeywords:
m_ModifiedSerializedProperties: 0 m_LightmapFlags: 5
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:
@ -60,26 +54,19 @@ 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

View File

@ -8,8 +8,7 @@ public class laserScript : MonoBehaviour {
// Use this for initialization // Use this for initialization
void Start () { void Start () {
laserLine = GetComponentInChildren<LineRenderer> (); laserLine = GetComponentInChildren<LineRenderer> ();
laserLine.startWidth = .2f; laserLine.SetWidth (.2f, .2f);
laserLine.endWidth = .2f;
} }
// Update is called once per frame // Update is called once per frame

View File

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

View File

@ -1,163 +0,0 @@
%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}

View File

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

View File

@ -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.5, z: 0} m_Center: {x: 0, y: 0, 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: 1.75, z: 2} m_Size: {x: 2, y: 2, z: 2}
m_Center: {x: 0, y: 2.25, z: 0} m_Center: {x: 0, y: 0, 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: 0 <IsInevitable>k__BackingField: 1
--- !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

File diff suppressed because it is too large Load Diff

View File

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

File diff suppressed because it is too large Load Diff

View File

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

View File

@ -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: 10 capacity: 30
prefab: {fileID: 6716018880928220119, guid: aa7da947970bb714fa7924d204fe2bdd, type: 3} prefab: {fileID: 6716018880928220119, guid: aa7da947970bb714fa7924d204fe2bdd, type: 3}

View File

@ -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: 10 capacity: 20
prefab: {fileID: 6716018880928220119, guid: aa7da947970bb714fa7924d204fe2bdd, type: 3} prefab: {fileID: 6716018880928220119, guid: aa7da947970bb714fa7924d204fe2bdd, type: 3}

View File

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

View File

@ -1,48 +0,0 @@
%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}

View File

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

File diff suppressed because it is too large Load Diff

View File

@ -1,9 +1,5 @@
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:

File diff suppressed because it is too large Load Diff

View File

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

File diff suppressed because it is too large Load Diff

View File

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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

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

File diff suppressed because it is too large Load Diff

View File

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

View File

@ -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: 0 m_Enabled: 1
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,6 +15,4 @@ 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
<InitialSpeed>k__BackingField: 10 <Speed>k__BackingField: 10
<CurrentSpeed>k__BackingField: 401.62177
<SpeedAcceleration>k__BackingField: 1

View File

@ -1,39 +1,13 @@
using System; using System.Collections;
using System.Collections;
using UnityEngine; using UnityEngine;
[CreateAssetMenu(fileName = "PlayerData", menuName = "ScriptableObjects/Player")] [CreateAssetMenu(fileName = "PlayerData", menuName = "ScriptableObjects/Player")]
public sealed class PlayerData : ScriptableObject public class PlayerData : ScriptableObject
{ {
// Serialize Fields
[field: SerializeField] public int InvincibilityTime { get; private set; } [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;
}
} }

View File

@ -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(target, target.up); camTransform.LookAt(camTransform, target.up);
} }
} }

View File

@ -5,7 +5,6 @@ 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; }
@ -24,9 +23,7 @@ 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();

View File

@ -1,9 +0,0 @@
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; }
}
}

View File

@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: 2ccf940b8a6f4771951a3760a7865928
timeCreated: 1739468701

View File

@ -1,26 +1,20 @@
using System; using System.Collections;
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 player1; [SerializeField] private Player currentPlayer;
[SerializeField] [CanBeNull] private Player player2;
[SerializeField] private Scoreboard scoreboard; [SerializeField] private Scoreboard scoreboard;
[SerializeField] private bool isDuoMode;
[SerializeField] private PlayerData playerData;
public static GameSession Instance { get; private set; } public static GameSession Instance { get; private set; }
private WorldCurver Curver { get; set; } public WorldCurver Curver { get; private set; }
private IInputTranslator _player1InputTranslator; private IInputTranslator inputTranslator;
private IInputTranslator _player2InputTranslator;
private bool _isSessionPaused = false; private bool isSessionPaused = false;
private bool _isInputAlreadyRestricted = false; private float speedAtPause;
private float _speedAtPause; private bool isInputAlreadyRestricted = false;
private void Awake() private void Awake()
{ {
@ -38,13 +32,7 @@ public class GameSession : MonoBehaviour,IResettable
} }
private void Update() private void Update()
{ {
playerData.Update(); inputTranslator.Tick();
_player1InputTranslator.Tick();
if (isDuoMode)
{
_player2InputTranslator.Tick();
}
Curver.Tick(); Curver.Tick();
// curver.SinCurveX(); // curver.SinCurveX();
// Curver.SinCurveY(); // Curver.SinCurveY();
@ -53,44 +41,48 @@ public class GameSession : MonoBehaviour,IResettable
private void Init() private void Init()
{ {
var player1Holder = new KeyBindingHolder(); if (ApplicationUtil.platform == RuntimePlatform.Android || ApplicationUtil.platform == RuntimePlatform.IPhonePlayer)
player1Holder.Init(false); {
_player1InputTranslator = new InputTranslator<KeyBinding>(player1Holder, false); IBindingHolder<TouchBinding> touchHolder = new TouchBindingHolder();
var player2Holder = new KeyBindingHolder(); inputTranslator = new InputTranslator<TouchBinding>(touchHolder);
player2Holder.Init(true); }
_player2InputTranslator = new InputTranslator<KeyBinding>(player2Holder, true); else
{
playerData.Reset(); IBindingHolder<KeyBinding> keyHolder = new KeyBindingHolder();
inputTranslator = new InputTranslator<KeyBinding>(keyHolder);
}
} }
public void AddCommandTranslator(ICommandTranslator translator, bool isPlayer2) public void AddCommandTranslator(ICommandTranslator translator)
{ {
if (isPlayer2) inputTranslator.AddCommandTranslator(translator);
{
_player2InputTranslator.AddCommandTranslator(translator);
}else
{
_player1InputTranslator.AddCommandTranslator(translator);
}
} }
public void PauseSession(bool isPaused) public void PauseSession(bool isPaused)
{ {
playerData.isPaused(isPaused);
Time.timeScale = isPaused ? 0 : 1; // Save the speed before pausing the game and restore it while the game resume
if (!_isSessionPaused && _player1InputTranslator.IsTranslationResticted(InputConstants.InGameCommands) && _player2InputTranslator.IsTranslationResticted(InputConstants.InGameCommands) ) if (isPaused)
{ {
_isInputAlreadyRestricted = true; speedAtPause = currentPlayer.PlayerData.CurrentSpeed;
_isSessionPaused = isPaused; }else{
currentPlayer.PlayerData.CurrentSpeed = speedAtPause;
}
Time.timeScale = isPaused ? 0 : 1;
if (!isSessionPaused && inputTranslator.IsTranslationResticted(InputConstants.InGameCommands))
{
isInputAlreadyRestricted = true;
isSessionPaused = isPaused;
return; return;
} }
if (!_player1InputTranslator.IsTranslationResticted(InputConstants.InGameCommands) && !_player2InputTranslator.IsTranslationResticted(InputConstants.InGameCommands)) if (!inputTranslator.IsTranslationResticted(InputConstants.InGameCommands))
{ {
_isInputAlreadyRestricted = false; isInputAlreadyRestricted = false;
} }
_isSessionPaused = isPaused; isSessionPaused = isPaused;
if (_isInputAlreadyRestricted) if (isInputAlreadyRestricted)
{ {
return; return;
} }
@ -99,12 +91,7 @@ public class GameSession : MonoBehaviour,IResettable
public void RestrictInputs(List<ECommand> commands,bool isRestricted) public void RestrictInputs(List<ECommand> commands,bool isRestricted)
{ {
_player1InputTranslator.RestictTranslation(commands, isRestricted); inputTranslator.RestictTranslation(commands, isRestricted);
if (isDuoMode)
{
_player2InputTranslator.RestictTranslation(commands, isRestricted);
}
} }
public void UpdateScoreboard(ScoreboardEntry entry) public void UpdateScoreboard(ScoreboardEntry entry)
@ -112,86 +99,44 @@ public class GameSession : MonoBehaviour,IResettable
scoreboard.AddScoreboardEntry(entry); scoreboard.AddScoreboardEntry(entry);
} }
private bool isCheckingEquality = false; public void GoToGameScene()
public void HandlePlayerDeath(Player deadPlayer)
{ {
if (isDuoMode) StartCoroutine(LoadGameSceneAsync());
{
if (isCheckingEquality) return;
isCheckingEquality = true;
StartCoroutine(CheckForEquality(deadPlayer));
}
else
{
GameResult.score = player1.PlayerStatictics.Score;
GameResult.coinsEarned = player1.PlayerStatictics.coinCount;
SceneManager.LoadScene("DeathScreen");
}
} }
private IEnumerator CheckForEquality(Player deadPlayer) private IEnumerator LoadGameSceneAsync()
{ {
yield return new WaitForSeconds(0.3f); AsyncOperation asyncLoad = SceneManager.LoadSceneAsync("GameScene", LoadSceneMode.Single);
asyncLoad.allowSceneActivation = false;
if (player1.isDead && player2.isDead) while (!asyncLoad.isDone)
{ {
SendResultToDeathScreen1VS1("DRAW"); // Indiquer la progression de chargement (0 à 0.9)
} float progress = Mathf.Clamp01(asyncLoad.progress / 0.9f);
else if (player1.isDead) Debug.Log($"Loading progress: {progress * 100}%");
// Activer la scène lorsqu'elle est prête
if (asyncLoad.progress >= 0.9f)
{ {
SendResultToDeathScreen1VS1("PLAYER2"); asyncLoad.allowSceneActivation = true;
}
else if (player2.isDead)
{
SendResultToDeathScreen1VS1("PLAYER1");
} }
isCheckingEquality = false; 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()
{ {
GoToScene.GoToMainMenu(); SceneManager.LoadScene("MainMenu", LoadSceneMode.Single);
ResetToDefault(); ResetToDefault();
} }
public void ResetToDefault() public void ResetToDefault()
{ {
PauseSession(false); PauseSession(false);
playerData.Reset(); if(currentPlayer !=null)
if(player1 !=null) currentPlayer.ResetToDefault();
player1.ResetToDefault();
if (isDuoMode && player2 != null)
{
player2.ResetToDefault();
}
}
public PlayerData GetPlayerData()
{
return this.playerData;
} }
} }

View File

@ -1,38 +0,0 @@
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);
}
}
}

View File

@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: 90560e670cf9430d920225316b227914
timeCreated: 1736947730

View File

@ -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(Boolean isPlayer2); public void Init();
} }

View File

@ -1,5 +1,4 @@
using System; using System.Collections;
using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using UnityEngine; using UnityEngine;
@ -11,32 +10,17 @@ 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)}, {ECommand.DOWN, new KeyBinding(KeyCode.DownArrow,KeyCode.S)},
{ECommand.UP, new KeyBinding(KeyCode.UpArrow)}, {ECommand.UP, new KeyBinding(KeyCode.UpArrow,KeyCode.W)},
{ECommand.LEFT, new KeyBinding(KeyCode.LeftArrow)}, {ECommand.LEFT, new KeyBinding(KeyCode.LeftArrow,KeyCode.A)},
{ECommand.RIGHT, new KeyBinding(KeyCode.RightArrow)}, {ECommand.RIGHT, new KeyBinding(KeyCode.RightArrow,KeyCode.D)},
{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> public void Init()
{
{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(Boolean isPlayer2)
{ {
if (InputBindings == null) if (InputBindings == null)
if (isPlayer2)
{
InputBindings = Player2KeyBindings;
}
else
{
InputBindings = DefaultKeyBindings; InputBindings = DefaultKeyBindings;
} }
} }
}

View File

@ -0,0 +1,24 @@
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;
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 23353de203a94c447af7be38973acc1d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,7 +1,6 @@
 
public enum ECommand public enum ECommand
{ {
#region Player1
NONE = 0, NONE = 0,
LEFT = 1, LEFT = 1,
RIGHT = 2, RIGHT = 2,
@ -9,17 +8,5 @@ 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
} }

View File

@ -1,5 +1,4 @@
 
using System;
using System.Collections.Generic; using System.Collections.Generic;
public interface IInputTranslator public interface IInputTranslator
@ -18,11 +17,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, Boolean isPlayer2) public InputTranslator(IBindingHolder<T> holder)
{ {
commandTranslators = new List<ICommandTranslator>(); commandTranslators = new List<ICommandTranslator>();
bindingHolder = holder; bindingHolder = holder;
bindingHolder.Init(isPlayer2); bindingHolder.Init();
} }
//public void Init(IBindingHolder<T> holder) //public void Init(IBindingHolder<T> holder)
//{ //{

View File

@ -1,8 +1,7 @@
using Pools; using System.Collections;
using System.Collections.Generic;
using UnityEngine; using UnityEngine;
namespace Obstacles
{
[RequireComponent(typeof(BoxCollider))] [RequireComponent(typeof(BoxCollider))]
public class Obstacle : PoolingObject<Obstacle>, IObstacle,IDamageDealer,IResettable public class Obstacle : PoolingObject<Obstacle>, IObstacle,IDamageDealer,IResettable
{ {
@ -13,7 +12,6 @@ namespace Obstacles
private void Awake() private void Awake()
{ {
Collider = GetComponent<BoxCollider>(); Collider = GetComponent<BoxCollider>();
OwningPool = FindFirstObjectByType<ObstaclePool>();
} }
public void ResetToDefault() public void ResetToDefault()
{ {
@ -33,4 +31,3 @@ namespace Obstacles
target.TakeDamage(amount); target.TakeDamage(amount);
} }
} }
}

View File

@ -6,7 +6,7 @@ public class Pause : MonoBehaviour,ICommandTranslator
{ {
private void Start() private void Start()
{ {
GameSession.Instance.AddCommandTranslator(this, false); GameSession.Instance.AddCommandTranslator(this);
} }
public void TranslateCommand(ECommand command, PressedState state) public void TranslateCommand(ECommand command, PressedState state)

View File

@ -41,8 +41,7 @@ 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;

View File

@ -1,8 +1,6 @@
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))]
@ -22,61 +20,36 @@ 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 AnimationCurve JumpDeltaYCurve
{
get { return jumpDeltaYCurve; }
}
public PlayerAnimator PlayerAnimator { get; private set; } public PlayerAnimator PlayerAnimator { get; private set; }
#endregion #endregion
#region PlayerComponents #region PlayerComponents
[SerializeField] internal PlayerData playerData; [SerializeField] private 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()
{ {
playerData = GameSession.Instance.GetPlayerData(); GameSession.Instance.AddCommandTranslator(this);
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);
@ -86,34 +59,32 @@ public class Player : MonoBehaviour, IResettable, ICommandTranslator
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 / 1000; playerData.CurrentSpeed += playerData.SpeedAcceleration / 100;
// 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
@ -126,10 +97,8 @@ public class Player : MonoBehaviour, IResettable, ICommandTranslator
{ {
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();
@ -137,21 +106,16 @@ 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()
{ {
isDead = true; PlayerData.CurrentSpeed = PlayerData.InitialSpeed;
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()
@ -160,21 +124,19 @@ 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)
@ -184,20 +146,15 @@ 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:
@ -205,5 +162,4 @@ public class Player : MonoBehaviour, IResettable, ICommandTranslator
} }
} }
} }
} }

View File

@ -1,38 +1,39 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine; using UnityEngine;
public class PlayerAnimator public class PlayerAnimator
{ {
private readonly Animator _animator; private Animator animator;
private readonly int _runningHash = Animator.StringToHash("Run"); private int runningHash = Animator.StringToHash("Run");
private readonly int _deadHash = Animator.StringToHash("Dead"); private int deadHash = Animator.StringToHash("Dead");
private readonly int _jumpHash = Animator.StringToHash("Jump"); private int jumpHash = Animator.StringToHash("Jump");
private readonly int _slideHash = Animator.StringToHash("Slide"); private int slideHash = Animator.StringToHash("Slide");
private readonly int _idleHash = Animator.StringToHash("Idle"); private 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)
{ {
if(_animator){} animator?.SetBool(idleHash, isIdle);
_animator?.SetBool(_idleHash, isIdle);
} }
} }

View File

@ -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,6 +22,7 @@ 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); //вынести в контроллер
@ -37,6 +38,28 @@ 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;
@ -60,6 +83,9 @@ public abstract class MovingState : PlayerState
playerSM.HorizontalDeltaPosition += playerSM.PlayerTransform.right * diffX.x; playerSM.HorizontalDeltaPosition += playerSM.PlayerTransform.right * diffX.x;
} }
} }
} }

View File

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

View File

@ -4,13 +4,14 @@ using UnityEngine.Animations.Rigging;
public class PlayerStateMachine : StateMachine<Player> public class PlayerStateMachine : StateMachine<Player>
{ {
private Player player; private Player player;
public PlayerData playerData; private 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 = GameSession.Instance.GetPlayerData(); playerData = player.PlayerData;
playerTransform = player.transform; playerTransform = player.transform;
InitStates(); InitStates();
} }

View File

@ -2,18 +2,17 @@ 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;
public int coinCount; private 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 { };
[FormerlySerializedAs("PlayerHUD")] [SerializeField] private PlayerHUDView playerHUD; [SerializeField] private PlayerHUDView PlayerHUD;
private void Awake() private void Awake()
{ {
ResetToDefault(); ResetToDefault();
@ -44,7 +43,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()
@ -55,12 +54,4 @@ 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());
}
} }

View File

@ -1,9 +1,5 @@
using System; using System;
using System.Collections; using System.Collections;
using UnityEngine; using UnityEngine;
namespace Pools public class CoinPool : BasePool<Coin>
{
public sealed class CoinPool : BasePool<Coin>
{} {}
}

View File

@ -8,8 +8,6 @@
// </auto-generated> // </auto-generated>
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
using Obstacles;
namespace Pools namespace Pools
{ {

View File

@ -1,29 +1,28 @@
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;
[SerializeField] private CoinPool coinPool; public CoinPool CoinPool { get; private set; }
[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 obstaclePool = ObstaclePools.GetRandomElement();
var obstacle = obstaclePool.Spawn(); var obstacle = obstaclePool.Spawn();
chunkToFill.Obstacles.Add(obstacle); chunkToFill.Obstacles.Add(obstacle);
obstacle.transform.SetParent(chunkToFill.transform, true); obstacle.transform.SetParent(chunkToFill.transform, true);
obstacle.transform.localPosition = chunkToFill.Grid.GetRandomPosition(); obstacle.transform.localPosition = chunkToFill.Grid.GetRandomPosition();
if (obstacle.IsOnAllLanes) if (obstacle.IsOnAllLanes)
{ {
obstacle.transform.localPosition = new Vector3( obstacle.transform.localPosition = new Vector3(
@ -32,40 +31,6 @@ public class ChunkGenerator : MonoBehaviour
transform.localPosition.z 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;
} }
} }

View File

@ -1,7 +1,6 @@
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))]
@ -38,7 +37,6 @@ 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)
{ {

View File

@ -8,7 +8,6 @@ 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; }

View File

@ -1,136 +1,92 @@
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 List<ScoreboardEntry> listeScore; public ScoreboardEntriesTable(List<ScoreboardEntry> entries)
public ScoreboardEntriesTable()
{ {
listeScore = new List<ScoreboardEntry>(); this.entries = entries;
} }
}
public class Scoreboard : MonoBehaviour
{
private string apiUrl = "https://awesomerunner.lagaudiere.uk/score";
public List<ScoreboardEntry> entries = new List<ScoreboardEntry>(); public List<ScoreboardEntry> entries = new List<ScoreboardEntry>();
}
public class Scoreboard : MonoBehaviour, ICommandTranslator
{
[SerializeField] private ScoreboardView scoreboardView;
[SerializeField] private int maxEntries;
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()
{ {
StartCoroutine(GetScoreboard()); GameSession.Instance.AddCommandTranslator(this);
} string jsonScoreboardEntries = PlayerPrefs.GetString("ScoreboardEntriesTableTest"); //Binary file
private IEnumerator GetScoreboard() ScoreboardEntriesTable entriesTable = JsonUtility.FromJson<ScoreboardEntriesTable>(jsonScoreboardEntries);
if (entriesTable == null)
return;
if (entriesTable.entries == null)
return;
for (int i = 0; i < entriesTable.entries.Count; i++)
{ {
Debug.Log("Fetching scoreboard..."); entries.Add(entriesTable.entries[i]);
OnEntryAdded?.Invoke(entriesTable.entries[i]);
}
using (UnityWebRequest request = UnityWebRequest.Get(apiUrl)) // Sort scores descending then creates cards (invert this order cause issues)
entries.Sort((x, y) => y.Score.CompareTo(x.Score));
scoreboardView.AddEntries(entries.GetRange(0, maxEntries));
}
public void AddScoreboardEntry(string entryName, int entryScore)
{ {
yield return request.SendWebRequest(); ScoreboardEntry entry = new ScoreboardEntry(entryName, entryScore);
entries.Add(entry);
OnEntryAdded?.Invoke(entry);
}
if (request.result == UnityWebRequest.Result.Success) public void SortScoreboardEntriesByHighscore(List<ScoreboardEntry> entries)
{ {
string json = request.downloadHandler.text; entries.Sort((x,y) => y.Score.CompareTo(x.Score));
Debug.Log("Received JSON: " + json); }
// Désérialiser directement en un tableau public void SortScoreboardCardsDatasByHighscore(List<PlayerScoreboardCardData> scoreboardCardDatas)
ScoreboardEntry[] scoreboardEntriesArray = JsonHelper.FromJson<ScoreboardEntry>(json);
if (scoreboardEntriesArray != null)
{ {
entries = new List<ScoreboardEntry>(scoreboardEntriesArray); scoreboardCardDatas.Sort((x, y) => y.playerScore.CompareTo(x.playerScore));
SortScoreboardEntriesByHighscore(entries);
UpdateScoreboardView();
} }
}
else
{
Debug.LogError("Erreur lors de la récupération du scoreboard : " + request.error);
}
}
}
public void AddScoreboardEntry(ScoreboardEntry entry) public void AddScoreboardEntry(ScoreboardEntry entry)
{ {
entries.Add(entry); entries.Add(entry);
SortScoreboardEntriesByHighscore(entries);
UpdateScoreboardView();
StartCoroutine(PostScoreboardEntry(entry));
}
private IEnumerator PostScoreboardEntry(ScoreboardEntry entry)
{
string json = JsonUtility.ToJson(entry);
using (UnityWebRequest request = new UnityWebRequest(apiUrl, "POST"))
{
byte[] bodyRaw = System.Text.Encoding.UTF8.GetBytes(json);
request.uploadHandler = new UploadHandlerRaw(bodyRaw);
request.downloadHandler = new DownloadHandlerBuffer();
request.SetRequestHeader("Content-Type", "application/json");
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)
{
Debug.Log("Score ajouté avec succès !");
OnEntryAdded?.Invoke(entry); OnEntryAdded?.Invoke(entry);
} SaveScoreboardEntriesTable();
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 void SaveScoreboardEntriesTable()
} {
ScoreboardEntriesTable scoreboardEntriesTable = new ScoreboardEntriesTable(entries);
string jsonScoreboardEntries = JsonUtility.ToJson(scoreboardEntriesTable);
PlayerPrefs.SetString("ScoreboardEntriesTableTest", jsonScoreboardEntries);
PlayerPrefs.Save();
} }
public static class JsonHelper public void TranslateCommand(ECommand command, PressedState state)
{ {
public static T[] FromJson<T>(string json) switch (command)
{ {
string wrappedJson = "{\"items\":" + json + "}"; case ECommand.OPEN_SCOREBOARD:
Wrapper<T> wrapper = JsonUtility.FromJson<Wrapper<T>>(wrappedJson); if (state.IsPressed == true)
return wrapper.items; scoreboardView.Show(true);
} if (state.IsReleased == true)
scoreboardView.Show(false);
[System.Serializable] break;
private class Wrapper<T> default:
{ scoreboardView.Show(false);
public T[] items; break;
} }
} }
[Serializable]
public class ScoreboardEntriesWrapper
{
public ScoreboardEntry[] listeScore;
} }

View File

@ -1,4 +1,3 @@
using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using UnityEngine; using UnityEngine;
@ -6,13 +5,13 @@ using UnityEngine;
[System.Serializable] [System.Serializable]
public class ScoreboardEntry public class ScoreboardEntry
{ {
public string pseudo; [SerializeField] private float score;
public int score; [SerializeField] private string name;
public float Score { get { return score; } private set { score = value; } }
public ScoreboardEntry(string pseudo, int score) public string Name { get { return name; } private set { name = value; } }
public ScoreboardEntry(string name,float score)
{ {
this.pseudo = pseudo; this.name = name;
this.score = score; this.score = score;
} }
} }

View File

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

View File

@ -1,33 +0,0 @@
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
}
}

View File

@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 73a49fe834731374cbc6b8886a79c0f1

View File

@ -1,26 +0,0 @@
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];
}
}
}
}

View File

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

View File

@ -1,13 +0,0 @@
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();
}
}

View File

@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 21b477373147aaf4a81c8bf75f8984a5

View File

@ -1,62 +0,0 @@
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();
}
}
}

View File

@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: 80d0e44a44be4982a77850a10cbae2f9
timeCreated: 1736867806

View File

@ -26,12 +26,12 @@ public class PausedView : BaseView
mainMenuButton.onClick.AddListener(() => mainMenuButton.onClick.AddListener(() =>
{ {
GameSession.Instance.PauseBackToMainMenu(); GameSession.Instance.GoToMainMenu();
}); });
restartButton.onClick.AddListener(() => restartButton.onClick.AddListener(() =>
{ {
GameSession.Instance.PausePlayAgain(); GameSession.Instance.GoToGameScene();
}); });
base.Init(); base.Init();
} }

View File

@ -21,37 +21,31 @@ 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 (layoutGroup == null) //if (playerCards.ContainsKey(cardData.playerName))
{ // 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))

View File

@ -0,0 +1,140 @@

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

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: f7b00d918e7b13c4c8823278d24d708a
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,4 +1,3 @@
using Assets.Scripts.GameSession;
using UnityEngine; using UnityEngine;
using UnityEngine.SceneManagement; using UnityEngine.SceneManagement;
using UnityEngine.UI; using UnityEngine.UI;
@ -21,6 +20,6 @@ public class RestartButton : MonoBehaviour
public void RestartGame() public void RestartGame()
{ {
GoToScene.GoToSoloMode(); SceneManager.LoadScene("GameScene");
} }
} }

View File

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

View File

@ -1,23 +0,0 @@
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