DynamicInteriorState
A networked game state for dynamically-loaded interiors. Supports flexible session joining, dynamic spawn point logic, and interior-specific UI rendering.
public class DynamicInteriorState : GameStateWithPlayer
Purpose
- Loads a specific interior space on demand
- Interfaces with a
DynamicInteriorControllerto handle player spawn positioning - Manages focus-based state transitions and reconnects
- Handles server session bootstrapping based on the interior ID
Constructor
public DynamicInteriorState(ServerScene _scn, GameStateManager manager)
Initializes with a scene reference and state manager, passed down to GameStateWithPlayer.
Fields
string requestedInteriorID
ID of the target interior to load. Set via RequestInterior().
AssetReferenceGameObject _sceneUI
Addressable prefab for the scene-specific UI overlay.
GameObject LoadingUI
Prefab for displaying a loading indicator or screen.
GameObject _sceneUIInstance
Live instance of the UI prefab.
DynamicInteriorController cachedInteriorController
Optional scene-level controller for retrieving spawn transforms.
bool lostFocus
Tracks app focus loss to determine if a reconnect is needed.
Key Methods
void RequestInterior(string interiorID)
Defines the target interior session that this state will manage.
Lifecycle Overrides
void EnterState()
- Sets frame rate
- Shows loading UI
- Instantiates
_sceneUI - Connects to multiplayer session using
requestedInteriorID
Task ExitState(bool allowRejoin = false)
- Releases UI
- Disconnects from the session
- Optionally allows rejoin logic
Player Spawn Logic
GetPlayerSpawnPosition(PlayerConnectionHost player)
Delegates spawn location to DynamicInteriorController if available.
GetPlayerSpawnRotation(PlayerConnectionHost player)
Delegates rotation to DynamicInteriorController if available.
Scene Load Handling
void SceneLoaded()
Callback to hide LoadingUI once interior is loaded.
Focus Handling
void ApplicationFocusChanged(bool hasFocus)
On focus loss: Exits state and flags for reconnect.
On focus regain: Re-enters state if lostFocus was true.
Networking
JoinOrCreateSession()
Initiates a multiplayer session using the scene reference and requested interior ID.
Example Usage
var state = new DynamicInteriorState(someScene, GameStateManager.Local);
state.RequestInterior("apt_01");
GameStateManager.Local.RequestState(state);
This class is ideal for handling private or instanced play areas such as apartments, rooms, or build zones.