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);
        }
Exemple #2
0
        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
            });
        }
Exemple #3
0
        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();
        }
Exemple #6
0
        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");
        }
Exemple #7
0
        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);
        }
Exemple #9
0
        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();
        }
Exemple #12
0
 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();
        }
Exemple #15
0
 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();
     }
 }
Exemple #16
0
        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;
                    }
                }
            }
        }
Exemple #18
0
        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;
    }