diff --git a/Config/DefaultGame.ini b/Config/DefaultGame.ini index d5a0d6e..4a01511 100644 --- a/Config/DefaultGame.ini +++ b/Config/DefaultGame.ini @@ -24,6 +24,12 @@ ClientId=1432045921620725933 [/Script/UnrealEd.ProjectPackagingSettings] +MapsToCook=(FilePath="/Game/Game/Maps/MenuScene") +MapsToCook=(FilePath="/Game/Game/Maps/GameScene") +; Dev_Scene y figure parce que GameLevel peut pointer sur elle le temps d'un +; test : la map visee se choisit dans BP_MainMenuPlayerController, et toute map +; susceptible d'y atterrir doit etre listee ici. Les garder toutes les trois +; coute un peu de cook mais permet de basculer sans retoucher cette liste -- +; l'oubli, lui, ne se voit qu'une fois le build chez le testeur. ++MapsToCook=(FilePath="/Game/Game/Maps/Dev/Dev_Scene") ; ================================================================== ; Videos de demarrage (logo moteur puis logo studio) diff --git a/Content/Game/Animation/ThirdPerson/ABP_PlayerBody_A.uasset b/Content/Game/Animation/ThirdPerson/ABP_PlayerBody_A.uasset new file mode 100644 index 0000000..341f8cb --- /dev/null +++ b/Content/Game/Animation/ThirdPerson/ABP_PlayerBody_A.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae9284a6b48bd93cc1fd2295f46e9c634a835bcd811c9cf689229d9d0d5f85a9 +size 194381 diff --git a/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyA/BS_BodyA_WalkRun.uasset b/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyA/BS_BodyA_WalkRun.uasset new file mode 100644 index 0000000..2358fd4 --- /dev/null +++ b/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyA/BS_BodyA_WalkRun.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:702c24486e33cfa9fbea0dbc89df981f2761b622798a2b2fe3517bd92946dcce +size 9596 diff --git a/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyA/BodyA_Fall_Loop_Retargeted.uasset b/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyA/BodyA_Fall_Loop_Retargeted.uasset new file mode 100644 index 0000000..5197a14 --- /dev/null +++ b/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyA/BodyA_Fall_Loop_Retargeted.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b9be576d2154cb06b5159f2b657e2ae49f28c8694538c7cc13d8d175af4545ec +size 682286 diff --git a/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyA/BodyA_Idle_Retargeted.uasset b/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyA/BodyA_Idle_Retargeted.uasset new file mode 100644 index 0000000..a144f97 --- /dev/null +++ b/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyA/BodyA_Idle_Retargeted.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b2d8291a281e9f7b8319322223856b565bd26b595deff8a69b9fdb4f03ef9761 +size 1462474 diff --git a/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyA/BodyA_Jump_Retargeted.uasset b/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyA/BodyA_Jump_Retargeted.uasset new file mode 100644 index 0000000..a7af76b --- /dev/null +++ b/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyA/BodyA_Jump_Retargeted.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a23e05d7c14b16d2ce781faeab13bb8eeffc4a49d453ddbeb865501eef8ad136 +size 278998 diff --git a/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyA/BodyA_Run_Fwd_Retargeted.uasset b/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyA/BodyA_Run_Fwd_Retargeted.uasset new file mode 100644 index 0000000..c910c3e --- /dev/null +++ b/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyA/BodyA_Run_Fwd_Retargeted.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3276d4fce66abc605ff76bffce915effdf09293ae8911e10c9362c853865815e +size 470285 diff --git a/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyA/BodyA_Walk_Fwd_Retargeted.uasset b/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyA/BodyA_Walk_Fwd_Retargeted.uasset new file mode 100644 index 0000000..6a30a67 --- /dev/null +++ b/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyA/BodyA_Walk_Fwd_Retargeted.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:28d36e0f87b9a94d3deab3b584435b4ac50dfdd3cf5122190512e2913cac5083 +size 589064 diff --git a/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyA/BodyA_Walk_InPlace_Retargeted.uasset b/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyA/BodyA_Walk_InPlace_Retargeted.uasset new file mode 100644 index 0000000..36dc96e --- /dev/null +++ b/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyA/BodyA_Walk_InPlace_Retargeted.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:448ec2770431bb468849c4b8e3cc0009da332fc84e6085b60f9ec91f9e23f589 +size 610520 diff --git a/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyA/BodyA__Land_Retargeted.uasset b/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyA/BodyA__Land_Retargeted.uasset new file mode 100644 index 0000000..b687fa5 --- /dev/null +++ b/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyA/BodyA__Land_Retargeted.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c3cce0fb4cc951efe26202a7b2c407f5b5b9aaa9d1be895fd482d706a08c34b +size 273682 diff --git a/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyB/BS_BodyB_WalkRun.uasset b/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyB/BS_BodyB_WalkRun.uasset new file mode 100644 index 0000000..938279f --- /dev/null +++ b/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyB/BS_BodyB_WalkRun.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:30ba7aa411c8637b76e0fb88489294059bd435206199cd0bdf493b4b4d80758b +size 9230 diff --git a/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyB/BodyB_Fall_Loop_Retargeted.uasset b/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyB/BodyB_Fall_Loop_Retargeted.uasset new file mode 100644 index 0000000..68f8bde --- /dev/null +++ b/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyB/BodyB_Fall_Loop_Retargeted.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1b2d4efa0d2b6b9318fc2b185a994a36a4d5fb3d99f670c1cb95ff4e27c5562 +size 843896 diff --git a/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyB/BodyB_Idle_Retargeted.uasset b/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyB/BodyB_Idle_Retargeted.uasset new file mode 100644 index 0000000..d00c4b9 --- /dev/null +++ b/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyB/BodyB_Idle_Retargeted.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b3651d70401e0049da4a525bc7cd3b837e414ee1dac2855bbcc52040616f975 +size 1022622 diff --git a/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyB/BodyB_Jump_Retargeted.uasset b/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyB/BodyB_Jump_Retargeted.uasset new file mode 100644 index 0000000..e49fab8 --- /dev/null +++ b/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyB/BodyB_Jump_Retargeted.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:304f960a9612dc86f0185b5a525616ee3af0d0d8cc300652eb39497410a172b8 +size 325307 diff --git a/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyB/BodyB_Land_Retargeted.uasset b/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyB/BodyB_Land_Retargeted.uasset new file mode 100644 index 0000000..d59b3b1 --- /dev/null +++ b/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyB/BodyB_Land_Retargeted.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c03a3be5a72a4117ea582b9944f61261fd92e747e0b35d03ad8802b0f0c30fc0 +size 312945 diff --git a/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyB/BodyB_Run_Fwd_Retargeted.uasset b/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyB/BodyB_Run_Fwd_Retargeted.uasset new file mode 100644 index 0000000..6b68cc8 --- /dev/null +++ b/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyB/BodyB_Run_Fwd_Retargeted.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1ec7c9ceba30b3b6886267ab79859448c4fb0ca47e2affbcaeb5b238feaa3856 +size 493313 diff --git a/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyB/BodyB_Walk_Fwd_Retargeted.uasset b/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyB/BodyB_Walk_Fwd_Retargeted.uasset new file mode 100644 index 0000000..2864297 --- /dev/null +++ b/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyB/BodyB_Walk_Fwd_Retargeted.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df024924546c36b6b83f9092eef6aff3535a2c0eec1996ff3cd7ab16df8e844b +size 503764 diff --git a/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyB/BodyB_Walk_InPlace_Retargeted.uasset b/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyB/BodyB_Walk_InPlace_Retargeted.uasset new file mode 100644 index 0000000..8dfae62 --- /dev/null +++ b/Content/Game/Animation/ThirdPerson/RetargetedAnimations/BodyB/BodyB_Walk_InPlace_Retargeted.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7f2d4b64e5e2dcf9198b3bcff0ca9f9cc2cebac1c03e5f89b280160da6424df2 +size 753964 diff --git a/Content/Game/Menu/BP_MainMenuPlayerController.uasset b/Content/Game/Menu/BP_MainMenuPlayerController.uasset index 0ca890e..0267106 100644 --- a/Content/Game/Menu/BP_MainMenuPlayerController.uasset +++ b/Content/Game/Menu/BP_MainMenuPlayerController.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e0a99359c3674f2561633330e75af75b076fdf4b3235ab245b69e12ab32b681a -size 21924 +oid sha256:d506e7e91cb5a05f5c1f8a2c51a88cafe933173ffc63a63e7b6c37c9f6a9deff +size 22295 diff --git a/Content/Game/Player/BP_FpsPlayer.uasset b/Content/Game/Player/BP_FpsPlayer.uasset index 71b88f0..6d3af50 100644 --- a/Content/Game/Player/BP_FpsPlayer.uasset +++ b/Content/Game/Player/BP_FpsPlayer.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:12293bc8a214bf2f914ef2add11475bbe8ce39ae7b50f18474fb588cfa405e24 -size 36945 +oid sha256:a6ca4277186ca1ee30950d55f07fb8cabae044b6e098b9883931846444264420 +size 51831 diff --git a/Source/Survival_projet/Private/PlayerBodyAnimInstance.cpp b/Source/Survival_projet/Private/PlayerBodyAnimInstance.cpp new file mode 100644 index 0000000..6c227dc --- /dev/null +++ b/Source/Survival_projet/Private/PlayerBodyAnimInstance.cpp @@ -0,0 +1,93 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "PlayerBodyAnimInstance.h" + +#include "FpsPlayer.h" +#include "GameFramework/CharacterMovementComponent.h" +#include "KismetAnimationLibrary.h" + +void UPlayerBodyAnimInstance::NativeInitializeAnimation() +{ + Super::NativeInitializeAnimation(); + + OwningPlayer = Cast(TryGetPawnOwner()); +} + +void UPlayerBodyAnimInstance::NativeUpdateAnimation(float DeltaSeconds) +{ + Super::NativeUpdateAnimation(DeltaSeconds); + + // Chez un CLIENT, le mesh arrive par replication et peut commencer a + // s'animer avant que le pawn soit completement initialise : le Cast du + // NativeInitialize rend alors nullptr, une fois pour toutes, et le corps de + // l'ami reste fige en pose de reference pour le reste de la partie. On + // reessaie donc tant qu'on n'a rien -- le cout est un Cast par frame + // uniquement pendant les quelques frames ou le pawn manque encore. + if (!OwningPlayer.IsValid()) + { + OwningPlayer = Cast(TryGetPawnOwner()); + if (!OwningPlayer.IsValid()) + { + return; + } + } + + const AFpsPlayer* BodyOwner = OwningPlayer.Get(); + const UCharacterMovementComponent* Movement = BodyOwner->GetCharacterMovement(); + if (!Movement) + { + return; + } + + // Composante horizontale seule : en pleine chute la vitesse verticale + // depasse largement la vitesse de course, et un BlendSpace indexe dessus + // jouerait un sprint en l'air. + const FVector Velocity = BodyOwner->GetVelocity(); + const FVector HorizontalVelocity(Velocity.X, Velocity.Y, 0.f); + GroundSpeed = HorizontalVelocity.Size(); + + // L'acceleration, et pas seulement la vitesse : elle tombe a zero des que la + // touche est relachee, alors que la vitesse decroit encore pendant tout le + // freinage. Sans elle le cycle de marche continuerait de tourner sur un + // personnage qui glisse jusqu'a l'arret. + bIsMoving = GroundSpeed > MovingSpeedThreshold + && !Movement->GetCurrentAcceleration().IsNearlyZero(); + + bIsFalling = Movement->IsFalling(); + + // Prise telle quelle, sans seuil : c'est le Blueprint qui decide ou placer la + // bascule saut / chute. Une valeur brute reste une valeur brute -- lui donner + // un seuil ici, ce serait decider a la place de la machine a etats, et il + // faudrait recompiler pour le regler. + VerticalSpeed = Velocity.Z; + + // Les deux etats du pawn, repliques chacun de leur cote : bIsCrouched par le + // moteur, bIsSprinting par AFpsPlayer. On les lit ici plutot que de deviner + // l'accroupissement a la hauteur de capsule, qui est en pleine interpolation + // pendant toute la transition. + bIsCrouching = BodyOwner->bIsCrouched; + bIsSprinting = BodyOwner->IsSprinting(); + + // Direction relative au CORPS et non a la vitesse du monde : c'est ce que + // demande un BlendSpace directionnel. GetActorRotation() suffit comme + // reference parce que bUseControllerRotationYaw garde le corps aligne sur le + // regard -- sur un jeu a la 3e personne libre, il faudrait la rotation de + // controle a la place. + // + // UKismetAnimationLibrary et pas UAnimInstance::CalculateDirection, depreciee + // en 5.8 : le calcul est le meme, mais l'ancienne cassera la compilation a la + // prochaine version du moteur. + LocomotionDirection = UKismetAnimationLibrary::CalculateDirection(HorizontalVelocity, BodyOwner->GetActorRotation()); + + // GetBaseAimRotation et pas GetControlRotation : le second n'existe que sur + // la machine qui possede le pawn, le premier retombe sur RemoteViewPitch + // pour les pawns des autres joueurs. NormalizeAxis ramene les 350 degres + // d'un regard vers le bas a -10, seule forme exploitable par un AimOffset. + AimPitch = FRotator::NormalizeAxis(BodyOwner->GetBaseAimRotation().Pitch); + + LocomotionPlayRate = FMath::Clamp( + GroundSpeed / ReferenceLocomotionSpeed, + MinLocomotionPlayRate, + MaxLocomotionPlayRate); +} diff --git a/Source/Survival_projet/Public/PlayerBodyAnimInstance.h b/Source/Survival_projet/Public/PlayerBodyAnimInstance.h new file mode 100644 index 0000000..5bd045a --- /dev/null +++ b/Source/Survival_projet/Public/PlayerBodyAnimInstance.h @@ -0,0 +1,150 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "Animation/AnimInstance.h" +#include "PlayerBodyAnimInstance.generated.h" + +class AFpsPlayer; + +/** + * AnimInstance du corps vu a la TROISIEME personne -- celui que les autres + * joueurs voient, et dont on ne percoit soi-meme que l'ombre. + * + * Meme partage des roles que UFpsArmsAnimInstance : elle ne DECIDE de rien, elle + * lit l'etat du pawn une fois par frame et le republie en variables. C'est la + * machine a etats du Blueprint enfant qui choisit l'animation, parce qu'une + * transition se regle a l'oeil avec des durees de fondu et n'a rien a faire dans + * du C++ qu'il faut recompiler. + * + * La difference avec les bras est reseau, et elle est essentielle : les bras ne + * sont vus que par leur proprietaire, ce corps-ci est vu par TOUT LE MONDE. + * Chaque machine evalue donc les quatre corps de la partie. Et pourtant rien + * n'est replique ici -- tout est DERIVE d'un etat que le moteur ou le projet + * synchronisent deja : + * + * Velocity -> replique par le mouvement du Character + * bIsCrouched -> UPROPERTY repliquee d'ACharacter + * bIsSprinting -> repliquee par AFpsPlayer (c'est a ca qu'elle sert) + * AimPitch -> RemoteViewPitch, replique par APawn sans rien demander + * + * Repliquer une seule de ces variables serait envoyer deux fois la meme + * information -- exactement le reproche fait a UPlayerNameplateComponent. + */ +UCLASS() +class SURVIVAL_PROJET_API UPlayerBodyAnimInstance : public UAnimInstance +{ + GENERATED_BODY() + +public: + virtual void NativeInitializeAnimation() override; + virtual void NativeUpdateAnimation(float DeltaSeconds) override; + +protected: + // ------------------------------------------------------------------ + // Etat publie vers le Blueprint d'animation + // ------------------------------------------------------------------ + + /** Vitesse horizontale en cm/s : l'axe du BlendSpace de deplacement. */ + UPROPERTY(BlueprintReadOnly, Category = "Movement") + float GroundSpeed = 0.f; + + /** + * Direction du deplacement par rapport a l'orientation du corps, en degres : + * 0 = on avance, 90 = on va vers la droite, 180 = on recule. + * + * Elle est non nulle en permanence dans ce jeu et ce n'est pas un detail : + * bUseControllerRotationYaw garde le corps aligne sur la camera, donc un pas + * de cote est un VRAI pas de cote, jamais un demi-tour. Le pack ne livre que + * des cycles vers l'avant, donc personne ne la lit encore ; elle est publiee + * parce que le jour ou les cycles lateraux arriveront, il n'y aura qu'un + * BlendSpace a brancher et pas une classe a rouvrir. + */ + UPROPERTY(BlueprintReadOnly, Category = "Movement") + float LocomotionDirection = 0.f; + + /** Vrai quand le joueur se deplace REELLEMENT, freinage exclu. */ + UPROPERTY(BlueprintReadOnly, Category = "Movement") + bool bIsMoving = false; + + UPROPERTY(BlueprintReadOnly, Category = "Movement") + bool bIsSprinting = false; + + UPROPERTY(BlueprintReadOnly, Category = "Movement") + bool bIsFalling = false; + + /** + * Vitesse verticale en cm/s : positif = on monte, negatif = on tombe. + * + * C'est elle, et elle seule, qui distingue un SAUT d'une CHUTE. bIsFalling + * vaut vrai dans les deux cas : le moteur appelle "falling" tout ce qui n'est + * pas au sol, detente comprise. Sans ce signe, sortir d'une falaise jouerait + * l'animation de detente -- un personnage qui prend son elan pour tomber. + * + * Gratuite sur le reseau comme le reste : le CharacterMovement replique deja + * la velocite des pawns distants, on ne fait que lire sa composante Z. + */ + UPROPERTY(BlueprintReadOnly, Category = "Movement") + float VerticalSpeed = 0.f; + + UPROPERTY(BlueprintReadOnly, Category = "Movement") + bool bIsCrouching = false; + + /** + * Tangage du regard, en degres, borne a -90..90. Positif = le joueur regarde + * vers le haut. + * + * Gratuit sur le reseau : APawn compresse et replique deja RemoteViewPitch + * pour ses pawns distants, et GetBaseAimRotation() rend la bonne valeur des + * deux cotes sans qu'on ait une seule propriete a declarer. Personne ne la + * lit tant qu'il n'y a pas d'AimOffset -- mais le jour ou un ami doit voir + * qu'on regarde le ciel, c'est cette variable qu'on branchera. + */ + UPROPERTY(BlueprintReadOnly, Category = "Aim") + float AimPitch = 0.f; + + /** + * Vitesse de lecture du cycle de deplacement. + * + * A NE BRANCHER QUE si l'on joue une animation unique. Avec le BlendSpace du + * pack, qui interpole deja marche et course sur l'axe de la vitesse, la + * brancher etirerait une seconde fois un cycle deja etire et donnerait une + * cadence qui accelere deux fois trop vite. Elle reste ici parce que le + * BlendSpace est calibre sur les vitesses du pack et pas sur les notres + * (200 / 400 / 650) : si la foulee patine, c'est le reglage a sortir. + */ + UPROPERTY(BlueprintReadOnly, Category = "Movement") + float LocomotionPlayRate = 1.f; + + /** + * En dessous de cette vitesse (cm/s) on considere le joueur immobile. + * + * Un seuil strictement a zero ferait clignoter la transition course/repos + * pendant le freinage, ou la vitesse decroit en passant par des valeurs + * minuscules mais non nulles. + */ + UPROPERTY(EditDefaultsOnly, Category = "Movement", meta = (ClampMin = "0")) + float MovingSpeedThreshold = 10.f; + + /** Vitesse (cm/s) a laquelle le cycle tourne a sa cadence d'origine. */ + UPROPERTY(EditDefaultsOnly, Category = "Movement", meta = (ClampMin = "1")) + float ReferenceLocomotionSpeed = 400.f; + + /** Bornes du Play Rate, memes garde-fous que sur les bras. */ + UPROPERTY(EditDefaultsOnly, Category = "Movement", meta = (ClampMin = "0.1")) + float MinLocomotionPlayRate = 0.6f; + + UPROPERTY(EditDefaultsOnly, Category = "Movement", meta = (ClampMin = "0.1")) + float MaxLocomotionPlayRate = 1.8f; + +private: + /** + * Cache du pawn. TryGetPawnOwner() fait un Cast a chaque appel, et cette + * fonction tourne a chaque frame sur QUATRE corps en partie a quatre. + * + * TWeakObjectPtr et pas un pointeur nu : apres un respawn le pawn est + * detruit, et cet objet peut lui survivre d'une frame. + */ + TWeakObjectPtr OwningPlayer; +}; diff --git a/Source/Survival_projet/Survival_projet.Build.cs b/Source/Survival_projet/Survival_projet.Build.cs index e5c70a5..0de7c98 100644 --- a/Source/Survival_projet/Survival_projet.Build.cs +++ b/Source/Survival_projet/Survival_projet.Build.cs @@ -23,7 +23,10 @@ public class Survival_projet : ModuleRules // EngineSettings : UGameMapsSettings::GetGameDefaultMap(), qui evite de // redeclarer le chemin de la map de menu dans le C++ alors qu'il est // deja dans DefaultEngine.ini. - PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore", "EngineSettings" }); + // AnimGraphRuntime : UKismetAnimationLibrary::CalculateDirection, qui remplace + // la methode homonyme d'UAnimInstance depreciee en 5.8. Prive et pas public -- + // seul le .cpp de UPlayerBodyAnimInstance l'appelle, son header n'en montre rien. + PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore", "EngineSettings", "AnimGraphRuntime" }); // Coop Steam : on ne depend QUE de l'API generique (OnlineSubsystem) et de // ses helpers (OnlineSubsystemUtils, qui porte le resolveur d'adresses).