added turnaround

This commit is contained in:
Jeremy Smitherman 2026-04-24 20:33:05 -05:00
parent 4acaaa56e7
commit 8ed794569e
29 changed files with 473 additions and 383 deletions

View File

@ -6,9 +6,31 @@
<component name="ChangeListManager">
<list default="true" id="60468364-7d9c-427f-83f9-f6cd83ef8783" name="Changes" comment="">
<change beforePath="$PROJECT_DIR$/.idea/.idea.SpringJam2026/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/.idea.SpringJam2026/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Assets/Prefabs/Catepillar/Player.prefab" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/Prefabs/Catepillar/Player.prefab" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Assets/Scenes/Bootstrap.unity" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/Scenes/Bootstrap.unity" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Assets/Scenes/MainMenu.unity" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/Scenes/MainMenu.unity" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Assets/Scripts/State/Game/MainMenuState.cs" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/Scripts/State/Game/MainMenuState.cs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Assets/Scenes/Game.unity" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/Scenes/Game.unity" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Assets/Tilemaps/Forest.png.meta" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/Tilemaps/Forest.png.meta" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_0.asset" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_0.asset" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_1.asset" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_1.asset" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_10.asset" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_10.asset" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_11.asset" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_11.asset" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_12.asset" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_12.asset" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_13.asset" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_13.asset" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_14.asset" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_14.asset" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_15.asset" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_15.asset" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_16.asset" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_16.asset" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_17.asset" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_17.asset" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_18.asset" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_18.asset" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_19.asset" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_19.asset" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_2.asset" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_2.asset" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_20.asset" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_20.asset" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_3.asset" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_3.asset" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_4.asset" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_4.asset" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_5.asset" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_5.asset" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_6.asset" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_6.asset" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_7.asset" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_7.asset" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_8.asset" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_8.asset" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_9.asset" beforeDir="false" afterPath="$PROJECT_DIR$/Assets/Tilemaps/Forest/Forest_9.asset" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -19,13 +41,14 @@
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="HighlightingSettingsPerFile">
<setting file="file://$PROJECT_DIR$/Assets/Scripts/Player/Movement.cs" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/Assets/Scripts/State/Game/MainGameState.cs" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/Assets/Scripts/State/Game/MainMenuState.cs" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/Assets/Scripts/State/Game/MainStateMachine.cs" root0="FORCE_HIGHLIGHTING" />
</component>
<component name="ProjectColorInfo"><![CDATA[{
"associatedIndex": 6
}]]></component>
<component name="ProjectColorInfo">{
&quot;associatedIndex&quot;: 6
}</component>
<component name="ProjectId" id="3CoTb6B6EdTDbi9WYVyvywGIJvD" />
<component name="ProjectLevelVcsManager">
<ConfirmationsSetting value="1" id="Add" />
@ -40,7 +63,7 @@
"ModuleVcsDetector.initialDetectionPerformed": "true",
"RunOnceActivity.ShowReadmeOnStart": "true",
"RunOnceActivity.git.unshallow": "true",
"git-widget-placeholder": "feat/state",
"git-widget-placeholder": "main",
"ignore.virus.scanning.warn.message": "true",
"node.js.detected.package.eslint": "true",
"node.js.detected.package.tslint": "true",
@ -114,7 +137,7 @@
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1777050991106</updated>
<workItem from="1777050993247" duration="5854000" />
<workItem from="1777050993247" duration="8871000" />
</task>
<servers />
</component>

View File

