2024-12-15 17:48:29 +01:00

220 lines
5.0 KiB
C#

// WindowsPhoneSpeedyBlupi, Version=1.0.0.5, Culture=neutral, PublicKeyToken=6db12cd62dbec439
// WindowsPhoneSpeedyBlupi.GameData
using System;
using WindowsPhoneSpeedyBlupi;
namespace WindowsPhoneSpeedyBlupi
{
public class GameData
{
private static readonly int HeaderLength = 10;
private static readonly int DoorsLength = 200;
private static readonly int GamerLength = 10 + DoorsLength;
private static readonly int MaxGamer = 3;
private static readonly int TotalLength = HeaderLength + GamerLength * MaxGamer;
private readonly byte[] data;
public int SelectedGamer
{
get
{
return data[2];
}
set
{
data[2] = (byte)value;
}
}
public bool Sounds
{
get
{
return data[3] == 1;
}
set
{
data[3] = (byte)(value ? 1u : 0u);
}
}
public bool JumpRight
{
get
{
return data[4] == 1;
}
set
{
data[4] = (byte)(value ? 1u : 0u);
}
}
public bool AutoZoom
{
get
{
return data[5] == 1;
}
set
{
data[5] = (byte)(value ? 1u : 0u);
}
}
public bool AccelActive
{
get
{
return data[6] == 1;
}
set
{
data[6] = (byte)(value ? 1u : 0u);
}
}
public double AccelSensitivity
{
get
{
return (double)(int)data[7] / 100.0;
}
set
{
value = Math.Max(value, 0.0);
value = Math.Min(value, 1.0);
data[7] = (byte)(value * 100.0);
}
}
public int NbVies
{
get
{
return data[GamerOffset];
}
set
{
data[GamerOffset] = (byte)value;
}
}
public int LastWorld
{
get
{
return data[GamerOffset + 1];
}
set
{
data[GamerOffset + 1] = (byte)value;
}
}
private int GamerOffset
{
get
{
return GetGamerOffset(SelectedGamer);
}
}
public GameData()
{
data = new byte[TotalLength];
Initialize();
}
public void Read()
{
Worlds.ReadGameData(data);
}
public void Write()
{
Worlds.WriteGameData(data);
}
public void Reset()
{
Initialize(SelectedGamer);
}
public void GetDoors(int[] doors)
{
for (int i = 0; i < DoorsLength; i++)
{
doors[i] = data[GamerOffset + 10 + i];
}
}
public void SetDoors(int[] doors)
{
for (int i = 0; i < DoorsLength; i++)
{
data[GamerOffset + 10 + i] = (byte)doors[i];
}
}
public void GetGamerInfo(int gamer, out int nbVies, out int mainDoors, out int secondaryDoors)
{
nbVies = data[GetGamerOffset(gamer)];
secondaryDoors = 0;
for (int i = 0; i < 180; i++)
{
if (data[GetGamerOffset(gamer) + 10 + i] == 1)
{
secondaryDoors++;
}
}
mainDoors = 0;
for (int j = 180; j < 200; j++)
{
if (data[GetGamerOffset(gamer) + 10 + j] == 1)
{
mainDoors++;
}
}
}
private void Initialize()
{
data[0] = 1;
data[1] = 1;
data[2] = 0;
data[3] = 1;
data[4] = 1;
data[5] = 1;
data[6] = 0;
data[7] = 50;
SelectedGamer = 0;
for (int i = 0; i < MaxGamer; i++)
{
Initialize(i);
}
}
private void Initialize(int gamer)
{
data[GetGamerOffset(gamer)] = 3;
data[GetGamerOffset(gamer) + 1] = 1;
for (int i = 0; i < DoorsLength; i++)
{
data[GetGamerOffset(gamer) + 10 + i] = 0;
}
}
private int GetGamerOffset(int gamer)
{
return HeaderLength + GamerLength * gamer;
}
}
}