core/player/BasePlayer.cs
public class BasePlayer : Component {
	public static BasePlayer Local {get; set;}
	[Property, ReadOnly] public int Index {get; set;} = 0;

	[Property, Change(nameof(UpdateMode))] public bool Isometric {get; set;}

	[Property, Hide] public GameObject PacCameraRoot {get; set;}
	[Property, Hide] public GameObject IsoCameraRoot {get; set;}
	[Property, Hide] public GameObject IsoNpcRoot {get; set;}

	[Property, Hide] public PlayerInventory Inventory {get; set;}
	[Property, Hide] public PlayerMouse Mouse {get; set;}
	[Property, Hide] public PlayerPacCamera PacCamera {get; set;}
	[Property, Hide] public PlayerIsoCamera IsoCamera {get; set;}
	[Property, Hide] public PlayerIsoMovement IsoMovement {get; set;}
	[Property, Hide] public IsoEntity IsoEntity {get; set;}

	protected override void DrawGizmos() {
		GameObject.Name = "PLAYER_"+Index;
		base.DrawGizmos();
	}

	protected override void OnAwake() {
		Local = this;
		Index = 0;//Scene.GetAllComponents<PlayerProxyBody>().Count();
		GameObject.Name = "PLAYER_"+Index;
		GameObject.NetworkMode = NetworkMode.Never;
		Tags.Add("dynamic");

		Spawn.SetOwner(this);

		Spawn.GameObject(nameof(PacCameraRoot), "_PAC_CAMERA");
		Spawn.GameObject(nameof(IsoCameraRoot), "_ISO_CAMERA");
		Spawn.GameObject(nameof(IsoNpcRoot), "_ISO_NPC");
		IsoNpcRoot.SetParent(null);

		Spawn.Component(nameof(Inventory));
		Spawn.Component(nameof(Mouse));

		Spawn.Component(nameof(PacCamera), PacCameraRoot);

		Spawn.Component(nameof(IsoCamera), IsoCameraRoot);
		Spawn.Component(nameof(IsoMovement), IsoNpcRoot);
		IsoNpcRoot.Components.Create<SkinnedModelRenderer>().Model = Model.Load("models/characters/player.vmdl");
		Spawn.Component(nameof(IsoEntity), IsoNpcRoot);

		UpdateMode();
		base.OnAwake();
	}

	public void UpdateMode() {
		if (Isometric)
			GameObject.SetParent(null);
		IsoMovement.Enabled = Isometric;
		IsoCameraRoot.Enabled = Isometric;
		PacCameraRoot.Enabled = !Isometric;
	}

	protected override void OnUpdate() {
		if (Isometric) {
			WorldRotation = Rotation.Identity;
			IsoMovement.Update();
			IsoCamera.Update();
		} else {
			PacCamera.Update();
		}
		base.OnUpdate();
	}
}