protected override void Handle(TransportLineSyncCommand command) { TransportTool tool = ToolSimulator.GetTool <TransportTool>(command.SenderId); IgnoreHelper.StartIgnore(); if (command.UpdateLines) { TransportManager.instance.UpdateLinesNow(); } if (command.UpdatePaths) { ushort tempLine = ReflectionHelper.GetAttr <ushort>(tool, "m_tempLine"); TransportManager.instance.m_lines.m_buffer[(int)tempLine].UpdatePaths(tempLine); } IgnoreHelper.EndIgnore(); ReflectionHelper.SetAttr(tool, "m_hitPosition", command.HitPosition); ReflectionHelper.SetAttr(tool, "m_fixedPlatform", command.FixedPlatform); ReflectionHelper.SetAttr(tool, "m_hoverStopIndex", command.HoverStopIndex); ReflectionHelper.SetAttr(tool, "m_hoverSegmentIndex", command.HoverSegmentIndex); ReflectionHelper.SetAttr(tool, "m_mode", command.Mode); ReflectionHelper.SetAttr(tool, "m_errors", command.Errors); }
public static void Postfix(object __instance, ref bool __state) { if (IgnoreHelper.IsIgnored("NewLine")) { return; } if (!__state) { return; } IgnoreHelper.EndIgnore("NewLine"); ArrayHandler.StopCollecting(); TransportTool tool = ReflectionHelper.GetAttr <TransportTool>(__instance, "$this"); ushort prefab = (ushort)Mathf.Clamp(tool.m_prefab.m_prefabDataIndex, 0, 65535); int building = tool.m_building; Command.SendToAll(new TransportLineCreateCommand() { Array16Ids = ArrayHandler.Collected16, Prefab = prefab, Building = building }); }
public static void Prefix(object __instance, ref bool __state) { if (IgnoreHelper.IsIgnored()) { return; } TransportTool tool = ReflectionHelper.GetAttr <TransportTool>(__instance, "$this"); int counter = ReflectionHelper.GetAttr <int>(__instance, "$PC"); int mode = ReflectionHelper.GetAttr <int>(tool, "m_mode"); int expectedMode = ReflectionHelper.GetEnumValue(typeof(TransportTool).GetNestedType("Mode", ReflectionHelper.AllAccessFlags), "NewLine"); ToolBase.ToolErrors m_errors = ReflectionHelper.GetAttr <ToolBase.ToolErrors>(tool, "m_errors"); ushort m_lastEditLine = ReflectionHelper.GetAttr <ushort>(tool, "m_lastEditLine"); int m_hoverStopIndex = ReflectionHelper.GetAttr <int>(tool, "m_hoverStopIndex"); int m_building = ReflectionHelper.GetAttr <int>(tool, "m_building"); if (counter != 0 || m_errors != ToolBase.ToolErrors.None || mode != expectedMode || m_lastEditLine == 0 || m_hoverStopIndex == -1 || (m_building != 0 && m_hoverStopIndex == 0)) { __state = false; return; } __state = true; ArrayHandler.StartCollecting(); IgnoreHelper.StartIgnore("RemoveStop"); }
public void Awake() { #region Automation Hooks MethodInfo onEnable = typeof(TransportToolOverrides).GetMethod("OnEnable", allFlags); MethodInfo onDisable = typeof(TransportToolOverrides).GetMethod("OnDisable", allFlags); MethodInfo AfterEveryAction = typeof(TransportToolOverrides).GetMethod("AfterEveryAction", allFlags); MethodInfo AfterEveryActionZeroable = typeof(TransportToolOverrides).GetMethod("AfterEveryActionZeroable", allFlags); LogUtils.DoLog($"Loading TransportToolOverrides Hook"); try { var tt = new TransportTool(); RedirectorInstance.AddRedirect(typeof(TransportTool).GetMethod("OnEnable", allFlags), null, onEnable); RedirectorInstance.AddRedirect(typeof(TransportTool).GetMethod("OnDisable", allFlags), onDisable); RedirectorInstance.AddRedirect(typeof(TransportTool).GetMethod("NewLine", allFlags).Invoke(tt, new object[0]).GetType().GetMethod("MoveNext", RedirectorUtils.allFlags), AfterEveryAction); RedirectorInstance.AddRedirect(typeof(TransportTool).GetMethod("AddStop", allFlags).Invoke(tt, new object[0]).GetType().GetMethod("MoveNext", RedirectorUtils.allFlags), AfterEveryAction); RedirectorInstance.AddRedirect(typeof(TransportTool).GetMethod("RemoveStop", allFlags).Invoke(tt, new object[0]).GetType().GetMethod("MoveNext", RedirectorUtils.allFlags), AfterEveryActionZeroable); RedirectorInstance.AddRedirect(typeof(TransportTool).GetMethod("CancelPrevStop", allFlags).Invoke(tt, new object[0]).GetType().GetMethod("MoveNext", RedirectorUtils.allFlags), AfterEveryActionZeroable); RedirectorInstance.AddRedirect(typeof(TransportTool).GetMethod("CancelMoveStop", allFlags).Invoke(tt, new object[0]).GetType().GetMethod("MoveNext", RedirectorUtils.allFlags), AfterEveryActionZeroable); RedirectorInstance.AddRedirect(typeof(TransportTool).GetMethod("MoveStop", allFlags).Invoke(tt, new object[] { false }).GetType().GetMethod("MoveNext", RedirectorUtils.allFlags), AfterEveryAction); Destroy(tt); } catch (Exception e) { LogUtils.DoErrorLog("ERRO AO CARREGAR HOOKS: {0}\n{1}", e.Message, e.StackTrace); } #endregion }
protected override void Handle(TransportLineCreateCommand command) { TransportTool tool = ToolSimulator.GetTool <TransportTool>(command.SenderId); ArrayHandler.StartApplying(command.Array16Ids, null); tool.m_prefab = PrefabCollection <TransportInfo> .GetPrefab(command.Prefab); ReflectionHelper.SetAttr(tool, "m_building", command.Building); IgnoreHelper.StartIgnore(); int mode = ReflectionHelper.GetEnumValue(typeof(TransportTool).GetNestedType("Mode", ReflectionHelper.AllAccessFlags), "NewLine"); ReflectionHelper.SetAttr(tool, "m_mode", mode); ReflectionHelper.SetAttr(tool, "m_errors", ToolBase.ToolErrors.None); IEnumerator newLine = (IEnumerator)ReflectionHelper.Call(tool, "NewLine"); newLine.MoveNext(); IgnoreHelper.EndIgnore(); ArrayHandler.StopApplying(); }
public static void Prefix(object __instance, ref bool __state) { if (IgnoreHelper.IsIgnored()) { return; } TransportTool tool = ReflectionHelper.GetAttr <TransportTool>(__instance, "$this"); int counter = ReflectionHelper.GetAttr <int>(__instance, "$PC"); int mode = ReflectionHelper.GetAttr <int>(tool, "m_mode"); int expectedMode = ReflectionHelper.GetEnumValue( typeof(TransportTool).GetNestedType("Mode", ReflectionHelper.AllAccessFlags), "MoveStops"); if (counter != 0 || mode != expectedMode) { __state = false; return; } __state = true; ArrayHandler.StartCollecting(); IgnoreHelper.StartIgnore("CancelMoveStop"); }
public static void Initialize(ToolController toolController) { if (sm_initialized) { return; } Debug.Log("Traffic++: Initializing Transport Tool.\n"); TransportTool originalTransportTool = toolController.GetComponent <TransportTool>(); CustomTransportTool customTransportTool = toolController.gameObject.AddComponent <CustomTransportTool>(); // contributed by Japa FieldInfo toolControllerField = typeof(ToolController).GetField("m_tools", BindingFlags.Instance | BindingFlags.NonPublic); if (toolControllerField != null) { toolControllerField.SetValue(toolController, toolController.GetComponents <ToolBase>()); } FieldInfo toolModifierDictionary = typeof(ToolsModifierControl).GetField("m_Tools", BindingFlags.Static | BindingFlags.NonPublic); if (toolModifierDictionary != null) { toolModifierDictionary.SetValue(null, null); } sm_initialized = true; Debug.Log("Traffic++: Transport Tool initialized.\n"); }
protected override void Handle(TransportLineInitCommand command) { TransportTool tool = ToolSimulator.GetTool <TransportTool>(command.SenderId); ReflectionHelper.SetAttr(tool, "m_errors", ToolBase.ToolErrors.Pending); ReflectionHelper.SetAttr(tool, "m_lastMoveIndex", -2); ReflectionHelper.SetAttr(tool, "m_lastAddIndex", -2); }
public static void SelectPrefab(PrefabInfo prefab) { BuildingInfo buildingInfo = prefab as BuildingInfo; NetInfo netInfo = prefab as NetInfo; TransportInfo transportInfo = prefab as TransportInfo; TreeInfo treeInfo = prefab as TreeInfo; PropInfo propInfo = prefab as PropInfo; if (buildingInfo != null) { BuildingTool buildingTool = ToolsModifierControl.SetTool <BuildingTool>(); if (buildingTool != null) { buildingTool.m_prefab = buildingInfo; buildingTool.m_relocate = 0; } } if (netInfo != null) { NetTool netTool = ToolsModifierControl.SetTool <NetTool>(); if (netTool != null) { netTool.Prefab = netInfo; } } if (transportInfo != null) { TransportTool transportTool = ToolsModifierControl.SetTool <TransportTool>(); if (transportTool != null) { transportTool.m_prefab = transportInfo; transportTool.m_building = 0; } } if (treeInfo != null) { TreeTool treeTool = ToolsModifierControl.SetTool <TreeTool>(); if (treeTool != null) { treeTool.m_prefab = treeInfo; treeTool.m_mode = TreeTool.Mode.Single; } } if (propInfo != null) { PropTool propTool = ToolsModifierControl.SetTool <PropTool>(); if (propTool != null) { propTool.m_prefab = propInfo; propTool.m_mode = PropTool.Mode.Single; } } }
protected override void Handle(TransportLineResetCommand command) { TransportTool tool = ToolSimulator.GetTool <TransportTool>(command.SenderId); ArrayHandler.StartApplying(command.Array16Ids, null); IgnoreHelper.StartIgnore(); ReflectionHelper.Call(tool, "ResetTool"); IgnoreHelper.EndIgnore(); ArrayHandler.StopApplying(); }
protected override void Handle(TransportLineTempCommand command) { TransportTool tool = ToolSimulator.GetTool <TransportTool>(command.SenderId); ArrayHandler.StartApplying(command.Array16Ids, null); TransportInfo info = PrefabCollection <TransportInfo> .GetPrefab(command.InfoIndex); IgnoreHelper.StartIgnore(); ReflectionHelper.Call(tool, "EnsureTempLine", info, command.SourceLine, command.MoveIndex, command.AddIndex, command.AddPos, command.FixedPlatform); IgnoreHelper.EndIgnore(); ArrayHandler.StopApplying(); }
private static void SimulationStepPos(ref TransportTool __instance) { if (lastState.m_lineCurrent > 0 && lastLength != Singleton <TransportManager> .instance.m_lines.m_buffer[lastState.m_lineCurrent].m_totalLength) { if (frameCountRedraw < 5 || HasInputFocus) { frameCountRedraw++; } else { frameCountRedraw = 0; lastLength = Singleton <TransportManager> .instance.m_lines.m_buffer[lastState.m_lineCurrent].m_totalLength; TLMController.instance.LinearMapCreatingLine.redrawLine(); } } }
private static void OnToolGUIPos(ref TransportTool __instance, ref Event e) { if (e.type == EventType.MouseUp && !isInsideUI) { TLMUtils.doLog("OnToolGUIPostTransportTool"); ToolStatus currentState = new ToolStatus(); TLMUtils.doLog("__state => {0} | tt_mode=> {1} | tt_lineCurrent => {2}", currentState, tt_mode, tt_lineCurrent); currentState.m_mode = (Mode)tt_mode.GetValue(__instance); currentState.m_lineCurrent = (ushort)tt_lineCurrent.GetValue(__instance); currentState.m_lineTemp = (ushort)tt_lineTemp.GetValue(__instance); TLMUtils.doLog("__state = {0} => {1}, newMode = {2}", lastState, currentState, currentState.m_mode); lastState = currentState; redrawMap(currentState); frameCountRedraw = 99; resetLength(); } }
protected override void Handle(TransportLineStartEditBuildingCommand command) { TransportTool tool = ToolSimulator.GetTool <TransportTool>(command.SenderId); TransportInfo info = PrefabCollection <TransportInfo> .GetPrefab(command.Prefab); ArrayHandler.StartApplying(command.Array16Ids, null); IgnoreHelper.StartIgnore(); IEnumerator cancelPrevStop = (IEnumerator)ReflectionHelper.Call(tool, "StartEditingBuildingLine", info, command.Building); cancelPrevStop.MoveNext(); IgnoreHelper.EndIgnore(); ArrayHandler.StopApplying(); }
private static void OnToolGUIPos(ref TransportTool __instance, ref Event e) { if (e.type == EventType.MouseUp && !isInsideUI) { TLMUtils.doLog("OnToolGUIPostTransportTool"); ToolStatus currentState = new ToolStatus(); TLMUtils.doLog("__state => {0} | tt_mode=> {1} | tt_lineCurrent => {2}", currentState, tt_mode, tt_lineCurrent); currentState.m_mode = (Mode)tt_mode.GetValue(__instance); currentState.m_lineCurrent = (ushort)tt_lineCurrent.GetValue(__instance); currentState.m_lineTemp = (ushort)tt_lineTemp.GetValue(__instance); TLMUtils.doLog("__state = {0} | {1}, newMode = {2}", lastState.m_mode, lastState.m_lineCurrent, currentState.m_mode); redrawMap(currentState); lastState = currentState; resetLength(); } if (TLMController.instance.LineCreationToolbox.isVisible()) { TLMController.instance.LineCreationToolbox.eachFrame(); } }
protected override void Handle(TransportLineMoveStopCommand command) { TransportTool tool = ToolSimulator.GetTool <TransportTool>(command.SenderId); ArrayHandler.StartApplying(command.Array16Ids, null); IgnoreHelper.StartIgnore(); int mode = ReflectionHelper.GetEnumValue(typeof(TransportTool).GetNestedType("Mode", ReflectionHelper.AllAccessFlags), "MoveStops"); ReflectionHelper.SetAttr(tool, "m_mode", mode); ReflectionHelper.SetAttr(tool, "m_errors", ToolBase.ToolErrors.None); IEnumerator moveStop = (IEnumerator)ReflectionHelper.Call(tool, "MoveStop", command.ApplyChanges); moveStop.MoveNext(); IgnoreHelper.EndIgnore(); ArrayHandler.StopApplying(); }
void Update() { if (!m_initialized) { TryReplacePrefabs(); return; } // contributed by Japa if (CustomTransportTool.sm_initialized && Singleton <LoadingManager> .instance.m_loadingComplete) { TransportTool transportTool = ToolsModifierControl.GetCurrentTool <TransportTool>(); if (transportTool != null) { CustomTransportTool customTransportTool = ToolsModifierControl.SetTool <CustomTransportTool>(); if (customTransportTool != null) { customTransportTool.m_prefab = transportTool.m_prefab; } } } }
protected override void Handle(TransportLineCancelMoveStopCommand command) { TransportTool tool = ToolSimulator.GetTool <TransportTool>(command.SenderId); tool.m_prefab = PrefabCollection <TransportInfo> .GetPrefab(command.Prefab); ArrayHandler.StartApplying(command.Array16Ids, null); IgnoreHelper.StartIgnore(); int mode = ReflectionHelper.GetEnumValue(typeof(TransportTool).GetNestedType("Mode", ReflectionHelper.AllAccessFlags), "MoveStops"); ReflectionHelper.SetAttr(tool, "m_mode", mode); IEnumerator cancelMoveStop = (IEnumerator)ReflectionHelper.Call(tool, "CancelMoveStop"); cancelMoveStop.MoveNext(); IgnoreHelper.EndIgnore(); ArrayHandler.StopApplying(); }
protected override void OnButtonClicked(UIComponent comp) { object objectUserData = comp.objectUserData; BuildingInfo buildingInfo = objectUserData as BuildingInfo; NetInfo netInfo = objectUserData as NetInfo; TransportInfo transportInfo = objectUserData as TransportInfo; if ((UnityEngine.Object)buildingInfo != (UnityEngine.Object)null) { BuildingTool buildingTool = ToolsModifierControl.SetTool <BuildingTool>(); if ((UnityEngine.Object)buildingTool != (UnityEngine.Object)null) { if ((UnityEngine.Object) this.roadsOptionPanel != (UnityEngine.Object)null) { this.roadsOptionPanel.isVisible = false; } if ((UnityEngine.Object) this.tunnelsOptionPanel != (UnityEngine.Object)null) { this.tunnelsOptionPanel.isVisible = false; } if ((UnityEngine.Object) this.tracksOptionPanel != (UnityEngine.Object)null) { this.tracksOptionPanel.isVisible = false; } buildingTool.m_prefab = buildingInfo; buildingTool.m_relocate = 0; } } if ((UnityEngine.Object)transportInfo != (UnityEngine.Object)null) { TransportTool transportTool = ToolsModifierControl.SetTool <TransportTool>(); if ((UnityEngine.Object)transportTool != (UnityEngine.Object)null) { if ((UnityEngine.Object) this.roadsOptionPanel != (UnityEngine.Object)null) { this.roadsOptionPanel.isVisible = false; } if ((UnityEngine.Object) this.tunnelsOptionPanel != (UnityEngine.Object)null) { this.tunnelsOptionPanel.isVisible = false; } if ((UnityEngine.Object) this.tracksOptionPanel != (UnityEngine.Object)null) { this.tracksOptionPanel.isVisible = false; } transportTool.m_prefab = transportInfo; } } if (!((UnityEngine.Object)netInfo != (UnityEngine.Object)null)) { return; } NetToolFine netTool = ToolsModifierControl.SetTool <NetToolFine>(); if (!((UnityEngine.Object)netTool != (UnityEngine.Object)null)) { return; } ItemClass.SubService subService = netInfo.GetSubService(); if (subService == ItemClass.SubService.PublicTransportMetro && (UnityEngine.Object) this.tunnelsOptionPanel != (UnityEngine.Object)null) { this.tunnelsOptionPanel.isVisible = true; } else if (subService == ItemClass.SubService.PublicTransportTrain && (UnityEngine.Object) this.tracksOptionPanel != (UnityEngine.Object)null) { this.tracksOptionPanel.isVisible = true; } else if ((UnityEngine.Object) this.roadsOptionPanel != (UnityEngine.Object)null) { this.roadsOptionPanel.isVisible = true; } netTool.m_prefab = netInfo; }