DeskSim v2 0.1
Train simulator prototype created for Lokførerskolen
EditorController.h
1// Copyright 2022 Thomas Arinesalingam, John Ole Bjerke, Endre Heksum & Henrik Markengbakken Karlsen . All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "GameFramework/Pawn.h"
8#include "GameFramework/DefaultPawn.h"
9#include "EditorController.generated.h"
10
11UENUM()
12enum class EToolMode : uint8
13{
14 Translation UMETA(DisplayName = "Translation"),
15 Rotation UMETA(DisplayName = "Rotation"),
16 //Scaling UMETA(DisplayName = "Scaling"),
17};
18
19UCLASS()
20class DESKSIMV2_API AEditorController : public APawn
21{
22 GENERATED_BODY()
23
24public:
25 // Sets default values for this pawn's properties
27
28protected:
29 // Called when the game starts or when spawned
30 virtual void BeginPlay() override;
31 virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
32
33 UPROPERTY(VisibleAnywhere)
34 USceneComponent* RootSceneComponent;
35
36 UPROPERTY(VisibleAnywhere)
37 USceneComponent* GizmoComponent;
38
39 UPROPERTY(VisibleAnywhere)
40 APlayerController* PC;
41
42 UPROPERTY(VisibleAnywhere)
43 class UFloatingPawnMovement* PawnMovement;
44
45 UPROPERTY(VisibleAnywhere)
46 class UCameraComponent* Camera;
47
48 UPROPERTY(VisibleAnywhere)
49 UStaticMeshComponent* ArrowX;
50
51 UPROPERTY(VisibleAnywhere)
52 UStaticMeshComponent* ArrowY;
53
54 UPROPERTY(VisibleAnywhere)
55 UStaticMeshComponent* ArrowZ;
56
57 UPROPERTY(VisibleAnywhere)
58 UStaticMeshComponent* PlaneXY;
59
60 UPROPERTY(VisibleAnywhere)
61 UStaticMeshComponent* DiscZ;
62
63public:
64 // Called every frame
65 virtual void Tick(float DeltaTime) override;
66
67 UPROPERTY(EditAnywhere, BlueprintReadWrite)
68 float MaxMoveSpeed = 5000.0f;
69
70 UPROPERTY(EditAnywhere, BlueprintReadWrite)
71 float Acceleration = 6000.0f;
72
73 UPROPERTY(EditAnywhere, BlueprintReadWrite)
74 float Deceleration = 10000.0f;
75
76 UPROPERTY(EditAnywhere, BlueprintReadWrite)
77 float LookSensistivity = 1.0f;
78
79 UPROPERTY(VisibleAnywhere)
80 EToolMode ToolMode = EToolMode::Translation;
81
82 template<const EToolMode NewToolMode>
83 void SetToolMode();
84
85 void DeleteSelectedObject();
86
87private:
88
89 void OnMouseLeftPressed();
90 void OnMouseLeftReleased();
91 void OnMouseRightPressed();
92 void OnMouseRightReleased();
93 void SaveMouseLocation();
94
95 void MoveForward(float AxisValue);
96 void MoveStrafe(float AxisValue);
97 void MoveVertical(float AxisValue);
98 void ChangeMoveSpeed(float AxisValue);
99 void MovePitch(float AxisValue);
100 void MoveYaw(float AxisValue);
101
102 UMaterial* GizmoRed;
103 UMaterial* GizmoGreen;
104 UMaterial* GizmoBlue;
105 UMaterial* GizmoYellow;
106
107 ETraceTypeQuery GizmoTraceTypeQuery;
108 ETraceTypeQuery ObjectTraceTypeQuery;
109
110 UPROPERTY(VisibleAnywhere)
111 float MoveSpeed = 1800.0f;
112
113 // Rotation
114
115 FVector2D EditorRotation;
116
117 EAxisList::Type SelectedAxis = EAxisList::None;
118
119 AActor* SelectedObject;
120 UPrimitiveComponent* HoveringGizmo;
121 FTransform SelectedTransform;
122
123 UPrimitiveComponent* PreviousHoveringGizmo;
124
125 bool bGrabbing;
126 bool bRotateCamera;
127 bool bDoOnce;
128
129 void UpdateGizmoVisibilityAndCollision();
130 void SetMeshEnabled(const std::initializer_list<UStaticMeshComponent*> Meshes, bool Enabled);
131 void SetObjectHighlight(AActor* Object, bool Value);
132 void SetSelectedObject(AActor* Object);
133 void SetGizmoDefaultMaterials();
134 USplineComponent* GetNearestRailwaySplineComponent();
135
136 FVector OffsetOnClick;
137
138 FVector MouseLocationOnClick;
139
140 float ObjectRotationOnClick;
141
142 ASplineActor* SplineActor;
143};
A component for placing static meshes along a spline.
Definition: EditorController.h:21
Definition: SplineActor.h:22