leadercraft/Leadercraft/Scoring/State.cs

88 lines
2.1 KiB
C#
Raw Normal View History

2020-05-14 23:09:39 -04:00
using System;
using GamecraftModdingAPI.Utility;
namespace Leadercraft.Scoring
{
internal static class State
{
public static bool IsInGame { get; private set; }= false;
public static bool IsPlayingGame { get; private set; } = false;
public static DateTime GameEnterTime { get; private set; }
public static DateTime GameStartTime { get; private set; }
public static TimeSpan GamePlayTime { get; private set; }
public static float[] PlayerLocation { get; private set; }
public static ulong GameId { get; private set; }
public static int Score { get; private set; }
public static bool IsGameComplete { get; private set; }
public static bool IsGameSynced { get; private set; }
public static void EnterGame()
{
if (IsInGame) return;
Logging.MetaDebugLog("Entering game");
IsInGame = true;
IsGameSynced = false;
IsGameComplete = false;
GameId = Server.Tools.GameId;
GameEnterTime = DateTime.UtcNow;
}
public static void ExitGame()
{
if (!IsInGame) return;
Logging.MetaDebugLog("Exiting game");
IsInGame = false;
}
public static void StartPlayingGame()
{
if (IsPlayingGame) return;
Logging.MetaDebugLog("Starting to play game");
Score = 0;
IsPlayingGame = true;
GameStartTime = DateTime.UtcNow;
}
public static void StopPlayingGame()
{
if (!IsPlayingGame) return;
GamePlayTime = DateTime.UtcNow - GameStartTime;
Logging.MetaDebugLog("Stopping game");
IsPlayingGame = false;
}
public static void SetLocation(float x, float y, float z)
{
PlayerLocation = new float[] { x, y, z };
}
public static void AddScore(int points)
{
Score += points;
}
public static Server.CriteriaStruct Criteria()
{
IsGameSynced = true;
return new Server.CriteriaStruct
{
Location = new float[][] { PlayerLocation, PlayerLocation },
Time = Convert.ToInt32(Math.Round(GamePlayTime.TotalSeconds, MidpointRounding.AwayFromZero)),
GameID = GameId,
PlayerID = 0,
Complete = IsGameComplete,
Points = Score,
};
}
}
}