public PinnedConfig(Config config) { StartPositions = new PinnedManagedObject <PositionStart[]>(config.StartPositions); EndPositions = new PinnedManagedObject <PositionEnd[]> (config.EndPositions); BragPositions = new PinnedManagedObject <PositionEnd[]> (config.BragPositions); StageId = config.StageId; }
public DefaultStage(StageId stageId) { StageId = stageId; var stageInfo = StageInfo.FromStageId(stageId); if (stageInfo.MultiplayerStartPositions != null) { /* For Rose and Chaotix copy 1P and 2P spawns. */ _startPositionsSingleInMultiplayer = new PinnedManagedObject <PositionStart[]>(new[] { stageInfo.MultiplayerStartPositions->Player1Start, stageInfo.MultiplayerStartPositions->Player2Start, stageInfo.MultiplayerStartPositions->Player1Start, stageInfo.MultiplayerStartPositions->Player2Start }); StartPositions = (PositionStart *)_startPositionsSingleInMultiplayer.ObjectPtr; } else { if (stageInfo.StartPositions != null) { StartPositions = &stageInfo.StartPositions->SonicStart; } } if (stageInfo.MultiplayerBragPositions != null) { BragPositions = &stageInfo.EndPositions->SonicEnd; } if (stageInfo.EndPositions != null) { EndPositions = &stageInfo.EndPositions->SonicEnd; } /* Replace any nulls with defaults. */ if (StartPositions == null) { StartPositions = _defaultStartPositions.AsPointer <PositionStart>(); } if (EndPositions == null) { EndPositions = _defaultEndPositions.AsPointer <PositionEnd>(); } if (BragPositions == null) { BragPositions = _defaultEndPositions.AsPointer <PositionEnd>(); } }