105 lines
4.1 KiB
C++
105 lines
4.1 KiB
C++
// Marche du personnage et invites de proximite.
|
|
//
|
|
// LeftRight et DownUp restent la vue de dessus (BPs/PC : LeftRightBirdView, DownUpBirdview).
|
|
// La marche lit deux axes neufs, MoveForward et MoveRight. Elle ne tourne pas quand un menu
|
|
// a le clavier (reglages, journal, panneau Clavier, saisie de texte).
|
|
//
|
|
// Les invites viennent des textes des modules : WHERE contenant interaction, et les fichiers
|
|
// .lpnear (MESH, PROMPT, ACTION). La liste est tenue ici, sur la personne ou le maillage le
|
|
// plus proche, et elle reste cachee. E l'affiche ; un second E, ou un clic, lance l'action.
|
|
// Le personnage n'est pas possede : la marche active bRunPhysicsWithNoController.
|
|
// La marche du jeu ne joue un cycle que si LPAnimTarget.ini vaut game (clips B_ / M_).
|
|
// sandbox laisse le corps au Blueprint. La camera suiveuse n'est pas branchee.
|
|
// Aucun Blueprint n'est modifie.
|
|
|
|
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "Animation/AnimationAsset.h"
|
|
#include "Camera/CameraActor.h"
|
|
#include "Containers/Ticker.h"
|
|
#include "Subsystems/GameInstanceSubsystem.h"
|
|
#include "LPDirectControlSubsystem.generated.h"
|
|
|
|
class AActor;
|
|
|
|
UCLASS()
|
|
class LIFEPLAY_API ULPDirectControlSubsystem : public UGameInstanceSubsystem
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
virtual void Initialize(FSubsystemCollectionBase& Collection) override;
|
|
virtual void Deinitialize() override;
|
|
|
|
void ActivatePrompt(int32 Index);
|
|
void HighlightPrompt(int32 Index);
|
|
|
|
private:
|
|
bool Tick(float DeltaTime);
|
|
void RefreshIndex();
|
|
void RefreshTarget();
|
|
void Walk(float DeltaTime);
|
|
void FollowCamera(APawn* Pawn, APlayerController* PC, float DeltaTime, bool bMoving);
|
|
void WalkAnim(ACharacter* Character, float Speed);
|
|
void RestoreAnim();
|
|
void PollInteract();
|
|
void ShowPrompts();
|
|
void HidePrompts();
|
|
void WitnessMoveKeys(float DeltaTime);
|
|
void WatchSeatRelease(float DeltaTime);
|
|
void FitPersonBounds(float DeltaTime);
|
|
|
|
FTSTicker::FDelegateHandle TickHandle;
|
|
float MenuDelay = 0.f;
|
|
float IndexDelay = 0.f;
|
|
float TargetDelay = 0.f;
|
|
bool bMenuBlocks = false;
|
|
FString LastEnabled;
|
|
bool bIndexed = false;
|
|
FString ShownSignature;
|
|
int32 Selected = 0;
|
|
bool bPromptOpen = false;
|
|
TWeakObjectPtr<AActor> CurrentTarget;
|
|
bool bCurrentIsPerson = false;
|
|
// KO3b / KO3c : composants de Room dont le joueur doit sortir (sa capsule y etait) : Pawn en Ignore jusqu'a la sortie de chacun.
|
|
TArray<TWeakObjectPtr<class UPrimitiveComponent>> EscapeVolumes;
|
|
// KO3c : temps pendant lequel le joueur pousse (ZQSD) sans avancer.
|
|
float StuckTime = 0.f;
|
|
// M1e (STG-COMMUN6-DIAG) : temoin des touches de marche vues par Slate, cause du blocage par menu (vide : aucun), dernier
|
|
// blocage journalise, delai entre deux lignes de temoin.
|
|
TSharedPtr<class IInputProcessor> MoveWitness;
|
|
FString MenuWhy;
|
|
FString LoggedMenuWhy;
|
|
float MoveLogDelay = 0.f;
|
|
// C6-b : etat journalise de la boite Scene_C presente sans contenu visible.
|
|
bool bLoggedEmptyScene = false;
|
|
// C7-a (STG-COMMUN7-DIAG A) : place du joueur au tick precedent ; place liberee par un Blueprint sans marche, en attente depuis
|
|
// PendingSeatTime secondes (negatif : rien en attente).
|
|
TWeakObjectPtr<UObject> LastSeat;
|
|
TWeakObjectPtr<class UPrimitiveComponent> PendingSeat;
|
|
float PendingSeatTime = -1.f;
|
|
// B2q-a / T-cull (STG-B2q-DIAG) : delai du balayage des Person (0,5 s), delai de l'alerte T-cull (1 s), meuble deja mesure par personne.
|
|
float BoundsDelay = 0.f;
|
|
float CullAlertDelay = 0.f;
|
|
TMap<TWeakObjectPtr<AActor>, TWeakObjectPtr<UObject>> MeasuredSeats;
|
|
// B2q-b1 : echelle d'origine des bornes de chaque corps, relevee a la premiere vue (plancher du facteur).
|
|
TMap<TWeakObjectPtr<class UPrimitiveComponent>, float> OriginalBoundsScale;
|
|
// M-Z (STG-COMMUN9-DIAG) : nombre de balayages consecutifs ou une Person debout sans meuble a un maillage hors de sa hauteur de gabarit.
|
|
TMap<TWeakObjectPtr<AActor>, int32> MeshZScans;
|
|
|
|
UPROPERTY()
|
|
TObjectPtr<ACameraActor> FollowView;
|
|
|
|
UPROPERTY()
|
|
TObjectPtr<AActor> BirdView;
|
|
|
|
UPROPERTY()
|
|
TObjectPtr<UClass> SavedAnimClass;
|
|
|
|
UPROPERTY()
|
|
TObjectPtr<UAnimationAsset> SavedSingleAnim;
|
|
|
|
uint8 SavedAnimMode = 0;
|
|
bool bAnimCaptured = false;
|
|
};
|