private void Start() { DontDestroyOnLoad(gameObject); ModConsole.RegisterCommand( "save_pbp4", (args) => { SaveAll(); }, "Save the current PBP4 configuration" ); ModConsole.RegisterCommand( "reload_pbp4", (args) => { ReloadAll(); }, "Reload the current PBP4 configuration" ); }
public override void OnLoad() { Configuration = Configuration.FormatXDataToConfig(); mod = new GameObject("Block Enhancement Mod"); UnityEngine.Object.DontDestroyOnLoad(mod); mod.AddComponent <EnhancementBlockController>(); mod.AddComponent <ModSettingUI>(); //mod.AddComponent<Zone>(); //Controller.Instance.transform.SetParent(mod.transform); //ModSettingUI.Instance.transform.SetParent(mod.transform); LanguageManager.Instance.transform.SetParent(mod.transform); MessageController.Instance.transform.SetParent(mod.transform); RocketsController.Instance.transform.SetParent(mod.transform); AssetManager.Instance.transform.SetParent(mod.transform); //EnhancementEventsController events = mod.AddComponent<EnhancementEventsController>(); ; //ModEvents.RegisterCallback(1, events.OnGroup); ModConsole.RegisterCommand("be", new CommandHandler((value) => { Dictionary <string, Action <string[]> > commandOfAction = new Dictionary <string, Action <string[]> > { { "srssc", (args) => { Modding.Configuration.GetData().Write("Rocket Smoke Start Color", new Color(float.Parse(args[1]), float.Parse(args[2]), float.Parse(args[3]))); } }, { "rfa", (args) => { AssetManager.Instance.RereadAudioClipAsset(); } }, { "setgap", (args) => { ArmorRoundScript.GlobleAudioPitchValue = Mathf.Clamp(float.Parse(args[1]), 0f, 2f); } }, }; if (commandOfAction.ContainsKey(value[0].ToLower())) { commandOfAction[value[0].ToLower()].Invoke(value); } else { Debug.Log(string.Format("Unknown command '{0}', type 'help' for list.", value[0])); } }), "<color=#FF6347>" + "Enhancement Mod Commands\n" + " Usage: be srssc : set rocket smoke start color.\n" + " Usage: be rfa: Refresh asset resource.\n" + " Usage: be setgap [value]: Set Globle Audio Pitch Value(default value:1,interval:[0,2]).\n" + "</color>" ); }
public void Awake() { // Loading var engine = new Jint.Engine(); //var logic = new Interpreter(); Registers = new Dictionary <Type, Action <BlockBehaviour, KeyInputController> >(); Unregisters = new Dictionary <Type, Action <BlockBehaviour> >(); ModConsole.RegisterCommand("script", args => { var text = string.Join(" ", args); //var func = logic.PrepareScript(text); //logic.AddExtFunc(func, "print", (ctx, x) => { ModConsole.Log(x[0]?.ToString()); return null; }, true); //logic.SetScript(func); //var res = logic.ContinueScript(1000); Func <JsValue, JsValue[], JsValue> printCb = (thiz, x) => { ModConsole.Log(x[0]?.ToObject().ToString()); return(x[0]); }; JsValue curV = null; Func <JsValue, JsValue[], JsValue> irqv = (thiz, x) => { curV = x[0]; return(null); }; var script = new JavaScriptParser(text, Jint.Engine.DefaultParserOptions).ParseScript(); engine.SetValue("print", printCb); engine.SetValue("irqv", irqv); engine.SetScript(script); engine.Executor.OnLog = (x) => ModConsole.Log(x?.ToString()); bool cli = false; engine.Executor.OnNextStatement = () => { if (cli) { return; } cli = true; try { if (curV != null) { engine.Invoke(curV); } } finally { cli = false; } }; var res = engine.ContinueScript(1000); ModConsole.Log(res?.ToString()); }, "exec script"); ModConsole.RegisterCommand("cpuapi", args => { foreach (var line in SingleInstance <Blocks.Api.CpuApi> .Instance.GetHelp()) { ModConsole.Log(line); } }, "print cpu api list"); ModConsole.RegisterCommand("sensordbg", args => { DrawSensorDebug = args.Length < 1 ? false : args[0] == "true"; }, "print sensor debug points"); CpuBlock.Create(this); // These creator functions find corresponding block in game prefabs // and replace it with inheritor ExtLogicGate.Create(this); ExtAltimeterBlock.Create(this); ExtSpeedometerBlock.Create(this); ExtAnglometerBlock.Create(this); ExtSensorBlock.Create(this); ModConsole.Log($"Logic mod Awake"); Events.OnMachineSimulationToggle += Events_OnMachineSimulationToggle; LineMaterial = new Material(Shader.Find("Hidden/Internal-Colored")); LineMaterial.hideFlags = HideFlags.HideAndDontSave; LineMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha); LineMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); LineMaterial.SetInt("_Cull", (int)UnityEngine.Rendering.CullMode.Off); LineMaterial.SetInt("_ZWrite", 0); Camera.onPostRender += DrawConnectingLines; Events.OnBlockInit += InitBlock; CpuInfoMessage = ModNetworking.CreateMessageType(new DataType[] { DataType.Block, DataType.ByteArray }); CpuLogMessage = ModNetworking.CreateMessageType(new DataType[] { DataType.Block, DataType.String }); ModNetworking.Callbacks[CpuInfoMessage] += (Action <Message>)((msg) => { Player localPlayer = Player.GetLocalPlayer(); if (msg == null || localPlayer == null || !localPlayer.IsHost) { return; } var block = msg.GetData(0) as Modding.Blocks.Block; if (!(block?.BlockScript is CpuBlock cpu)) { return; } if (block.Machine == localPlayer.Machine) { return; // don't read updates for MY machine! } cpu.AfterEdit_ServerRecv((byte[])msg.GetData(1)); }); ModNetworking.Callbacks[CpuLogMessage] += (Action <Message>)((msg) => { if (msg == null) { return; } var block = msg.GetData(0) as Modding.Blocks.Block; if (!(block?.BlockScript is CpuBlock cpu)) { return; } cpu.LogMessage((string)msg.GetData(1)); }); }