NorbiPeti
f403feb298
Removed BlockIdentifiers.OWNED_BLOCKS as the original got replaced with an array Added the correct group for each supported functional block Removed EntityFactory property from IEntitySerializer as it is provided on deserialization
119 lines
3.3 KiB
C#
119 lines
3.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using HarmonyLib;
|
|
|
|
using RobocraftX;
|
|
using RobocraftX.Common;
|
|
using RobocraftX.Schedulers;
|
|
using RobocraftX.SimulationModeState;
|
|
using Svelto.ECS;
|
|
using Svelto.Tasks;
|
|
using Svelto.Tasks.Lean;
|
|
|
|
using GamecraftModdingAPI.Blocks;
|
|
using GamecraftModdingAPI.Engines;
|
|
using GamecraftModdingAPI.Utility;
|
|
|
|
namespace GamecraftModdingAPI.App
|
|
{
|
|
public class GameGameEngine : IApiEngine
|
|
{
|
|
public event EventHandler<GameEventArgs> EnterGame;
|
|
|
|
public event EventHandler<GameEventArgs> ExitGame;
|
|
|
|
public string Name => "GamecraftModdingAPIGameInfoMenuEngine";
|
|
|
|
public bool isRemovable => false;
|
|
|
|
public EntitiesDB entitiesDB { set; private get; }
|
|
|
|
public void Dispose()
|
|
{
|
|
ExceptionUtil.InvokeEvent(ExitGame, this, new GameEventArgs { GameName = GameMode.SaveGameDetails.Name, GamePath = GameMode.SaveGameDetails.Folder });
|
|
IsInGame = false;
|
|
}
|
|
|
|
public void Ready()
|
|
{
|
|
ExceptionUtil.InvokeEvent(EnterGame, this, new GameEventArgs { GameName = GameMode.SaveGameDetails.Name, GamePath = GameMode.SaveGameDetails.Folder });
|
|
IsInGame = true;
|
|
}
|
|
|
|
// game functionality
|
|
|
|
public bool IsInGame
|
|
{
|
|
get;
|
|
private set;
|
|
} = false;
|
|
|
|
public void ExitCurrentGame(bool async = false)
|
|
{
|
|
if (async)
|
|
{
|
|
ExitCurrentGameAsync().RunOn(Lean.EveryFrameStepRunner_RUNS_IN_TIME_STOPPED_AND_RUNNING);
|
|
}
|
|
else
|
|
{
|
|
entitiesDB.QueryEntity<GameSceneEntityStruct>(CommonExclusiveGroups.GameSceneEGID).WantsToQuit = true;
|
|
entitiesDB.PublishEntityChange<GameSceneEntityStruct>(CommonExclusiveGroups.GameSceneEGID);
|
|
}
|
|
|
|
}
|
|
|
|
public IEnumerator<TaskContract> ExitCurrentGameAsync()
|
|
{
|
|
/*
|
|
while (Lean.EveryFrameStepRunner_RUNS_IN_TIME_STOPPED_AND_RUNNING.isStopping) { yield return Yield.It; }
|
|
AccessTools.Method(typeof(FullGameCompositionRoot), "SwitchToMenu").Invoke(FullGameFields.Instance, new object[0]);*/
|
|
yield return Yield.It;
|
|
entitiesDB.QueryEntity<GameSceneEntityStruct>(CommonExclusiveGroups.GameSceneEGID).WantsToQuit = true;
|
|
entitiesDB.PublishEntityChange<GameSceneEntityStruct>(CommonExclusiveGroups.GameSceneEGID);
|
|
}
|
|
|
|
public void SaveCurrentGame()
|
|
{
|
|
ref GameSceneEntityStruct gses = ref entitiesDB.QueryEntity<GameSceneEntityStruct>(CommonExclusiveGroups.GameSceneEGID);
|
|
gses.LoadAfterSaving = false;
|
|
gses.SaveNow = true;
|
|
entitiesDB.PublishEntityChange<GameSceneEntityStruct>(CommonExclusiveGroups.GameSceneEGID);
|
|
}
|
|
|
|
public bool IsTimeRunningMode()
|
|
{
|
|
return TimeRunningModeUtil.IsTimeRunningMode(entitiesDB);
|
|
}
|
|
|
|
public bool IsTimeStoppedMode()
|
|
{
|
|
return TimeRunningModeUtil.IsTimeStoppedMode(entitiesDB);
|
|
}
|
|
|
|
public void ToggleTimeMode()
|
|
{
|
|
TimeRunningModeUtil.ToggleTimeRunningState(entitiesDB);
|
|
}
|
|
|
|
public EGID[] GetAllBlocksInGame(BlockIDs filter = BlockIDs.Invalid)
|
|
{
|
|
var allBlocks = entitiesDB.QueryEntities<DBEntityStruct>();
|
|
List<EGID> blockEGIDs = new List<EGID>();
|
|
if (filter == BlockIDs.Invalid)
|
|
{
|
|
foreach (var (blocks, _) in allBlocks)
|
|
foreach (var block in blocks)
|
|
blockEGIDs.Add(block.ID);
|
|
return blockEGIDs.ToArray();
|
|
}
|
|
else
|
|
{
|
|
foreach (var (blocks, _) in allBlocks)
|
|
foreach (var block in blocks)
|
|
if (block.DBID == (ulong) filter)
|
|
blockEGIDs.Add(block.ID);
|
|
return blockEGIDs.ToArray();
|
|
}
|
|
}
|
|
}
|
|
}
|