Files
Hasebe/Assets/Tremble/Editor/Manual/Pages/Advanced/MapProcessorPage.cs
T
2026-09-20 15:26:03 +03:00

97 lines
3.6 KiB
C#

//
// This file is part of the Tremble package by Tiny Goose.
// Copyright (c) 2024-2026 TinyGoose Ltd., All Rights Reserved.
//
using UnityEditor;
namespace TinyGoose.Tremble.Editor
{
[ManualPage("Advanced/Map Processors")]
public class MapProcessorPage : ManualPageBase
{
protected override void OnGUI()
{
Text(
$"While {nameof(IOnImportFromMapEntity)} can cover a lot of bases for custom import logic,",
"sometimes you need to either:"
);
Bullet(
"look at the map as a whole - for example, to capture all",
"entities of a certain class into a list, and pass this to some system"
);
Bullet(
"or, you might want to use Editor-only functionality, which can be tricky",
"to write inside an OnImportFromMapEntity callback."
);
Text(
$"For this, you can create your own {nameof(MapProcessorBase)} subclass, and override the",
"functions you need."
);
Text(
"An example of this is provided in SampleMapProcessor.cs. The example finds all",
"the Sheep Spawners in the map, and logs their position. However in a real game",
"you might, for example, take the positions of these and write them into a",
"ScriptableObject which could be later used by a minimap system."
);
Text(
"Map Processors can either be set per-Map or in the Tremble Pipeline settings to affect every",
"map in your project.");
Number("To set a per-Map processor, click your map file in the",
"Project tab, and ensure your map processor class(es) are set, like this:"
);
Image("T_Manual_MapProcessor");
Number("To set Map processors globally for your project, open the Pipeline settings.");
ActionBar_SingleAction("Open Pipeline Settings", () =>
{
const string TREMBLE_PIPELINE_PATH = "Project/Tremble/4 Pipeline";
SettingsService.OpenProjectSettings(TREMBLE_PIPELINE_PATH);
});
H1("Sample Map Processor");
Foldout("Show Code", () =>
{
Code(
$"using {nameof(TinyGoose)}.{nameof(Tremble)};",
"",
$"public class MyCoolMapProcessor : {nameof(MapProcessorBase)}",
"{",
$" public override void OnProcessingStarted({nameof(TrembleMapImportSettings)} context, GameObject root, {nameof(MapBsp)} mapBsp)",
" {",
" Debug.Log($\"Map processing started for {mapBsp.MapName}\");",
" }",
$" public override void OnProcessingCompleted({nameof(TrembleMapImportSettings)} context, GameObject root, {nameof(MapBsp)} mapBsp)",
" {",
" Debug.Log($\"Map processing completed for {mapBsp.MapName} - all entities spawned\");",
" }",
" ",
$" public override void ProcessWorldSpawnProperties({nameof(TrembleMapImportSettings)} context, {nameof(MapBsp)} mapBsp, {nameof(BspEntity)} entity, GameObject rootGameObject)",
" {",
" Debug.Log($\"Worldspawn created for {mapBsp.MapName} - map-wide properties can be read from 'entity'\");",
" }",
" ",
$" public override void ProcessPrefabEntity({nameof(TrembleMapImportSettings)} context, {nameof(MapBsp)} mapBsp, {nameof(BspEntity)} entity, GameObject prefab)",
" {",
" Debug.Log(\"Found a prefab!\");",
" }",
$" public override void ProcessBrushEntity({nameof(TrembleMapImportSettings)} context, {nameof(MapBsp)} mapBsp, {nameof(BspEntity)} entity, GameObject brush)",
" {",
" Debug.Log(\"Found a brush!\");",
" }",
$" public override void ProcessPointEntity({nameof(TrembleMapImportSettings)} context, {nameof(MapBsp)} mapBsp, {nameof(BspEntity)} entity, GameObject point)",
" {",
" Debug.Log(\"Found a point!\");",
" }",
"}");
});
}
}
}