@ -10,7 +10,9 @@ GameObject:
m_Component:
- component: {fileID: 6196444245332325679}
- component: {fileID: 2598533458249844269}
- component: {fileID: 5087268880421362203}
- component: {fileID: 849756540516150458}
- component: {fileID: 4169369283586250626}
- component: {fileID: 3534034070345576868}
m_Layer: 0
m_Name: Player
m_TagString: Untagged
@ -56,65 +58,85 @@ Animator:
m_AllowConstantClipSamplingOptimization: 1
m_KeepAnimatorStateOnDisable: 0
m_WriteDefaultValuesOnDisable: 0
--- !u!212 &5087268880421362203
SpriteRenderer:
serializedVersion: 2
--- !u!70 &849756540516150458
CapsuleCollider2D:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7621021177568661959}
m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 0
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 0
m_RayTraceProcedural: 0
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
m_ForceMeshLod: -1
m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, 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: 0
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_MaskInteraction: 0
m_Sprite: {fileID: 5487822846996609747, guid: b960c99507aa1a84a8f28bdcbcc81c19, type: 3}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_FlipX: 0
m_FlipY: 0
m_DrawMode: 0
serializedVersion: 3
m_Density: 1
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_ForceSendLayers:
serializedVersion: 2
m_Bits: 4294967295
m_ForceReceiveLayers:
serializedVersion: 2
m_Bits: 4294967295
m_ContactCaptureLayers:
serializedVersion: 2
m_Bits: 4294967295
m_CallbackLayers:
serializedVersion: 2
m_Bits: 4294967295
m_IsTrigger: 0
m_UsedByEffector: 0
m_CompositeOperation: 0
m_CompositeOrder: 0
m_Offset: {x: 0.23512886, y: 0.114549875}
m_Size: {x: 1, y: 0.65625}
m_AdaptiveModeThreshold: 0.5
m_SpriteTileMode: 0
m_WasSpriteAssigned: 1
m_SpriteSortPoint: 0
m_Direction: 1
--- !u!50 &4169369283586250626
Rigidbody2D:
serializedVersion: 5
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7621021177568661959}
m_BodyType: 0
m_Simulated: 1
m_UseFullKinematicContacts: 0
m_UseAutoMass: 0
m_Mass: 1
m_LinearDamping: 0
m_AngularDamping: 0.05
m_GravityScale: 1
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_Interpolate: 1
m_SleepingMode: 1
m_CollisionDetection: 1
m_Constraints: 4
--- !u!114 &3534034070345576868
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7621021177568661959}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 35cab81567d235b489aef6d0fa17c729, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Player.Movement
runSpeed: 1
springPower: 0
spriteRenderer: {fileID: 0}
--- !u!1 &8270890549788907285
GameObject:
m_ObjectHideFlags: 0

View File

@ -136,7 +136,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!4 &1327356648
Transform:
m_ObjectHideFlags: 0
@ -278,7 +278,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!114 &1469922750
MonoBehaviour:
m_ObjectHideFlags: 0
@ -324,7 +324,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!114 &1671688484
MonoBehaviour:
m_ObjectHideFlags: 0
@ -385,7 +385,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!114 &1755353617
MonoBehaviour:
m_ObjectHideFlags: 0

File diff suppressed because it is too large Load Diff

View File

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

View File

