From 730fe6f18301b0196fd6519a33e293c34b1a0d6b Mon Sep 17 00:00:00 2001 From: Jakob Feldmann Date: Fri, 5 Jan 2024 00:12:48 +0100 Subject: [PATCH] feat: basic two player one keyboard input --- Assets/Input/InputActionMaps.cs | 637 ++++++++++++++++++ Assets/Input/InputActionMaps.cs.meta | 11 + .../Input/InputActionMaps.inputactions.meta | 2 +- .../Materials/FresnelRippleMaterial.mat | 4 +- Assets/Prefabs/Player Blue.prefab | 63 +- Assets/Prefabs/Player Gray.prefab | 65 +- Assets/Scenes/BattleField.unity | 256 +------ Assets/Scripts/Announcments.cs | 25 +- Assets/Scripts/CameraOperator.cs | 1 + Assets/Scripts/GameManager.cs | 139 +++- Assets/Scripts/PlayerController.cs | 13 +- 11 files changed, 948 insertions(+), 268 deletions(-) create mode 100644 Assets/Input/InputActionMaps.cs create mode 100644 Assets/Input/InputActionMaps.cs.meta diff --git a/Assets/Input/InputActionMaps.cs b/Assets/Input/InputActionMaps.cs new file mode 100644 index 0000000..d5660ff --- /dev/null +++ b/Assets/Input/InputActionMaps.cs @@ -0,0 +1,637 @@ +//------------------------------------------------------------------------------ +// +// This code was auto-generated by com.unity.inputsystem:InputActionCodeGenerator +// version 1.6.3 +// from Assets/Input/InputActionMaps.inputactions +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine.InputSystem; +using UnityEngine.InputSystem.Utilities; + +public partial class @InputActionMaps: IInputActionCollection2, IDisposable +{ + public InputActionAsset asset { get; } + public @InputActionMaps() + { + asset = InputActionAsset.FromJson(@"{ + ""name"": ""InputActionMaps"", + ""maps"": [ + { + ""name"": ""Player"", + ""id"": ""048b594b-7049-4378-97bf-bf33615ac9a2"", + ""actions"": [ + { + ""name"": ""Thrust"", + ""type"": ""Value"", + ""id"": ""f49115e0-8e49-49d0-86d9-b401b5dc9a7e"", + ""expectedControlType"": ""Axis"", + ""processors"": """", + ""interactions"": """", + ""initialStateCheck"": true + }, + { + ""name"": ""Steer"", + ""type"": ""Value"", + ""id"": ""b81175da-8d47-46a1-8d25-39d0aad32a7d"", + ""expectedControlType"": ""Axis"", + ""processors"": """", + ""interactions"": """", + ""initialStateCheck"": true + }, + { + ""name"": ""Reset"", + ""type"": ""Button"", + ""id"": ""6ab0c9d5-b21f-4819-b5c8-ad277a1246c7"", + ""expectedControlType"": ""Button"", + ""processors"": """", + ""interactions"": """", + ""initialStateCheck"": false + }, + { + ""name"": ""Boost"", + ""type"": ""Button"", + ""id"": ""c8819d8c-8dc4-4eb6-ae07-132d6fffbed4"", + ""expectedControlType"": ""Button"", + ""processors"": """", + ""interactions"": """", + ""initialStateCheck"": false + } + ], + ""bindings"": [ + { + ""name"": ""ArrowUpDown"", + ""id"": ""a4cf021d-ea53-421e-acc3-5512320a66c6"", + ""path"": ""1DAxis"", + ""interactions"": """", + ""processors"": """", + ""groups"": """", + ""action"": ""Thrust"", + ""isComposite"": true, + ""isPartOfComposite"": false + }, + { + ""name"": ""Negative"", + ""id"": ""c57f6563-83fc-4287-947b-517897d60b48"", + ""path"": ""/downArrow"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Keyboard 1"", + ""action"": ""Thrust"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""Positive"", + ""id"": ""887dfb71-2069-4f93-85bf-feb5d766a4e0"", + ""path"": ""/upArrow"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Keyboard 1"", + ""action"": ""Thrust"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""SW"", + ""id"": ""530564dc-8d85-4da2-9dfe-de7226088d53"", + ""path"": ""1DAxis"", + ""interactions"": """", + ""processors"": """", + ""groups"": """", + ""action"": ""Thrust"", + ""isComposite"": true, + ""isPartOfComposite"": false + }, + { + ""name"": ""negative"", + ""id"": ""638cd1c8-871c-4144-bc85-fd97073775e3"", + ""path"": ""/s"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Keyboard 2"", + ""action"": ""Thrust"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""positive"", + ""id"": ""41279947-f349-4d74-87f6-0150117546bc"", + ""path"": ""/w"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Keyboard 2"", + ""action"": ""Thrust"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""Triggers"", + ""id"": ""c23f737f-7d0b-44c9-adf2-af79bc907fe5"", + ""path"": ""1DAxis"", + ""interactions"": """", + ""processors"": """", + ""groups"": """", + ""action"": ""Thrust"", + ""isComposite"": true, + ""isPartOfComposite"": false + }, + { + ""name"": ""negative"", + ""id"": ""efa56efa-cdbd-4a0c-942d-d9f63f34b41d"", + ""path"": ""/leftTrigger"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Controller"", + ""action"": ""Thrust"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""positive"", + ""id"": ""b09aaa96-ba43-4e88-a893-f68100d60f5d"", + ""path"": ""/rightTrigger"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Controller"", + ""action"": ""Thrust"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""DPAD"", + ""id"": ""553d2d70-1e91-4da5-a081-0d8b5932ed7f"", + ""path"": ""1DAxis"", + ""interactions"": """", + ""processors"": """", + ""groups"": """", + ""action"": ""Thrust"", + ""isComposite"": true, + ""isPartOfComposite"": false + }, + { + ""name"": ""negative"", + ""id"": ""6d3b6aec-4165-44ff-b470-0757bf24e204"", + ""path"": ""/dpad/down"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Controller"", + ""action"": ""Thrust"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""positive"", + ""id"": ""ad2cd039-33a1-4217-88a3-a92cbe881eff"", + ""path"": ""/dpad/up"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Controller"", + ""action"": ""Thrust"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""Buttons"", + ""id"": ""c2bb8b7b-6b05-402f-8efd-88ee0b799a0b"", + ""path"": ""1DAxis"", + ""interactions"": """", + ""processors"": """", + ""groups"": """", + ""action"": ""Thrust"", + ""isComposite"": true, + ""isPartOfComposite"": false + }, + { + ""name"": ""negative"", + ""id"": ""1f63525a-edbb-407f-9cc0-46c47fb83195"", + ""path"": ""/buttonWest"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Controller"", + ""action"": ""Thrust"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""positive"", + ""id"": ""dea46670-a213-4f87-b233-2da9e13c61d8"", + ""path"": ""/buttonSouth"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Controller"", + ""action"": ""Thrust"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""ArrowLeftRight"", + ""id"": ""9fb0a522-e3c2-4a96-abba-243a4d975417"", + ""path"": ""1DAxis"", + ""interactions"": """", + ""processors"": """", + ""groups"": """", + ""action"": ""Steer"", + ""isComposite"": true, + ""isPartOfComposite"": false + }, + { + ""name"": ""negative"", + ""id"": ""8244e67c-862d-4290-81d9-166e37693466"", + ""path"": ""/leftArrow"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Keyboard 1"", + ""action"": ""Steer"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""positive"", + ""id"": ""76453859-ad22-4689-8468-2f8f70a0e62f"", + ""path"": ""/rightArrow"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Keyboard 1"", + ""action"": ""Steer"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""AD"", + ""id"": ""37147163-13e3-42c9-bd71-b98dd06b17d7"", + ""path"": ""1DAxis"", + ""interactions"": """", + ""processors"": """", + ""groups"": """", + ""action"": ""Steer"", + ""isComposite"": true, + ""isPartOfComposite"": false + }, + { + ""name"": ""negative"", + ""id"": ""9ab0d63e-3836-40bf-969a-dd963113eb4b"", + ""path"": ""/a"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Keyboard 2"", + ""action"": ""Steer"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""positive"", + ""id"": ""2bb17c0d-1ff6-446d-8963-7e83b44007fe"", + ""path"": ""/d"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Keyboard 2"", + ""action"": ""Steer"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""DPAD"", + ""id"": ""2d7e4f88-0f00-440f-a4d9-4ed030ca5aee"", + ""path"": ""1DAxis"", + ""interactions"": """", + ""processors"": """", + ""groups"": """", + ""action"": ""Steer"", + ""isComposite"": true, + ""isPartOfComposite"": false + }, + { + ""name"": ""negative"", + ""id"": ""ea165035-cea6-44cb-9cdf-9d004a1c27e8"", + ""path"": ""/dpad/left"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Controller"", + ""action"": ""Steer"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""positive"", + ""id"": ""5a0913b9-2745-49df-9996-df7f530dab22"", + ""path"": ""/dpad/right"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Controller"", + ""action"": ""Steer"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""LeftStickX"", + ""id"": ""42630580-938e-4cab-9747-35f1ea15fc9a"", + ""path"": ""1DAxis"", + ""interactions"": """", + ""processors"": """", + ""groups"": """", + ""action"": ""Steer"", + ""isComposite"": true, + ""isPartOfComposite"": false + }, + { + ""name"": ""negative"", + ""id"": ""30818f05-cc2e-42f8-a656-a9237d9ae1ff"", + ""path"": ""/leftStick/left"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Controller"", + ""action"": ""Steer"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": ""positive"", + ""id"": ""5939b118-47b4-4558-9b18-23d77cc433c1"", + ""path"": ""/leftStick/right"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Controller"", + ""action"": ""Steer"", + ""isComposite"": false, + ""isPartOfComposite"": true + }, + { + ""name"": """", + ""id"": ""8c09092a-7323-4f5c-80df-19bfe90a207c"", + ""path"": ""/r"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Keyboard 1;Keyboard 2"", + ""action"": ""Reset"", + ""isComposite"": false, + ""isPartOfComposite"": false + }, + { + ""name"": """", + ""id"": ""b50ff906-5e23-4bd0-b5b7-98aeb46a2284"", + ""path"": ""/select"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Controller"", + ""action"": ""Reset"", + ""isComposite"": false, + ""isPartOfComposite"": false + }, + { + ""name"": """", + ""id"": ""f76aad49-c115-4d72-a860-b674c8489543"", + ""path"": ""/ctrl"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Keyboard 1"", + ""action"": ""Boost"", + ""isComposite"": false, + ""isPartOfComposite"": false + }, + { + ""name"": """", + ""id"": ""90de50d0-0adf-41c0-b8d2-ffd9ff0d55f2"", + ""path"": ""/shift"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Keyboard 2"", + ""action"": ""Boost"", + ""isComposite"": false, + ""isPartOfComposite"": false + }, + { + ""name"": """", + ""id"": ""175de4ed-6b10-420d-bc46-5abf4b21486f"", + ""path"": ""/buttonEast"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Controller"", + ""action"": ""Boost"", + ""isComposite"": false, + ""isPartOfComposite"": false + }, + { + ""name"": """", + ""id"": ""a7d544cb-7418-4091-bb4a-5e24cafb4bec"", + ""path"": ""/leftShoulder"", + ""interactions"": """", + ""processors"": """", + ""groups"": ""Controller"", + ""action"": ""Boost"", + ""isComposite"": false, + ""isPartOfComposite"": false + } + ] + } + ], + ""controlSchemes"": [ + { + ""name"": ""Controller"", + ""bindingGroup"": ""Controller"", + ""devices"": [ + { + ""devicePath"": """", + ""isOptional"": false, + ""isOR"": false + } + ] + }, + { + ""name"": ""Keyboard 1"", + ""bindingGroup"": ""Keyboard 1"", + ""devices"": [ + { + ""devicePath"": """", + ""isOptional"": false, + ""isOR"": false + } + ] + }, + { + ""name"": ""Keyboard 2"", + ""bindingGroup"": ""Keyboard 2"", + ""devices"": [ + { + ""devicePath"": """", + ""isOptional"": false, + ""isOR"": false + } + ] + } + ] +}"); + // Player + m_Player = asset.FindActionMap("Player", throwIfNotFound: true); + m_Player_Thrust = m_Player.FindAction("Thrust", throwIfNotFound: true); + m_Player_Steer = m_Player.FindAction("Steer", throwIfNotFound: true); + m_Player_Reset = m_Player.FindAction("Reset", throwIfNotFound: true); + m_Player_Boost = m_Player.FindAction("Boost", throwIfNotFound: true); + } + + public void Dispose() + { + UnityEngine.Object.Destroy(asset); + } + + public InputBinding? bindingMask + { + get => asset.bindingMask; + set => asset.bindingMask = value; + } + + public ReadOnlyArray? devices + { + get => asset.devices; + set => asset.devices = value; + } + + public ReadOnlyArray controlSchemes => asset.controlSchemes; + + public bool Contains(InputAction action) + { + return asset.Contains(action); + } + + public IEnumerator GetEnumerator() + { + return asset.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + public void Enable() + { + asset.Enable(); + } + + public void Disable() + { + asset.Disable(); + } + + public IEnumerable bindings => asset.bindings; + + public InputAction FindAction(string actionNameOrId, bool throwIfNotFound = false) + { + return asset.FindAction(actionNameOrId, throwIfNotFound); + } + + public int FindBinding(InputBinding bindingMask, out InputAction action) + { + return asset.FindBinding(bindingMask, out action); + } + + // Player + private readonly InputActionMap m_Player; + private List m_PlayerActionsCallbackInterfaces = new List(); + private readonly InputAction m_Player_Thrust; + private readonly InputAction m_Player_Steer; + private readonly InputAction m_Player_Reset; + private readonly InputAction m_Player_Boost; + public struct PlayerActions + { + private @InputActionMaps m_Wrapper; + public PlayerActions(@InputActionMaps wrapper) { m_Wrapper = wrapper; } + public InputAction @Thrust => m_Wrapper.m_Player_Thrust; + public InputAction @Steer => m_Wrapper.m_Player_Steer; + public InputAction @Reset => m_Wrapper.m_Player_Reset; + public InputAction @Boost => m_Wrapper.m_Player_Boost; + public InputActionMap Get() { return m_Wrapper.m_Player; } + public void Enable() { Get().Enable(); } + public void Disable() { Get().Disable(); } + public bool enabled => Get().enabled; + public static implicit operator InputActionMap(PlayerActions set) { return set.Get(); } + public void AddCallbacks(IPlayerActions instance) + { + if (instance == null || m_Wrapper.m_PlayerActionsCallbackInterfaces.Contains(instance)) return; + m_Wrapper.m_PlayerActionsCallbackInterfaces.Add(instance); + @Thrust.started += instance.OnThrust; + @Thrust.performed += instance.OnThrust; + @Thrust.canceled += instance.OnThrust; + @Steer.started += instance.OnSteer; + @Steer.performed += instance.OnSteer; + @Steer.canceled += instance.OnSteer; + @Reset.started += instance.OnReset; + @Reset.performed += instance.OnReset; + @Reset.canceled += instance.OnReset; + @Boost.started += instance.OnBoost; + @Boost.performed += instance.OnBoost; + @Boost.canceled += instance.OnBoost; + } + + private void UnregisterCallbacks(IPlayerActions instance) + { + @Thrust.started -= instance.OnThrust; + @Thrust.performed -= instance.OnThrust; + @Thrust.canceled -= instance.OnThrust; + @Steer.started -= instance.OnSteer; + @Steer.performed -= instance.OnSteer; + @Steer.canceled -= instance.OnSteer; + @Reset.started -= instance.OnReset; + @Reset.performed -= instance.OnReset; + @Reset.canceled -= instance.OnReset; + @Boost.started -= instance.OnBoost; + @Boost.performed -= instance.OnBoost; + @Boost.canceled -= instance.OnBoost; + } + + public void RemoveCallbacks(IPlayerActions instance) + { + if (m_Wrapper.m_PlayerActionsCallbackInterfaces.Remove(instance)) + UnregisterCallbacks(instance); + } + + public void SetCallbacks(IPlayerActions instance) + { + foreach (var item in m_Wrapper.m_PlayerActionsCallbackInterfaces) + UnregisterCallbacks(item); + m_Wrapper.m_PlayerActionsCallbackInterfaces.Clear(); + AddCallbacks(instance); + } + } + public PlayerActions @Player => new PlayerActions(this); + private int m_ControllerSchemeIndex = -1; + public InputControlScheme ControllerScheme + { + get + { + if (m_ControllerSchemeIndex == -1) m_ControllerSchemeIndex = asset.FindControlSchemeIndex("Controller"); + return asset.controlSchemes[m_ControllerSchemeIndex]; + } + } + private int m_Keyboard1SchemeIndex = -1; + public InputControlScheme Keyboard1Scheme + { + get + { + if (m_Keyboard1SchemeIndex == -1) m_Keyboard1SchemeIndex = asset.FindControlSchemeIndex("Keyboard 1"); + return asset.controlSchemes[m_Keyboard1SchemeIndex]; + } + } + private int m_Keyboard2SchemeIndex = -1; + public InputControlScheme Keyboard2Scheme + { + get + { + if (m_Keyboard2SchemeIndex == -1) m_Keyboard2SchemeIndex = asset.FindControlSchemeIndex("Keyboard 2"); + return asset.controlSchemes[m_Keyboard2SchemeIndex]; + } + } + public interface IPlayerActions + { + void OnThrust(InputAction.CallbackContext context); + void OnSteer(InputAction.CallbackContext context); + void OnReset(InputAction.CallbackContext context); + void OnBoost(InputAction.CallbackContext context); + } +} diff --git a/Assets/Input/InputActionMaps.cs.meta b/Assets/Input/InputActionMaps.cs.meta new file mode 100644 index 0000000..54018c3 --- /dev/null +++ b/Assets/Input/InputActionMaps.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fe00474875c3cc94bbbf8cbf03d828c0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Input/InputActionMaps.inputactions.meta b/Assets/Input/InputActionMaps.inputactions.meta index 1f58a9f..bfc019f 100644 --- a/Assets/Input/InputActionMaps.inputactions.meta +++ b/Assets/Input/InputActionMaps.inputactions.meta @@ -8,7 +8,7 @@ ScriptedImporter: assetBundleName: assetBundleVariant: script: {fileID: 11500000, guid: 8404be70184654265930450def6a9037, type: 3} - generateWrapperCode: 0 + generateWrapperCode: 1 wrapperCodePath: wrapperClassName: wrapperCodeNamespace: diff --git a/Assets/Models/Materials/FresnelRippleMaterial.mat b/Assets/Models/Materials/FresnelRippleMaterial.mat index 55af584..aee61e6 100644 --- a/Assets/Models/Materials/FresnelRippleMaterial.mat +++ b/Assets/Models/Materials/FresnelRippleMaterial.mat @@ -125,7 +125,7 @@ Material: - _WorkflowMode: 1 - _ZWrite: 1 - _base_alpha: 0.41 - - _impact_amplitude: 0.08 + - _impact_amplitude: 0 - _impact_anim: 0 - _impact_blend: 0 - _impact_density: 20 @@ -145,6 +145,6 @@ Material: - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} - _impact_origin: {r: 1, g: 0, b: -0.3, a: 1} - - _rotation: {r: 0.1, g: 0, b: 0, a: 1} + - _rotation: {r: 0, g: 0, b: 0, a: 1} - _shield_color: {r: 0, g: 1, b: 0.7743149, a: 1} m_BuildTextureStacks: [] diff --git a/Assets/Prefabs/Player Blue.prefab b/Assets/Prefabs/Player Blue.prefab index dfd5d94..80a9178 100644 --- a/Assets/Prefabs/Player Blue.prefab +++ b/Assets/Prefabs/Player Blue.prefab @@ -90,6 +90,7 @@ Transform: m_Children: - {fileID: 6850768006170588356} - {fileID: 8774249858192466318} + - {fileID: 6166152332587307364} - {fileID: 8696699156449457255} - {fileID: 5758221365909025383} - {fileID: 7227660392512793521} @@ -185,7 +186,7 @@ MonoBehaviour: m_ActionId: c8819d8c-8dc4-4eb6-ae07-132d6fffbed4 m_ActionName: Player/Boost[/Keyboard/ctrl,/Keyboard/shift,/XInputControllerWindows/buttonEast,/XInputControllerWindows/leftShoulder] m_NeverAutoSwitchControlSchemes: 1 - m_DefaultControlScheme: + m_DefaultControlScheme: Controller m_DefaultActionMap: Player m_SplitScreenIndex: -1 m_Camera: {fileID: 0} @@ -301,6 +302,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 2b6244fd2a6ceee4ab8504fadf75ae20, type: 3} m_Name: m_EditorClassIdentifier: + cameraOperator: {fileID: 0} thrustAcceleration: 1500 steerVelocity: 300 normalMaxVelocity: 25 @@ -317,8 +319,10 @@ MonoBehaviour: boostAntiGravityFactor: 0.8 tackleStunFactor: 0.1 tackleStunTime: 0.6 - tacklePowerFactor: 50 + tacklePowerFactor: 30 boostUI: {fileID: 4200181511080825266} + playerInput: {fileID: 0} + instanceID: 0 --- !u!1 &4451848836747234632 GameObject: m_ObjectHideFlags: 0 @@ -402,6 +406,61 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &7665455622387539610 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6166152332587307364} + - component: {fileID: 1551560316097652998} + m_Layer: 7 + m_Name: BodyArea + m_TagString: Vulnerable + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6166152332587307364 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7665455622387539610} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5458316571244832082} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!136 &1551560316097652998 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7665455622387539610} + 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.57511306 + m_Height: 2.3651605 + m_Direction: 1 + m_Center: {x: 0, y: -0.2, z: 0} --- !u!1 &8319233940171307812 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Prefabs/Player Gray.prefab b/Assets/Prefabs/Player Gray.prefab index b44be2f..2c96682 100644 --- a/Assets/Prefabs/Player Gray.prefab +++ b/Assets/Prefabs/Player Gray.prefab @@ -37,6 +37,7 @@ Transform: m_Children: - {fileID: 2763216851625110643} - {fileID: 1065332109104514168} + - {fileID: 2323253733787261421} - {fileID: 3900807414520724371} - {fileID: 2308728980078667632} m_Father: {fileID: 0} @@ -131,7 +132,7 @@ MonoBehaviour: m_ActionId: c8819d8c-8dc4-4eb6-ae07-132d6fffbed4 m_ActionName: Player/Boost[/Keyboard/ctrl,/Keyboard/shift,/XInputControllerWindows/buttonEast,/XInputControllerWindows/leftShoulder] m_NeverAutoSwitchControlSchemes: 1 - m_DefaultControlScheme: + m_DefaultControlScheme: Controller m_DefaultActionMap: Player m_SplitScreenIndex: -1 m_Camera: {fileID: 0} @@ -247,6 +248,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 2b6244fd2a6ceee4ab8504fadf75ae20, type: 3} m_Name: m_EditorClassIdentifier: + cameraOperator: {fileID: 0} thrustAcceleration: 1500 steerVelocity: 300 normalMaxVelocity: 25 @@ -257,14 +259,16 @@ MonoBehaviour: maximumDrag: 6 torqueDrag: 10 maxBoostCapacity: 3 - minBoostCapacity: 1 + minBoostCapacity: 0.6 boostMagnitude: 2.5 outsideBoostRate: 0 boostAntiGravityFactor: 0.8 tackleStunFactor: 0.1 tackleStunTime: 0.6 - tacklePowerFactor: 50 + tacklePowerFactor: 30 boostUI: {fileID: 3576024133074538910} + playerInput: {fileID: 0} + instanceID: 0 --- !u!1 &3218284673077589540 GameObject: m_ObjectHideFlags: 0 @@ -456,6 +460,61 @@ CapsuleCollider: m_Height: 1.3338675 m_Direction: 0 m_Center: {x: -0.000009298325, y: -0.025820732, z: 0} +--- !u!1 &7085924197508447212 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2323253733787261421} + - component: {fileID: 7345168250516523601} + m_Layer: 7 + m_Name: BodyArea + m_TagString: Vulnerable + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2323253733787261421 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7085924197508447212} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4137950278346515597} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!136 &7345168250516523601 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7085924197508447212} + 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.57511306 + m_Height: 2.3651605 + m_Direction: 1 + m_Center: {x: 0, y: -0.2, z: 0} --- !u!1001 &8054534206256546014 PrefabInstance: m_ObjectHideFlags: 0 diff --git a/Assets/Scenes/BattleField.unity b/Assets/Scenes/BattleField.unity index b242a7e..a9ec717 100644 --- a/Assets/Scenes/BattleField.unity +++ b/Assets/Scenes/BattleField.unity @@ -321,10 +321,6 @@ PrefabInstance: propertyPath: m_Name value: Player Gray objectReference: {fileID: 0} - - target: {fileID: 2068562511677553606, guid: 105162f72bf50c84aaf92b1ca494ed3b, type: 3} - propertyPath: m_NeverAutoSwitchControlSchemes - value: 1 - objectReference: {fileID: 0} - target: {fileID: 4137950278346515597, guid: 105162f72bf50c84aaf92b1ca494ed3b, type: 3} propertyPath: m_LocalPosition.x value: -10 @@ -365,6 +361,10 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} + - target: {fileID: 8932415214367391550, guid: 105162f72bf50c84aaf92b1ca494ed3b, type: 3} + propertyPath: cameraOperator + value: + objectReference: {fileID: 963194229} m_RemovedComponents: [] m_RemovedGameObjects: [] m_AddedGameObjects: [] @@ -550,108 +550,7 @@ MonoBehaviour: m_EditorClassIdentifier: zone: {fileID: 1361581065} announcements: {fileID: 2052728261} ---- !u!1 &895482937 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 895482939} - - component: {fileID: 895482938} - - component: {fileID: 895482940} - m_Layer: 0 - m_Name: PlayerManager - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &895482938 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 895482937} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 621567455fd1c4ceb811cc8a00b6a1a5, type: 3} - m_Name: - m_EditorClassIdentifier: - m_NotificationBehavior: 2 - m_MaxPlayerCount: 2 - m_AllowJoining: 1 - m_JoinBehavior: 0 - m_PlayerJoinedEvent: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 895482940} - m_TargetAssemblyTypeName: PlayerManager, Assembly-CSharp - m_MethodName: OnPlayerJoined - m_Mode: 0 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 - m_PlayerLeftEvent: - m_PersistentCalls: - m_Calls: [] - m_JoinAction: - m_UseReference: 0 - m_Action: - m_Name: - m_Type: 0 - m_ExpectedControlType: - m_Id: - m_Processors: - m_Interactions: - m_SingletonActionBindings: [] - m_Flags: 0 - m_Reference: {fileID: 0} - m_PlayerPrefab: {fileID: 2111858426991004505, guid: d247a5257c4a6774399dc902f311b653, type: 3} - m_SplitScreen: 0 - m_MaintainAspectRatioInSplitScreen: 0 - m_FixedNumberOfSplitScreens: -1 - m_SplitScreenRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 ---- !u!4 &895482939 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 895482937} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -9.660311, y: -6.734341, z: 64.1785} - 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 &895482940 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 895482937} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: af7ba7ecba068a342ac96ba1df059373, type: 3} - m_Name: - m_EditorClassIdentifier: - cameraOperator: {fileID: 963194229} + minPlayerCount: 2 --- !u!1 &963194225 GameObject: m_ObjectHideFlags: 0 @@ -802,124 +701,6 @@ MonoBehaviour: mipBias: 0 varianceClampScale: 0.9 contrastAdaptiveSharpening: 0 ---- !u!1 &1026075974 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1026075977} - - component: {fileID: 1026075976} - - component: {fileID: 1026075975} - m_Layer: 0 - m_Name: Directional Light (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!114 &1026075975 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1026075974} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Version: 3 - m_UsePipelineSettings: 1 - m_AdditionalLightsShadowResolutionTier: 2 - m_LightLayerMask: 1 - m_RenderingLayers: 1 - m_CustomShadowLayers: 0 - m_ShadowLayerMask: 1 - m_ShadowRenderingLayers: 1 - m_LightCookieSize: {x: 1, y: 1} - m_LightCookieOffset: {x: 0, y: 0} - m_SoftShadowQuality: 0 ---- !u!108 &1026075976 -Light: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1026075974} - m_Enabled: 0 - serializedVersion: 10 - m_Type: 1 - m_Shape: 0 - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_Intensity: 1 - m_Range: 10 - m_SpotAngle: 30 - m_InnerSpotAngle: 21.80208 - m_CookieSize: 10 - m_Shadows: - m_Type: 0 - m_Resolution: -1 - m_CustomResolution: -1 - m_Strength: 1 - m_Bias: 0.05 - m_NormalBias: 0.4 - m_NearPlane: 0.2 - m_CullingMatrixOverride: - e00: 1 - e01: 0 - e02: 0 - e03: 0 - e10: 0 - e11: 1 - e12: 0 - e13: 0 - e20: 0 - e21: 0 - e22: 1 - e23: 0 - e30: 0 - e31: 0 - e32: 0 - e33: 1 - m_UseCullingMatrixOverride: 0 - m_Cookie: {fileID: 0} - m_DrawHalo: 0 - m_Flare: {fileID: 0} - m_RenderMode: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingLayerMask: 1 - m_Lightmapping: 4 - m_LightShadowCasterMode: 0 - m_AreaSize: {x: 1, y: 1} - m_BounceIntensity: 1 - m_ColorTemperature: 6570 - m_UseColorTemperature: 0 - m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} - m_UseBoundingSphereOverride: 0 - m_UseViewFrustumForShadowCasterCull: 1 - m_ShadowRadius: 0 - m_ShadowAngle: 0 ---- !u!4 &1026075977 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1026075974} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: -50} - 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!1001 &1119422545 PrefabInstance: m_ObjectHideFlags: 0 @@ -972,10 +753,10 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 9136370446038472296, guid: d247a5257c4a6774399dc902f311b653, type: 3} - propertyPath: m_NeverAutoSwitchControlSchemes - value: 1 - objectReference: {fileID: 0} + - target: {fileID: 7382138887082377466, guid: d247a5257c4a6774399dc902f311b653, type: 3} + propertyPath: cameraOperator + value: + objectReference: {fileID: 963194229} m_RemovedComponents: [] m_RemovedGameObjects: [] m_AddedGameObjects: [] @@ -1176,9 +957,6 @@ PrefabInstance: - targetCorrespondingSourceObject: {fileID: -8098169881513260187, guid: 303177f7648454b4fb8179c1378dd1ec, type: 3} insertIndex: -1 addedObject: {fileID: 1361581065} - - targetCorrespondingSourceObject: {fileID: -8098169881513260187, guid: 303177f7648454b4fb8179c1378dd1ec, type: 3} - insertIndex: -1 - addedObject: {fileID: 1361581068} m_SourcePrefab: {fileID: 3150474306388093854, guid: 303177f7648454b4fb8179c1378dd1ec, type: 3} --- !u!1 &1361581064 stripped GameObject: @@ -1218,20 +996,6 @@ BoxCollider: serializedVersion: 3 m_Size: {x: 1.5, y: 0.1, z: 1.5} m_Center: {x: 0, y: 0, z: -0.75} ---- !u!114 &1361581068 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1361581064} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1211ce015fd3676469a8844316d4b944, type: 3} - m_Name: - m_EditorClassIdentifier: - zone: {fileID: 0} - announcements: {fileID: 0} --- !u!1 &1659830375 GameObject: m_ObjectHideFlags: 0 @@ -1613,10 +1377,8 @@ SceneRoots: m_Roots: - {fileID: 796181415} - {fileID: 2052728260} - - {fileID: 895482939} - {fileID: 963194228} - {fileID: 8179556} - - {fileID: 1026075977} - {fileID: 2000082937} - {fileID: 1185564593} - {fileID: 1748381166} diff --git a/Assets/Scripts/Announcments.cs b/Assets/Scripts/Announcments.cs index 890c021..679bfe0 100644 --- a/Assets/Scripts/Announcments.cs +++ b/Assets/Scripts/Announcments.cs @@ -1,3 +1,4 @@ +using System; using System.Collections; using System.Collections.Generic; using TMPro; @@ -8,34 +9,48 @@ public class Announcments : MonoBehaviour { [SerializeField] TextMeshProUGUI announcementText; - private float announcmentTime; private float remainingTime; void Start() { announcementText.enabled = false; + enabled = false; } void Update() { if (remainingTime > 0) { - if (!announcementText.enabled) - { - announcementText.enabled = true; - } remainingTime -= Time.deltaTime; } else { announcementText.enabled = false; remainingTime = 0; + enabled = false; } } public void AnnounceText(string text, float time) { announcementText.text = text; + announcementText.enabled = true; remainingTime = time; + enabled = true; + } + + public void AnnounceText(string text) + { + announcementText.text = text; + announcementText.enabled = true; + enabled = false; + } + + public void StopAnnouncement() + { + announcementText.text = String.Empty; + remainingTime = 0; + announcementText.enabled = false; + enabled = false; } } diff --git a/Assets/Scripts/CameraOperator.cs b/Assets/Scripts/CameraOperator.cs index eac845a..24a14d9 100644 --- a/Assets/Scripts/CameraOperator.cs +++ b/Assets/Scripts/CameraOperator.cs @@ -11,6 +11,7 @@ using static UnityEngine.Mathf; public class CameraOperator : MonoBehaviour { private Dictionary players = new Dictionary(); + public void AddPlayer(GameObject player) { players[player.GetInstanceID()] = player; diff --git a/Assets/Scripts/GameManager.cs b/Assets/Scripts/GameManager.cs index 0f23069..db8859f 100644 --- a/Assets/Scripts/GameManager.cs +++ b/Assets/Scripts/GameManager.cs @@ -1,13 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.Contracts; +using System.Linq; +using Palmmedia.ReportGenerator.Core.Reporting.Builders; +using UnityEditor.Experimental.Licensing; using UnityEngine; +using UnityEngine.InputSystem; +using UnityEngine.InputSystem.Users; +using UnityEngine.InputSystem.Utilities; using UnityEngine.SceneManagement; +using static InputActionMaps; +public enum GameState { Starting, Match, End, Paused } public class GameManager : MonoBehaviour { - + public static GameManager GM { get; private set; } [SerializeField] ZoneRules zone; [SerializeField] Announcments announcements; - private bool gameLost = false; + [SerializeField] int minPlayerCount = 2; + public GameState currentState { get; private set; } + private Dictionary players = new Dictionary(); + private Dictionary playerControlSchemes = new Dictionary(); private float restartMatchTime = 0; + private ControlSchemeDetection controlSchemeDetector; + + void Awake() + { + if (GM == null) + { + GM = this; + } + } void Update() { @@ -15,7 +38,7 @@ public class GameManager : MonoBehaviour { restartMatchTime -= Time.deltaTime; } - else if (gameLost) + else if (currentState == GameState.End) { restartMatchTime = 0; StartNewMatch(); @@ -24,6 +47,16 @@ public class GameManager : MonoBehaviour // Start is called before the first frame update void Start() + { + currentState = GameState.Starting; + controlSchemeDetector = new ControlSchemeDetection(); + controlSchemeDetector.ControlSchemeDetected += AssignPlayerControls; + controlSchemeDetector.EnableDetection(); + announcements.AnnounceText("You both press a key \n on your controll scheme of choice \n to start the match"); + enabled = false; + } + + void StartMatch() { if (zone != null) { @@ -31,18 +64,21 @@ public class GameManager : MonoBehaviour } if (announcements != null) { + announcements.StopAnnouncement(); announcements.AnnounceText("Match Start", 1.6f); } } private void CheckLosingCondition(GameObject go) { - if (!go.CompareTag("Player") || gameLost) + if (!go.CompareTag("Player") || currentState == GameState.End) return; - gameLost = true; + currentState = GameState.End; Destroy(go); announcements.AnnounceText(go.name + " has lost the match", 2f); restartMatchTime = 2.2f; + players.Clear(); + enabled = true; } private void StartNewMatch() @@ -51,4 +87,97 @@ public class GameManager : MonoBehaviour SceneManager.LoadScene(currentSceneName); } + public void RegisterPlayer(PlayerController pc) + { + if (!players.ContainsKey(pc.instanceID)) + { + players[pc.instanceID] = pc; + } + } + + private void AssignPlayerControls(object sender, string controlScheme) + { + if (players.Count < minPlayerCount) + { + return; + } + if (players.Count <= playerControlSchemes.Count) + { + controlSchemeDetector.DisableDetection(); + currentState = GameState.Match; + StartMatch(); + return; + } + + foreach (int playerId in players.Keys) + { + if (playerControlSchemes.ContainsValue(controlScheme)) + { + return; + } + if (playerControlSchemes.ContainsKey(playerId)) + { + continue; + } + PlayerController pc = players[playerId]; + if (controlScheme.Contains("Keyboard")) + { + pc.playerInput.SwitchCurrentControlScheme(controlScheme, Keyboard.current); + } + else if (controlScheme.Contains("Controller")) + { + pc.playerInput.SwitchCurrentControlScheme(controlScheme, Gamepad.current); + } + playerControlSchemes[playerId] = controlScheme; + } + } } + +public class ControlSchemeDetection : IPlayerActions +{ + InputActionMaps actionMaps; + public event EventHandler ControlSchemeDetected; + + public ControlSchemeDetection() + { + actionMaps = new InputActionMaps(); + actionMaps.Player.SetCallbacks(this); + } + + public void EnableDetection() + { + actionMaps.Player.Enable(); + } + public void DisableDetection() + { + actionMaps.Player.Disable(); + } + + public void OnBoost(InputAction.CallbackContext context) + { + readControlScheme(context); + } + + public void OnReset(InputAction.CallbackContext context) + { + readControlScheme(context); + } + + public void OnSteer(InputAction.CallbackContext context) + { + readControlScheme(context); + } + + public void OnThrust(InputAction.CallbackContext context) + { + readControlScheme(context); + } + + public void readControlScheme(InputAction.CallbackContext context) + { + int bindingIndex = context.action.GetBindingIndexForControl(context.control); + InputBinding binding = context.action.bindings[bindingIndex]; + string controlScheme = binding.groups.Split(';')[0]; + ControlSchemeDetected.Invoke(this, controlScheme); + } +} \ No newline at end of file diff --git a/Assets/Scripts/PlayerController.cs b/Assets/Scripts/PlayerController.cs index e707a13..46dffa9 100644 --- a/Assets/Scripts/PlayerController.cs +++ b/Assets/Scripts/PlayerController.cs @@ -1,5 +1,4 @@ using System; -using GLTFast.Schema; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.SceneManagement; @@ -8,6 +7,7 @@ using static AffectingForcesManager; public class PlayerController : MonoBehaviour { // Private variables + [SerializeField] private CameraOperator cameraOperator; [SerializeField] private float thrustAcceleration = 400; [SerializeField] private float steerVelocity = 30; [SerializeField] private float normalMaxVelocity = 10; @@ -28,6 +28,7 @@ public class PlayerController : MonoBehaviour [SerializeField, Range(0, 1000)] private float tacklePowerFactor = 10f; [SerializeField] private BoostCapacityUI boostUI; private AffectingForcesManager forceManager; + public PlayerInput playerInput; private Rigidbody body; private Vector3 currentGravity = new Vector3(); // Saves the current input value for thrust @@ -41,7 +42,7 @@ public class PlayerController : MonoBehaviour private float tackledTime = 0f; // Current Zone the player occupies private Zone zone = Zone.NimbleZone; - private int instanceID; + public int instanceID; void Awake() { @@ -50,6 +51,7 @@ public class PlayerController : MonoBehaviour forceManager = GameObject.FindGameObjectWithTag("ForceManager").GetComponent(); } body = GetComponent(); + playerInput = GetComponent(); } // Start is called before the first frame update @@ -58,12 +60,17 @@ public class PlayerController : MonoBehaviour instanceID = gameObject.GetInstanceID(); boostCapacity = maxBoostCapacity; boostUI.SetMinBoostRatio(minBoostCapacity / maxBoostCapacity); + GameManager.GM.RegisterPlayer(this); + cameraOperator.AddPlayer(gameObject); } // Update is called once per frame void FixedUpdate() - { + if (GameManager.GM.currentState == GameState.Starting) + { + return; + } zone = forceManager.GetZoneOfInstance(instanceID); //BoostStateUpdate(Time.deltaTime); // Rotate the vehicle with the current steer velocity