A static class providing constants and methods to instantiate door assets like leaves and frames for map prototyping. It loads models from local engine resources, applies colliders, and configures door behavior components.
namespace HorizonRP;
/// <summary>Vantaux et chambranles déjà employés par Truenorth, à leur échelle native.</summary>
public static class BankPrototypeMapDoor
{
public const string Wood = "truenorth/models/props_doors/doormain01_small.vmdl";
public const string Metal = "truenorth/models/props_doors/doormainmetalsmall01.vmdl";
public const string Window = "truenorth/models/props_doors/doormainmetalwindowsmall01.vmdl";
public const string Store = "truenorth/models/props/storedoor1.vmdl";
public static GameObject Leaf( GameObject root, string name, string modelPath,
Vector3 pivot, float yaw, float turn, string group )
{
var model = Model.Load( modelPath );
var go = new GameObject( root, true, name );
go.LocalPosition = pivot;
go.LocalRotation = Rotation.FromYaw( yaw );
go.LocalScale = Vector3.One;
go.Components.Create<ModelRenderer>().Model = model;
var collider = go.Components.Create<BoxCollider>();
collider.Center = model.Bounds.Center;
collider.Scale = model.Bounds.Size;
collider.Static = false;
go.Components.Create<Rigidbody>().MotionEnabled = false;
var door = go.Components.Create<BankPrototypeDoor>();
door.Group = group;
door.TurnDegrees = turn;
return go;
}
public static void Single( GameObject root, string name, Vector3 openingFloor,
bool alongX, string path, float turn = -95 )
{
var yaw = alongX ? 90f : 0f;
var model = Model.Load( path );
var pivot = openingFloor - Rotation.FromYaw( yaw ).Forward * 24;
pivot.z -= model.Bounds.Mins.z;
Leaf( root, name, path, pivot, yaw, turn, name );
var frame = new GameObject( root, true, "Chambranle d'origine · " + name );
frame.LocalPosition = openingFloor + Vector3.Up * 53;
frame.LocalRotation = Rotation.FromYaw( alongX ? 0 : 90 );
var frameModel = Model.Load( "truenorth/models/props/doorframe_s.vmdl" );
frame.Components.Create<ModelRenderer>().Model = frameModel;
// Maillage réel du cadre, afin de garder le passage ouvert.
var collider = frame.Components.Create<ModelCollider>();
collider.Model = frameModel;
collider.Static = true;
}
public static void Entrance( GameObject root, Vector3 centerFloor )
{
// Même modèle, mêmes entraxes et mêmes angles que bank1 sur la carte d'origine.
Leaf( root, "Entrée banque · porte gauche d'origine", Store,
centerFloor + new Vector3( -46, 0, 52 ), 0, -95, "entree" );
Leaf( root, "Entrée banque · porte droite d'origine", Store,
centerFloor + new Vector3( 46, 0, 52 ), 180, 95, "entree" );
}
}