L7l : plafond WallT masque dans les lieux exterieurs (ERR-036, mesure confirmee)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
026bddf554
commit
2c9fd48d40
4 changed files with 115 additions and 1 deletions
|
|
@ -886,3 +886,12 @@ suit l'échelle : 4,08 m en intérieur mais **20 cm au-dessus du sol en extérie
|
|||
| CHG | Date | Lot | Fichiers | Raison | Retour arrière |
|
||||
|---|---|---|---|---|---|
|
||||
| CHG-056 | 2026-10-01 | L7l | `Source/LifePlay/LPSessionLogSubsystem.h/.cpp` : option `-LPDumpEvery=N` (relevé périodique) | confirmer l'hypothèse du plafond par une mesure en extérieur (`LifePlay_releve_L7l.bat`) | `git checkout L7j2-apres -- Source` |
|
||||
|
||||
Mesure L7l (2026-10-01, `L7l_releve3_20261001.log`, relevé toutes les 5 s) : lieu extérieur « rue » (échelle racine
|
||||
3,5 ; 18 ; **0,01**) : sol à −114,5, pieds du joueur à −112 (capsule −24,2, demi-hauteur 88) : posés ;
|
||||
`WallT` visible, Z relatif 2 040 → **−94,6 en monde, 18 cm au-dessus des pieds** : hypothèse confirmée. En intérieur
|
||||
(café, police, échelle 0,2) : `WallT` à +293, pieds à −100 : correct (capture utilisateur sans défaut).
|
||||
|
||||
| CHG | Date | Lot | Fichiers | Raison | Retour arrière |
|
||||
|---|---|---|---|---|---|
|
||||
| CHG-057 | 2026-10-01 | L7l | `Source/LifePlay/LPOutdoorRoomSubsystem.h/.cpp` (nouveau sous-système) | masquer le plafond `WallT` de `GI.Room` tant que l'échelle Z de sa racine est < 0,05 (lieux extérieurs), le rendre visible quand la pièce redevient intérieure (seulement s'il l'a masqué) ; aucun Blueprint ni asset modifié ; build `LifePlay_Build_5.5_L7cdj` | supprimer les 2 fichiers (`git checkout fa3d98e -- Source`) |
|
||||
|
|
|
|||
|
|
@ -40,5 +40,5 @@
|
|||
| ERR-033 | Certaines actions demandent deux clics pour démarrer | retour utilisateur 2026-09-30 | — | moyenne (ergonomie) | L6d | **non reproduit** depuis le build L6e (constat utilisateur 2026-09-30) ; aucune modification ciblée — coïncide avec CX-B09 (marges des boutons), sans lien démontré ; sous surveillance, à rouvrir s'il réapparaît |
|
||||
| ERR-034 | La barre de temps est décalée vers la droite | retour utilisateur 2026-09-30 | — | faible (visuel) | L6e | **corrigé (CHG-033, CX-B09)** — cause : marge par défaut des `UButton` passée de 2 px (UE4 `FCoreStyle`) à 12 px horizontaux (UE5 `FUMGCoreStyle`) ; 5 boutons × 20 px = 100 px de débordement ; **validé en jeu le 2026-09-30** (build L6e, confirmé par l'utilisateur) |
|
||||
| ERR-035 | 6 nœuds `GetRandomPointInNavigableRadius` dépréciés (R-04 : `Person` 3, `Room` 2, `AI` 1) | `LogBlueprint` | 6 (compilation), 3 (cuisson) | faible (dette) | L7b | **corrigé (CHG-037, CX-B11)**, retiré à tort (CHG-038), réappliqué (CHG-039) : compilation et cuisson 0 avertissement ; **validé en jeu le 2026-09-30** (build L7b) |
|
||||
| ERR-036 | En extérieur (ex. `forest___vin01.lpworld`), personnages et objets (bois du feu de camp) enfoncés sous la surface du sol ; ils traversent la matière | retour utilisateur 2026-09-30 (capture) | — | faible (visuel) | L7l | **préexistant en 4.27** (confirmé par l'utilisateur), présent aussi en V1/L7a : hors périmètre de la migration ; amélioration possible si souhaitée |
|
||||
| ERR-036 | En extérieur (ex. `forest___vin01.lpworld`), personnages et objets (bois du feu de camp) enfoncés sous la surface du sol ; ils traversent la matière | retour utilisateur 2026-09-30 (capture) | — | faible (visuel) | L7l | **préexistant en 4.27** (confirmé par l'utilisateur), présent aussi en V1/L7a : hors périmètre de la migration ; cause mesurée (CHG-057) : plafond `WallT` à 18 cm du sol en extérieur (échelle Z 0,01), qui masque pieds et pieds des meubles ; correctif CHG-057 (plafond masqué en extérieur), **test en jeu en attente** |
|
||||
| ERR-037 | Quick dress (menu Action) laisse souvent le personnage principal nu | retour utilisateur 2026-10-01 | — | moyenne (visible) | — | **préexistant en 4.27** (confirmé par l'utilisateur le 2026-10-01 : même comportement au travail) : au travail seuls les vêtements « Formal » sont acceptés ; sans bas ni chaussures formels dans l'inventaire, seul le haut est mis. Hors périmètre |
|
||||
|
|
|
|||
69
Source/LifePlay/LPOutdoorRoomSubsystem.cpp
Normal file
69
Source/LifePlay/LPOutdoorRoomSubsystem.cpp
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
// Portage UE 5.5 - voir LPOutdoorRoomSubsystem.h
|
||||
|
||||
#include "LPOutdoorRoomSubsystem.h"
|
||||
|
||||
#include "Components/SceneComponent.h"
|
||||
#include "Engine/GameInstance.h"
|
||||
#include "GameFramework/Actor.h"
|
||||
#include "LifePlay.h"
|
||||
#include "UObject/UnrealType.h"
|
||||
|
||||
namespace
|
||||
{
|
||||
// Interieurs : 0,2 a 0,4 ; exterieurs : 0,01. Le seuil laisse une marge des deux cotes.
|
||||
constexpr double OutdoorScaleZ = 0.05;
|
||||
const FName RoomPropertyName(TEXT("Room"));
|
||||
const FName CeilingPropertyName(TEXT("WallT"));
|
||||
|
||||
template <typename T>
|
||||
T* GetObjectProperty(const UObject* Container, FName Name)
|
||||
{
|
||||
const FObjectPropertyBase* Prop = Container ? CastField<FObjectPropertyBase>(Container->GetClass()->FindPropertyByName(Name)) : nullptr;
|
||||
return Prop ? Cast<T>(Prop->GetObjectPropertyValue_InContainer(Container)) : nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
void ULPOutdoorRoomSubsystem::Initialize(FSubsystemCollectionBase& Collection)
|
||||
{
|
||||
Super::Initialize(Collection);
|
||||
TickHandle = FTSTicker::GetCoreTicker().AddTicker(FTickerDelegate::CreateUObject(this, &ULPOutdoorRoomSubsystem::Tick));
|
||||
}
|
||||
|
||||
void ULPOutdoorRoomSubsystem::Deinitialize()
|
||||
{
|
||||
FTSTicker::GetCoreTicker().RemoveTicker(TickHandle);
|
||||
Super::Deinitialize();
|
||||
}
|
||||
|
||||
bool ULPOutdoorRoomSubsystem::Tick(float DeltaTime)
|
||||
{
|
||||
const AActor* Room = GetObjectProperty<AActor>(GetGameInstance(), RoomPropertyName);
|
||||
USceneComponent* Root = IsValid(Room) ? Room->GetRootComponent() : nullptr;
|
||||
USceneComponent* Ceiling = IsValid(Room) ? GetObjectProperty<USceneComponent>(Room, CeilingPropertyName) : nullptr;
|
||||
|
||||
// Plafond masque precedemment mais qui n'est plus celui de la piece courante : le rendre.
|
||||
if (HiddenCeiling.IsValid() && HiddenCeiling.Get() != Ceiling)
|
||||
{
|
||||
HiddenCeiling->SetHiddenInGame(false);
|
||||
HiddenCeiling.Reset();
|
||||
}
|
||||
if (!Root || !Ceiling)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
const bool bOutdoor = Root->GetRelativeScale3D().Z < OutdoorScaleZ;
|
||||
if (bOutdoor && !Ceiling->bHiddenInGame)
|
||||
{
|
||||
Ceiling->SetHiddenInGame(true);
|
||||
HiddenCeiling = Ceiling;
|
||||
UE_LOG(LogLifePlay, Log, TEXT("Piece exterieure (echelle Z %.3f) : plafond WallT masque"), Root->GetRelativeScale3D().Z);
|
||||
}
|
||||
else if (!bOutdoor && HiddenCeiling.Get() == Ceiling)
|
||||
{
|
||||
Ceiling->SetHiddenInGame(false);
|
||||
HiddenCeiling.Reset();
|
||||
UE_LOG(LogLifePlay, Log, TEXT("Piece interieure (echelle Z %.3f) : plafond WallT rendu visible"), Root->GetRelativeScale3D().Z);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
36
Source/LifePlay/LPOutdoorRoomSubsystem.h
Normal file
36
Source/LifePlay/LPOutdoorRoomSubsystem.h
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
// Portage UE 5.5 - lot L7l (ERR-036, amelioration : defaut deja present en 4.27).
|
||||
//
|
||||
// Chaque lieu est construit par l'acteur Room (GI.Room) dont la racine prend l'echelle Z de la ligne 1 du
|
||||
// .lpworld : 0,2 a 0,4 en interieur, 0,01 pour les 7 lieux exterieurs. Le plafond WallT (Z relatif 2040,
|
||||
// sans collision) suit cette echelle : en exterieur il se trouve a ~20 cm au-dessus du sol et, vu de la
|
||||
// camera, devient un "sol blanc" qui cache les pieds et le bas des meubles (releve L7l_releve3).
|
||||
//
|
||||
// Ce sous-systeme masque WallT tant que l'echelle Z de la racine de Room est inferieure au seuil, et le
|
||||
// rend de nouveau visible des que la piece redevient interieure (seulement s'il l'a lui-meme masque).
|
||||
// Aucun Blueprint ni asset n'est modifie ; sans Room ou sans WallT, il ne fait rien.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "Containers/Ticker.h"
|
||||
#include "Subsystems/GameInstanceSubsystem.h"
|
||||
#include "LPOutdoorRoomSubsystem.generated.h"
|
||||
|
||||
class USceneComponent;
|
||||
|
||||
UCLASS()
|
||||
class LIFEPLAY_API ULPOutdoorRoomSubsystem : public UGameInstanceSubsystem
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
virtual void Initialize(FSubsystemCollectionBase& Collection) override;
|
||||
virtual void Deinitialize() override;
|
||||
|
||||
private:
|
||||
bool Tick(float DeltaTime);
|
||||
|
||||
FTSTicker::FDelegateHandle TickHandle;
|
||||
/** Plafond masque par ce sous-systeme (a rendre visible quand la piece redevient interieure). */
|
||||
TWeakObjectPtr<USceneComponent> HiddenCeiling;
|
||||
};
|
||||
Loading…
Reference in a new issue