public void OnUse()
        {
            switch (CurrentState)
            {
            case State.SelectCar:
                if (PointedCar != null)
                {
                    SelectedCar = PointedCar;
                    PointedCar  = null;

                    HighlightCar(SelectedCar, skinningMaterial);
                    CommsRadioController.PlayAudioFromRadio(SelectedCarSound, transform);
                    SetState(State.SelectSkin);
                }
                break;

            case State.SelectSkin:
                if ((PointedCar != null) && (PointedCar == SelectedCar))
                {
                    // clicked on the selected car again, this means confirm
                    ApplySelectedSkin();
                    CommsRadioController.PlayAudioFromRadio(ConfirmSound, transform);
                }
                else
                {
                    // clicked off the selected car, this means cancel
                    CommsRadioController.PlayAudioFromRadio(CancelSound, transform);
                }

                ResetState();
                break;
            }
        }
示例#2
0
        private void SetState(State newState)
        {
            if (state == newState)
            {
                return;
            }
            state = newState;
            switch (state)
            {
            case State.EnterSpawnMode:
                SetStartingDisplay();
                lcdArrow.TurnOff();
                ButtonBehaviour = ButtonBehaviourType.Regular;
                break;

            case State.PickCar:
                if (trackUpdateCoro == null)
                {
                    trackUpdateCoro = StartCoroutine(PotentialTracksUpdateCoro());
                }
                ButtonBehaviour = ButtonBehaviourType.Override;
                CommsRadioController.PlayAudioFromRadio(spawnModeEnterSound, transform);
                break;

            case State.PickDestination:
                ButtonBehaviour = ButtonBehaviourType.Override;
                break;
            }
        }
示例#3
0
 private void PointToCar(TrainCar?car)
 {
     if (PointedCar != car)
     {
         if ((car != null) && CarTypes.IsLocomotive(car.carType))
         {
             PointedCar = car;
             HighlightCar(PointedCar, selectionMaterial !);
             CommsRadioController.PlayAudioFromRadio(HoverCarSound, transform);
         }
         else
         {
             PointedCar = null;
             ClearHighlightedCar();
         }
     }
 }
 private void PointToCar(TrainCar car)
 {
     if (PointedCar != car)
     {
         if (car != null)
         {
             PointedCar = car;
             HighlightCar(PointedCar, selectionMaterial);
             CommsRadioController.PlayAudioFromRadio(HoverCarSound, transform);
         }
         else
         {
             PointedCar = null;
             ClearHighlightedCar();
         }
     }
 }
示例#5
0
        static void Postfix(CommsRadioController __instance, ref List <ICommsRadioMode> ___allModes, ref CommsRadioCarSpawner ___carSpawnerControl)
        {
            if (!Main.Enabled)
            {
                return;
            }

            try
            {
                if (Main.CustomCarManagerInstance.CustomCarsToSpawn.Count <= 0)
                {
                    return;
                }

                //Add our spawner to the comms radio
                var ccm = Main.CommsRadioCustomCarManager = __instance.gameObject.AddComponent <CommsRadioCustomCarManager>();

                //We need to get info from car spawner because we don't have these naturally.
                ccm.display                      = ___carSpawnerControl.display;
                ccm.validMaterial                = ___carSpawnerControl.validMaterial;
                ccm.invalidMaterial              = ___carSpawnerControl.invalidMaterial;
                ccm.lcdArrow                     = ___carSpawnerControl.lcdArrow;
                ccm.spawnModeEnterSound          = ___carSpawnerControl.spawnModeEnterSound;
                ccm.spawnVehicleSound            = ___carSpawnerControl.spawnVehicleSound;
                ccm.confirmSound                 = ___carSpawnerControl.confirmSound;
                ccm.cancelSound                  = ___carSpawnerControl.cancelSound;
                ccm.destinationHighlighterGO     = ___carSpawnerControl.destinationHighlighterGO;
                ccm.directionArrowsHighlighterGO = ___carSpawnerControl.directionArrowsHighlighterGO;

                //setup script after we add references.
                ccm.Setup();

                //Add our custom mode to comms radio
                ___allModes.Add(Main.CommsRadioCustomCarManager);
            }
            catch (Exception e)
            {
                Main.ModEntry.Logger.Error(e.ToString());
            }
        }
