mirror of
https://github.com/simtactics/mysimulation.git
synced 2025-03-19 08:21:22 +00:00
99 lines
2.9 KiB
C#
99 lines
2.9 KiB
C#
|
using FSO.Files.Utils;
|
|||
|
using System;
|
|||
|
using System.IO;
|
|||
|
|
|||
|
namespace FSO.Files.Formats.IFF.Chunks
|
|||
|
{
|
|||
|
public class CARR : IffChunk
|
|||
|
{
|
|||
|
public string Name;
|
|||
|
public JobLevel[] JobLevels;
|
|||
|
|
|||
|
public override void Read(IffFile iff, Stream stream)
|
|||
|
{
|
|||
|
using (var io = IoBuffer.FromStream(stream, ByteOrder.LITTLE_ENDIAN))
|
|||
|
{
|
|||
|
io.ReadUInt32(); //pad
|
|||
|
var version = io.ReadUInt32();
|
|||
|
|
|||
|
var MjbO = io.ReadUInt32();
|
|||
|
|
|||
|
var compressionCode = io.ReadByte();
|
|||
|
if (compressionCode != 1) throw new Exception("hey what!!");
|
|||
|
|
|||
|
Name = io.ReadNullTerminatedString();
|
|||
|
if (Name.Length % 2 == 1) io.ReadByte();
|
|||
|
var iop = new IffFieldEncode(io);
|
|||
|
|
|||
|
|
|||
|
var numLevels = iop.ReadInt32();
|
|||
|
|
|||
|
JobLevels = new JobLevel[numLevels];
|
|||
|
for (int i=0; i<numLevels; i++)
|
|||
|
{
|
|||
|
JobLevels[i] = new JobLevel(iop);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public int GetJobData(int level, int data)
|
|||
|
{
|
|||
|
var entry = JobLevels[level];
|
|||
|
switch (data)
|
|||
|
{
|
|||
|
case 0: //number of levels
|
|||
|
return JobLevels.Length;
|
|||
|
case 1: //salary
|
|||
|
return entry.Salary;
|
|||
|
case 12: //start hour
|
|||
|
return entry.StartTime;
|
|||
|
case 13:
|
|||
|
return entry.EndTime;
|
|||
|
case 21:
|
|||
|
return entry.CarType;
|
|||
|
case 22:
|
|||
|
return 0;
|
|||
|
default:
|
|||
|
if (data < 12)
|
|||
|
return entry.MinRequired[data-2];
|
|||
|
else
|
|||
|
return entry.MotiveDelta[data-14];
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public class JobLevel
|
|||
|
{
|
|||
|
public int[] MinRequired = new int[10]; //friends, then skills.
|
|||
|
public int[] MotiveDelta = new int[7];
|
|||
|
public int Salary;
|
|||
|
public int StartTime;
|
|||
|
public int EndTime;
|
|||
|
public int CarType;
|
|||
|
|
|||
|
public string JobName;
|
|||
|
public string MaleUniformMesh;
|
|||
|
public string FemaleUniformMesh;
|
|||
|
public string UniformSkin;
|
|||
|
public string unknown;
|
|||
|
|
|||
|
public JobLevel(IffFieldEncode iop)
|
|||
|
{
|
|||
|
for (int i=0; i<MinRequired.Length; i++)
|
|||
|
MinRequired[i] = iop.ReadInt32();
|
|||
|
for (int i = 0; i < MotiveDelta.Length; i++)
|
|||
|
MotiveDelta[i] = iop.ReadInt32();
|
|||
|
Salary = iop.ReadInt32();
|
|||
|
StartTime = iop.ReadInt32();
|
|||
|
EndTime = iop.ReadInt32();
|
|||
|
CarType = iop.ReadInt32();
|
|||
|
|
|||
|
JobName = iop.ReadString(false);
|
|||
|
MaleUniformMesh = iop.ReadString(false);
|
|||
|
FemaleUniformMesh = iop.ReadString(false);
|
|||
|
UniformSkin = iop.ReadString(false);
|
|||
|
unknown = iop.ReadString(true);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|