LifePlay-Revival/Plugins/StreetMap/Source/StreetMapRuntime/StreetMap.cpp
edujiro5972 1122e17fa6 L0 : etat initial du projet 5.5 avant toute correction
Instantane de reference de la reprise de migration (2026-09-29).
Contient GI.uasset tel que trouve (copie UE4 identique a 4.27,
MD5 F4550DA5DC05FC005400CDCA2FC123C9). Ajouts de ce commit :
.gitattributes (aucune conversion de fin de ligne), regles .gitignore
CHG-001, Tools/ (Snapshot, Restore, AssetHeaders), empreintes L0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 00:56:10 +02:00

170 lines
No EOL
4.3 KiB
C++

#include "StreetMap.h"
#include "UObject/AssetRegistryTagsContext.h"
#include "EditorFramework/AssetImportData.h"
#include "PolygonTools.h"
#include "Engine/StaticMesh.h"
#include "StaticMeshResources.h"
#include "PhysicsEngine/BodySetup.h"
UStreetMap::UStreetMap()
{
#if WITH_EDITORONLY_DATA
if( !HasAnyFlags( RF_ClassDefaultObject ) )
{
AssetImportData = NewObject<UAssetImportData>( this, TEXT( "AssetImportData" ) );
}
#endif
}
// Portage 5.5 : voir StreetMap.h. Meme corps, la seule difference est que le tag est
// pousse dans le contexte au lieu d'etre ajoute a un tableau fourni par l'appelant.
void UStreetMap::GetAssetRegistryTags( FAssetRegistryTagsContext Context ) const
{
#if WITH_EDITORONLY_DATA
if( AssetImportData )
{
Context.AddTag( FAssetRegistryTag( SourceFileTagName(), AssetImportData->GetSourceData().ToJson(), FAssetRegistryTag::TT_Hidden ) );
}
#endif
Super::GetAssetRegistryTags( Context );
}
TArray<FStreetMapBuilding> UStreetMap::FindBuilding(const FVector2D Point)
{
TArray<FStreetMapBuilding> FoundBuildings;
for (const auto &element : Buildings)
{
if (FPolygonTools::IsPointInsidePolygon(element.BuildingPoints, Point))
{
FoundBuildings.Add(element);
}
}
return FoundBuildings;
}
FStreetMapRoad UStreetMap::FindRoad(const FVector2D Point)
{
FStreetMapRoad emptyRoad;
for (const auto &element : Roads)
{
if (FPolygonTools::IsPointInsidePolygon(element.RoadPoints, Point) && element.RoadName.Len() > 0)
{
return element;
}
}
return emptyRoad;
}
FStreetMapBuilding UStreetMap::FindBuildingFromArray(const FVector2D Point, TArray<FStreetMapBuilding> SmallBuildings)
{
FStreetMapBuilding emptyBuilding;
for (const auto &element : SmallBuildings)
{
if (FPolygonTools::IsPointInsidePolygon(element.BuildingPoints, Point))
{
return element;
}
}
return emptyBuilding;
}
TArray<FStreetMapBuilding> UStreetMap::SearchByBuildingName(FString SearchTerm, FString Amenity) const
{
TArray<FStreetMapBuilding> Results;
if (SearchTerm.Len() > 0)
{
for (const auto &element : Buildings)
{
if (element.BuildingName.Contains(SearchTerm))
{
Results.Add(element);
}
}
}
else
{
Results = Buildings;
}
if (Amenity.Len() > 0)
{
Results = FilterByAmenity(Amenity, Results);
}
return Results;
}
TArray<FStreetMapBuilding> UStreetMap::SearchByBuildingNameFromArray(FString SearchTerm, FString Amenity, TArray<FStreetMapBuilding> SmallBuildings) const
{
TArray<FStreetMapBuilding> Results;
if (SearchTerm.Len() > 0)
{
for (const auto &element : SmallBuildings)
{
if (element.BuildingName.Contains(SearchTerm))
{
Results.Add(element);
}
}
}
else
{
Results = SmallBuildings;
}
if (Amenity.Len() > 0)
{
Results = FilterByAmenity(Amenity, Results);
}
return Results;
}
TArray<FStreetMapBuilding> UStreetMap::SearchByAmenity(FString Amenity) const
{
TArray<FStreetMapBuilding> Results = FilterByAmenity(Amenity, Buildings);
return Results;
}
TArray<FStreetMapBuilding> UStreetMap::FilterByAmenity(FString Amenity, TArray<FStreetMapBuilding> SmallBuildings) const
{
TArray<FStreetMapBuilding> Results;
for (const auto &element : SmallBuildings)
{
if (element.Amenity == Amenity)
{
Results.Add(element);
}
else if (element.Building == Amenity)
{
Results.Add(element);
}
else if (Amenity == "residential")
{
if (element.Building == "apartments" || element.Building == "flats" || element.Building == "house")
{
Results.Add(element);
}
}
else if (Amenity == "office")
{
if (element.Building == "commercial" || element.Building == "tower")
{
Results.Add(element);
}
}
else if (Amenity == "sports_centre")
{
if (element.Amenity == "gym" || element.Building == "fitness_centre")
{
Results.Add(element);
}
}
}
return Results;
}