@ -0,0 +1,57 @@
using System;
using System.Collections.Generic;
using UnityEngine;
namespace Player
{
[RequireComponent(typeof(Rigidbody2D))]
public class Movement : MonoBehaviour
{
[SerializeField] private float runSpeed;
[SerializeField] private float springPower;
[SerializeField] private SpriteRenderer spriteRenderer;
[SerializeField] private float turnDelay;
private bool _onSpring;
private Rigidbody2D _rb;
private bool _grounded = true;
private bool _facingLeft;
private float _turnDelayTimer;
private void Awake()
{
_rb = GetComponent<Rigidbody2D>();
}
private void Update()
{
_turnDelayTimer += Time.deltaTime;
spriteRenderer.flipX = !_facingLeft;
}
private void FixedUpdate()
{
if (_grounded)
{
_rb.linearVelocityX = _facingLeft ? -runSpeed : runSpeed;
}
}
private void OnCollisionStay2D(Collision2D other)
{
if (_turnDelayTimer < turnDelay) return;
var contacts = new List<ContactPoint2D>();
other.GetContacts(contacts);
foreach(var c in contacts)
{
var x = c.normal.x;
if (Mathf.Abs(x) > 0.1f)
{
_facingLeft = !_facingLeft;
_turnDelayTimer = 0f;
return;
}
}
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 35cab81567d235b489aef6d0fa17c729

View File

@ -60,7 +60,7 @@ TextureImporter:
compressionQuality: 50
spriteMode: 2
spriteExtrude: 1
spriteMeshType: 1
spriteMeshType: 0
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 16
@ -560,7 +560,7 @@ TextureImporter:
width: 8
height: 8
alignment: 0
pivot: {x: 0, y: 0}
pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []

View File

@ -33,4 +33,4 @@ MonoBehaviour:
e33: 1
m_InstancedGameObject: {fileID: 0}
m_Flags: 1
m_ColliderType: 1
m_ColliderType: 2

View File

@ -33,4 +33,4 @@ MonoBehaviour:
e33: 1
m_InstancedGameObject: {fileID: 0}
m_Flags: 1
m_ColliderType: 1
m_ColliderType: 2

View File

@ -33,4 +33,4 @@ MonoBehaviour:
e33: 1
m_InstancedGameObject: {fileID: 0}
m_Flags: 1
m_ColliderType: 1
m_ColliderType: 2

View File

@ -33,4 +33,4 @@ MonoBehaviour:
e33: 1
m_InstancedGameObject: {fileID: 0}
m_Flags: 1
m_ColliderType: 1
m_ColliderType: 2

View File

@ -33,4 +33,4 @@ MonoBehaviour:
e33: 1
m_InstancedGameObject: {fileID: 0}
m_Flags: 1
m_ColliderType: 1
m_ColliderType: 2

View File

@ -33,4 +33,4 @@ MonoBehaviour:
e33: 1
m_InstancedGameObject: {fileID: 0}
m_Flags: 1
m_ColliderType: 1
m_ColliderType: 2

View File

@ -33,4 +33,4 @@ MonoBehaviour:
e33: 1
m_InstancedGameObject: {fileID: 0}
m_Flags: 1
m_ColliderType: 1
m_ColliderType: 2

View File

@ -33,4 +33,4 @@ MonoBehaviour:
e33: 1
m_InstancedGameObject: {fileID: 0}
m_Flags: 1
m_ColliderType: 1
m_ColliderType: 2

View File

@ -33,4 +33,4 @@ MonoBehaviour:
e33: 1
m_InstancedGameObject: {fileID: 0}
m_Flags: 1
m_ColliderType: 1
m_ColliderType: 2

View File

@ -33,4 +33,4 @@ MonoBehaviour:
e33: 1
m_InstancedGameObject: {fileID: 0}
m_Flags: 1
m_ColliderType: 1
m_ColliderType: 2

View File

@ -33,4 +33,4 @@ MonoBehaviour:
e33: 1
m_InstancedGameObject: {fileID: 0}
m_Flags: 1
m_ColliderType: 1
m_ColliderType: 2

View File

@ -33,4 +33,4 @@ MonoBehaviour:
e33: 1
m_InstancedGameObject: {fileID: 0}
m_Flags: 1
m_ColliderType: 1
m_ColliderType: 2

View File

@ -33,4 +33,4 @@ MonoBehaviour:
e33: 1
m_InstancedGameObject: {fileID: 0}
m_Flags: 1
m_ColliderType: 1
m_ColliderType: 2

View File

@ -33,4 +33,4 @@ MonoBehaviour:
e33: 1
m_InstancedGameObject: {fileID: 0}
m_Flags: 1
m_ColliderType: 1
m_ColliderType: 2

View File

@ -33,4 +33,4 @@ MonoBehaviour:
e33: 1
m_InstancedGameObject: {fileID: 0}
m_Flags: 1
m_ColliderType: 1
m_ColliderType: 2

View File

@ -33,4 +33,4 @@ MonoBehaviour:
e33: 1
m_InstancedGameObject: {fileID: 0}
m_Flags: 1
m_ColliderType: 1
m_ColliderType: 2

View File

@ -33,4 +33,4 @@ MonoBehaviour:
e33: 1
m_InstancedGameObject: {fileID: 0}
m_Flags: 1
m_ColliderType: 1
m_ColliderType: 2

View File

@ -33,4 +33,4 @@ MonoBehaviour:
e33: 1
m_InstancedGameObject: {fileID: 0}
m_Flags: 1
m_ColliderType: 1
m_ColliderType: 2

View File

@ -33,4 +33,4 @@ MonoBehaviour:
e33: 1
m_InstancedGameObject: {fileID: 0}
m_Flags: 1
m_ColliderType: 1
m_ColliderType: 2

View File

@ -33,4 +33,4 @@ MonoBehaviour:
e33: 1
m_InstancedGameObject: {fileID: 0}
m_Flags: 1
m_ColliderType: 1
m_ColliderType: 2

View File

@ -33,4 +33,4 @@ MonoBehaviour:
e33: 1
m_InstancedGameObject: {fileID: 0}
m_Flags: 1
m_ColliderType: 1
m_ColliderType: 2