From b9dbe07e1f09cb35516c7105b5f56108d69c94d6 Mon Sep 17 00:00:00 2001 From: mccarreon Date: Fri, 4 Aug 2023 21:16:49 -0700 Subject: [PATCH] fixed camera with lookat functions --- .../Lucker/Cameras/AbstractCamera.cs | 6 +-- .../Lucker/Cameras/FixedCamera.cs | 37 ++++++++++++++++--- .../TerryRaces/TerryRacesMinigame.cs | 6 ++- 3 files changed, 38 insertions(+), 11 deletions(-) diff --git a/code/EntityComponents/Lucker/Cameras/AbstractCamera.cs b/code/EntityComponents/Lucker/Cameras/AbstractCamera.cs index 0d9e6d7..3a48e06 100644 --- a/code/EntityComponents/Lucker/Cameras/AbstractCamera.cs +++ b/code/EntityComponents/Lucker/Cameras/AbstractCamera.cs @@ -3,7 +3,7 @@ using Sandbox; namespace LuckerGame.Components.Lucker.Cameras; -public abstract class AbstractCamera : EntityComponent, ISingletonComponent +public abstract partial class AbstractCamera : EntityComponent, ISingletonComponent { public virtual bool ShouldShowCursor => false; protected Vector3 CameraPosition { get; set; } @@ -16,11 +16,11 @@ public abstract class AbstractCamera : EntityComponent, ISingle /// Handles any input-independent camera updates (ie following a pawn) /// protected abstract void UpdateCameraParameters(); - + /// /// Handles any input dependent camera updates (ie moving around a top down cam) /// - public abstract void BuildInput(); + public virtual void BuildInput() { } /// /// Applies Camera parameters to the static Camera diff --git a/code/EntityComponents/Lucker/Cameras/FixedCamera.cs b/code/EntityComponents/Lucker/Cameras/FixedCamera.cs index 9d9f41c..889f1c3 100644 --- a/code/EntityComponents/Lucker/Cameras/FixedCamera.cs +++ b/code/EntityComponents/Lucker/Cameras/FixedCamera.cs @@ -4,13 +4,38 @@ namespace LuckerGame.Components.Lucker.Cameras; public partial class FixedCamera : AbstractCamera, ISingletonComponent { - public override void BuildInput() - { - throw new System.NotImplementedException(); - } - + [Net] public float FieldOfViewValue { get; set; } = 70f; + public override bool ShouldShowCursor => true; protected override void UpdateCameraParameters() { - throw new System.NotImplementedException(); + FieldOfView = FieldOfViewValue; + FirstPersonViewer = null; + SoundSource = new Transform { Position = CameraPosition }; + } + + /// + /// ClientRpc doesn't allow for nullable versions of non-nullable types + /// so here we are + /// + public void UpdateCameraPositionRotation( Vector3? position = null, Rotation? rotation = null ) + { + CameraPosition = (Vector3)(position.Equals( null ) ? CameraPosition : position); + CameraRotation = (Rotation)(rotation.Equals( null ) ? CameraRotation : rotation); + } + + [ClientRpc] + public void LookAt( Vector3 position ) + { + UpdateCameraPositionRotation( position ); + } + [ClientRpc] + public void LookAt( Rotation rotation ) + { + UpdateCameraPositionRotation( rotation: rotation ); + } + [ClientRpc] + public void LookAt( Vector3 position, Rotation rotation ) + { + UpdateCameraPositionRotation( position, rotation ); } } diff --git a/code/Minigames/TerryRaces/TerryRacesMinigame.cs b/code/Minigames/TerryRaces/TerryRacesMinigame.cs index 2ab9d70..73a8204 100644 --- a/code/Minigames/TerryRaces/TerryRacesMinigame.cs +++ b/code/Minigames/TerryRaces/TerryRacesMinigame.cs @@ -15,6 +15,7 @@ public class TerryRaces : Minigame { public override string Name => "Terry Races"; private List Players { get; set; } + private FixedCamera camera; public override void Initialize( List players ) { @@ -22,7 +23,9 @@ public class TerryRaces : Minigame // Setup cameras for players Players.ForEach( player => { - player.Components.Create(); + camera = player.Components.Create(); + camera.LookAt( new Vector3( -110f, 4f, 180f ), Rotation.FromPitch( 45 ) ); + camera.FieldOfViewValue = 120f; } ); Players.Select( ( player, i ) => (Player: player, Index: i) ).ToList().ForEach( pair => @@ -41,7 +44,6 @@ public class TerryRaces : Minigame public override void Tick() { - } public override void Cleanup()