using System; using RobocraftX.GUI.CommandLine; using RobocraftX.Multiplayer; using RobocraftX.StateSync; using RobocraftX.Character; using Svelto.ECS; using Unity.Entities; using UnityEngine; using uREPL; using Svelto.Context; using RobocraftX; namespace ExtraCommands.Basics { [CustomCommand] class ChainCommandEngine : CustomCommandEngine { public ChainCommandEngine(UnityContext<FullGameCompositionRoot> ctxHolder, EnginesRoot enginesRoot, World physW, Action reloadGame, MultiplayerInitParameters mpParams) : base(ctxHolder, enginesRoot, physW, reloadGame, mpParams) { } public override void Ready() { CustomCommandUtility.Register<string, string>("Chain", ChainCommand, "Run two commands, one after the other"); CustomCommandUtility.Register<string, string>("ChainNoFail", ChainNoFailCommand, "Run two commands, one after the other even if the first one is invalid"); CustomCommandUtility.Register<string, string>("ChainQuiet", ChainQuietCommand, "Run two commands, one after the other quietly"); } private void ChainCommand(string command1, string command2) { string command1a = decomma(command1); string command2a = decomma(command2); bool success1 = uREPL.Evaluator.Evaluate(command1a).type == CompileResult.Type.Success; if (!success1) { uREPL.Log.Error("First command was not executed successfully"); return; } bool success2 = uREPL.Evaluator.Evaluate(command2a).type == CompileResult.Type.Success; if (!success2) { uREPL.Log.Error("Second command was not executed successfully"); } } private void ChainNoFailCommand(string command1, string command2) { string command1a = decomma(command1); string command2a = decomma(command2); bool success1 = uREPL.Evaluator.Evaluate(command1a).type == CompileResult.Type.Success; if (!success1) { uREPL.Log.Error("First command was not executed successfully"); } bool success2 = uREPL.Evaluator.Evaluate(command2a).type == CompileResult.Type.Success; if (!success2) { uREPL.Log.Error("Second command was not executed successfully"); } } private void ChainQuietCommand(string command1, string command2) { string command1a = decomma(command1); string command2a = decomma(command2); uREPL.Evaluator.Evaluate(command1a); uREPL.Evaluator.Evaluate(command2a); } private string decomma(string strIn) { string strOut = ""; bool wasCommaLast = false; foreach (char c in strIn) { if (wasCommaLast) { wasCommaLast = false; if (c == ' ') { strOut = strOut.Substring(0, strOut.Length - 1); } } if (c == ',') { wasCommaLast = true; } strOut += c; } return strOut; } public override void Dispose() { CustomCommandUtility.Unregister("Chain"); CustomCommandUtility.Unregister("ChainNoFail"); CustomCommandUtility.Unregister("ChainQuiet"); } } }