示例#6
0
        private static void AddCommsRouteManager()
        {
            if (commsRadioController == null)
            {
                commsRadioController = Resources.FindObjectsOfTypeAll <CommsRadioController>().FirstOrDefault();
                if (commsRadioController == null)
                {
                    Module.mod.Logger.Log("commsRadioController empty");
                    return;
                }
            }

            try
            {
                var modes = Traverse.Create(commsRadioController).Field("allModes").GetValue <List <ICommsRadioMode> >();

                if (modes != null && modes.Count > 0)
                {
                    GameObject objToSpawn = new GameObject("CommsRouteManager");
                    objToSpawn.AddComponent <CommsRouteManager>();

                    CommsRouteManager radioMode = objToSpawn.GetComponent <CommsRouteManager>();
                    radioMode.display           = Traverse.Create(modes[0]).Field("display").GetValue <CommsRadioDisplay>();
                    objToSpawn.transform.parent = (modes[0] as MonoBehaviour).gameObject.transform;
                    objToSpawn.SetActive(true);
                    modes.Add(radioMode);
                    commsRouteManager = radioMode;
                    Module.mod.Logger.Log("Comm radio mode added");
                }
                else
                {
                    Module.mod.Logger.Log($"No commsradio modes found");
                }
            }
            catch (Exception e)
            {
                Module.mod.Logger.Log("Error in mod CommsRadioController registration: " + e.Message);
            }
        }
示例#7
0
 public static void CommsRadioController_UpdateSpawnModesAvailability_Patch(CommsRadioController __instance)
 {
     __instance.disabledModeIndices.Clear();
 }
示例#8
0
 static void Postfix(CommsRadioController __instance)
 {
     commsRadioController = __instance;
     Module.mod.Logger.Log("commsRadioController set");
     AddCommsRouteManager();
 }
 static void Postfix(CommsRadioController __instance, List <ICommsRadioMode> ___allModes)
 {
     CommsRadioSkinSwitcher.Controller = __instance;
     skinSwitcher = __instance.gameObject.AddComponent <CommsRadioSkinSwitcher>();
     ___allModes.Add(skinSwitcher);
 }
示例#10
0
        public void OnUse()
        {
            switch (state)
            {
            case State.EnterSpawnMode:
                SetCarToSpawn(Main.CustomCarManagerInstance.CustomCarsToSpawn[selectedCarTypeIndex]);
                SetState(State.PickCar);
                break;

            case State.PickCar:
                if (carPrefabToSpawn == null)
                {
                    Debug.LogError("carPrefabToSpawn is null! Something is wrong, can't spawn this car.",
                                   this);
                    ClearFlags();
                    break;
                }

                if (canSpawnAtPoint)
                {
                    SetState(State.PickDestination);
                    CommsRadioController.PlayAudioFromRadio(confirmSound, transform);
                    break;
                }

                ClearFlags();
                CommsRadioController.PlayAudioFromRadio(cancelSound, transform);
                break;

            case State.PickDestination:
                if (canSpawnAtPoint)
                {
                    var forward = closestPointOnDestinationTrack.Value.forward;
                    if (!spawnWithTrackDirection)
                    {
                        forward = -forward;
                    }
                    var trainCar = CarSpawner.SpawnCar(carPrefabToSpawn, destinationTrack,
                                                       (Vector3)closestPointOnDestinationTrack.Value.position + WorldMover.currentMove,
                                                       forward, true);
                    if (trainCar != null)
                    {
                        SingletonBehaviour <UnusedTrainCarDeleter> .Instance.MarkForDelete(trainCar);

                        CommsRadioController.PlayAudioFromCar(spawnVehicleSound, trainCar);
                        CommsRadioController.PlayAudioFromRadio(confirmSound, transform);
                        canSpawnAtPoint = false;
                        Main.CustomCarManagerInstance.CustomCarsToSpawn[selectedCarTypeIndex].Spawn(trainCar);
                        break;
                    }

                    Debug.LogError("Couldn't spawn car!", carPrefabToSpawn);
                    ClearFlags();
                    break;
                }

                ClearFlags();
                CommsRadioController.PlayAudioFromRadio(cancelSound, transform);
                break;
            }
        }