mirror of
https://git.do.srb2.org/STJr/UltimateZoneBuilder.git
synced 2024-11-29 23:22:32 +00:00
93 lines
2.1 KiB
C#
93 lines
2.1 KiB
C#
using CodeImp.DoomBuilder.Config;
|
|
using CodeImp.DoomBuilder.Data;
|
|
using CodeImp.DoomBuilder.GZBuilder.Data;
|
|
using CodeImp.DoomBuilder.Types;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Globalization;
|
|
using System.Linq;
|
|
using System.Text;
|
|
|
|
namespace CodeImp.DoomBuilder.ZDoom
|
|
{
|
|
|
|
public sealed class SOCLevelHeader
|
|
{
|
|
|
|
#region ================== Variables
|
|
|
|
private MapInfo mapinfo;
|
|
|
|
#endregion
|
|
|
|
#region ================== Properties
|
|
|
|
public MapInfo MapInfo { get { return mapinfo; } }
|
|
|
|
#endregion
|
|
|
|
#region ================== SOC level header parsing
|
|
|
|
internal SOCLevelHeader(ZDTextParser zdparser)
|
|
{
|
|
mapinfo = new MapInfo();
|
|
string levelname = "Unnamed map";
|
|
int actnum = 0;
|
|
bool nozone = false;
|
|
|
|
SOCParser parser = (SOCParser)zdparser;
|
|
|
|
// Parse contents of level header
|
|
string line = parser.ReadLine();
|
|
while (line != null)
|
|
{
|
|
line = parser.ReadLine();
|
|
if (string.IsNullOrEmpty(line) || line.StartsWith("\n")) break;
|
|
if (line.StartsWith("#")) continue;
|
|
|
|
line = line.Split(new char[] { '#' })[0];
|
|
|
|
string[] tokens = line.Split(new char[] { '=' });
|
|
if (tokens.Length != 2)
|
|
{
|
|
parser.ReportError("Invalid line");
|
|
return;
|
|
}
|
|
|
|
tokens[0] = tokens[0].Trim().ToLowerInvariant();
|
|
tokens[1] = tokens[1].Trim();
|
|
|
|
switch (tokens[0])
|
|
{
|
|
case "levelname":
|
|
levelname = tokens[1];
|
|
break;
|
|
case "act":
|
|
if (!int.TryParse(tokens[1], out actnum) || actnum > 99)
|
|
{
|
|
parser.LogWarning("Invalid act number (" + tokens[1] + ") found; must be a number ranging from 0 to 99");
|
|
actnum = 0;
|
|
}
|
|
break;
|
|
case "nozone":
|
|
string value = tokens[1].ToLowerInvariant();
|
|
nozone = (value.StartsWith("t") || value.StartsWith("y"));
|
|
break;
|
|
case "skynum":
|
|
mapinfo.Sky1 = "SKY" + tokens[1];
|
|
break;
|
|
case "objectscale":
|
|
mapinfo.ObjectScale = 1.0f; // SRB2 todo: add proper conversion from FRACUNIT-based values to float
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
mapinfo.Title = levelname + (nozone ? "" : " Zone") + (actnum > 0 ? ", Act " + actnum : "");
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|