internal static void TeleportPlayer(QuantumTeleporterController fromUnit, QuantumTeleporterController toUnit, QTTeleportTypes type) { if (_initialized) { _fromUnit = fromUnit; _toUnit = toUnit; if (!fromUnit.PowerManager.HasEnoughPower(type)) { QuickLogger.Message(QuantumTeleporterBuildable.BaseNotEnoughPower(), true); return; } if (!_toUnit.PowerManager.HasEnoughPower(type)) { QuickLogger.Message(QuantumTeleporterBuildable.ToBaseNotEnoughPower(), true); return; } InitializeTeleport(_toUnit, type); InitializeTeleport(_fromUnit, type); Player.main.playerController.SetEnabled(false); var target = _toUnit.GetTarget(); if (target != null) { _target = target; SetIsTeleporting(true); } } }
public virtual void Update() { bool inInteractionRange = InInteractionRange(); if (this.IsHovered && inInteractionRange) { #if SUBNAUTICA HandReticle.main.SetInteractTextRaw($"{QuantumTeleporterBuildable.Coordinate()}: {_mono.transform.position}", $"{QuantumTeleporterBuildable.PowerAvailable()}: {_mono.PowerManager.PowerAvailable()}"); #elif BELOWZERO HandReticle.main.SetTextRaw(HandReticle.TextType.Hand, $"{QuantumTeleporterBuildable.Coordinate()}: {_mono.transform.position}"); HandReticle.main.SetTextRaw(HandReticle.TextType.HandSubscript, $"{QuantumTeleporterBuildable.PowerAvailable()}: {_mono.PowerManager.PowerAvailable()}"); #endif } }
private string LeftPanelText() { var sb = new StringBuilder(); sb.Append($"<size=90><color=aqua><b>{QuantumTeleporterBuildable.Location()}: </b></color></size>"); sb.Append(Environment.NewLine); sb.Append($"<size=100><color=yellow>{_mono.transform.position}</color></size>"); sb.Append(Environment.NewLine); sb.Append($"<size=70><color=aqua><b>{QuantumTeleporterBuildable.GlobalTeleport()}: </b></color></size>"); sb.Append(Environment.NewLine); sb.Append($"<size=100><color=yellow>({QPatch.Configuration.GlobalTeleportPowerUsage})</color> {QuantumTeleporterBuildable.PerUnit()}</size>"); sb.Append(Environment.NewLine); sb.Append($"<size=70><color=aqua><b>{QuantumTeleporterBuildable.InternalTeleport()}: </b></color></size>"); sb.Append(Environment.NewLine); sb.Append($"<size=100><color=yellow>({QPatch.Configuration.InternalTeleportPowerUsage})</color> {QuantumTeleporterBuildable.PerUnit()}</size>"); return(sb.ToString()); }
public static void Patch() { var version = QuickLogger.GetAssemblyVersion(Assembly.GetExecutingAssembly()); QuickLogger.Info($"Started patching. Version: {version}"); #if DEBUG QuickLogger.DebugLogsEnabled = true; QuickLogger.Debug("Debug logs enabled"); #endif try { GlobalBundle = FcAssetBundlesService.PublicAPI.GetAssetBundleByName(FcAssetBundlesService.PublicAPI.GlobalBundleName); if (GlobalBundle == null) { QuickLogger.Error("Global Bundle has returned null stopping patching"); throw new FileNotFoundException("Bundle failed to load"); } Configuration = Mod.LoadConfiguration(); AddItemsToTechFabricator(); QuantumTeleporterBuildable.PatchSMLHelper(); var harmony = HarmonyInstance.Create("com.quantumteleporter.fcstudios"); harmony.PatchAll(Assembly.GetExecutingAssembly()); QuickLogger.Info("Finished patching"); } catch (Exception ex) { QuickLogger.Error(ex); } }
public void OnHandHover(GUIHand hand) { if (_mono == null) { return; } if (TeleportManager.IsTeleporting()) { return; } HandReticle main = HandReticle.main; main.SetIcon(HandReticle.IconType.Hand); #if SUBNAUTICA if (!IsDoorOpen()) { main.SetInteractText(QuantumTeleporterBuildable.OpenDoor()); } else { main.SetInteractText(QuantumTeleporterBuildable.CloseDoor()); } #elif BELOWZERO if (!IsDoorOpen()) { main.SetText(HandReticle.TextType.Hand, QuantumTeleporterBuildable.OpenDoor(), false); } else { main.SetText(HandReticle.TextType.Hand, QuantumTeleporterBuildable.CloseDoor(), false); } #endif }
public override bool FindAllComponents() { #region Canvas var canvasGameObject = gameObject.GetComponentInChildren <Canvas>()?.gameObject; if (canvasGameObject == null) { QuickLogger.Error("Canvas cannot be found"); return(false); } #endregion #region L_Panel var lPanel = canvasGameObject.FindChild("Left_Panel")?.gameObject; if (lPanel == null) { QuickLogger.Error("Unable to find L_Panel GameObject"); return(false); } #endregion #region R_Panel var rPanel = canvasGameObject.FindChild("Right_Panel")?.gameObject; if (rPanel == null) { QuickLogger.Error("Unable to find R_Panel GameObject"); return(false); } #endregion #region Home var home = canvasGameObject.FindChild("Home")?.gameObject; if (home == null) { QuickLogger.Error("Unable to find Home GameObject"); return(false); } #endregion #region confirmation var confirmation = canvasGameObject.FindChild("Confirmation")?.gameObject; if (confirmation == null) { QuickLogger.Error("Unable to find Home GameObject"); return(false); } #endregion #region ColorPicker var colorPicker = canvasGameObject.FindChild("ColorPicker")?.gameObject; if (colorPicker == null) { QuickLogger.Error("Unable to find colorPicker GameObject"); return(false); } #endregion #region Color Picker Button var colorPickerBtn = InterfaceHelpers.FindGameObject(rPanel, "ColorPickerBTN"); if (colorPickerBtn == null) { return(false); } InterfaceHelpers.CreateButton(colorPickerBtn, "ColorPageBTN", InterfaceButtonMode.Background, OnButtonClick, _startColor, _hoverColor, MaxInteractionRange); #endregion #region Color Picker Button var renameBtn = InterfaceHelpers.FindGameObject(rPanel, "RenameBTN"); if (renameBtn == null) { return(false); } InterfaceHelpers.CreateButton(renameBtn, "RenameBTN", InterfaceButtonMode.Background, OnButtonClick, _startColor, _hoverColor, MaxInteractionRange); #endregion #region Text Field _textField = InterfaceHelpers.FindGameObject(lPanel, "UnitName")?.GetComponent <Text>(); #endregion #region Grid _teleportGrid.Setup(7, QuantumTeleporterBuildable.ItemPrefab, home, _startColor, _hoverColor, OnButtonClick, 5, "PrevBTN", "NextBTN", "Grid", "Paginator", string.Empty); _teleportGrid.OnLoadDisplay += OnLoadDisplay; #endregion #region Color Grid var _colorGrid = InterfaceHelpers.FindGameObject(colorPicker, "Grid"); if (_colorGrid == null) { QuickLogger.Error <QTDisplayManager>("Cant find color page on home page"); return(false); } #endregion #region Color Paginator var _colorPaginator = InterfaceHelpers.FindGameObject(colorPicker, "Paginator"); if (_colorPaginator == null) { QuickLogger.Error <QTDisplayManager>("Cant find paginator on color picker page"); return(false); } #endregion #region ColorPage _colorPage.SetupGrid(30, QuantumTeleporterBuildable.ColorItemPrefab, _colorGrid, _colorPaginator.GetComponent <Text>(), OnButtonClick); #endregion #region Home Button var homeBtn = InterfaceHelpers.FindGameObject(colorPicker, "HomeBTN"); if (homeBtn == null) { return(false); } InterfaceHelpers.CreateButton(homeBtn, "HomeBTN", InterfaceButtonMode.Background, OnButtonClick, _startColor, _hoverColor, MaxInteractionRange); #endregion #region Prev Color Button var prevColorBtn = InterfaceHelpers.FindGameObject(colorPicker, "PrevBTN"); if (prevColorBtn == null) { return(false); } InterfaceHelpers.CreatePaginator(prevColorBtn, -1, _colorPage.ChangeColorPageBy, _startColor, _hoverColor); #endregion #region Next Color Button var nextColorBtn = InterfaceHelpers.FindGameObject(colorPicker, "NextBTN"); if (nextColorBtn == null) { return(false); } InterfaceHelpers.CreatePaginator(nextColorBtn, 1, _colorPage.ChangeColorPageBy, _startColor, _hoverColor); #endregion #region Global Toggle var isGlobalToggle = InterfaceHelpers.FindGameObject(lPanel, "Toggle"); if (isGlobalToggle == null) { return(false); } var globalToggleLabel = InterfaceHelpers.FindGameObject(isGlobalToggle, "Label"); if (globalToggleLabel == null) { return(false); } globalToggleLabel.GetComponent <Text>().text = QuantumTeleporterBuildable.MakeGlobalUnit(); _isGlobalToggle = isGlobalToggle.GetComponent <Toggle>(); _isGlobalToggle.onValueChanged.AddListener(delegate { ToggleValueChanged(_isGlobalToggle); }); #endregion #region Intra Tele Button var intraTele = InterfaceHelpers.FindGameObject(home, "Intra_TeleBtn"); if (intraTele == null) { return(false); } _intraTeleBtn = InterfaceHelpers.CreateButton(intraTele, "IntraTeleBtn", InterfaceButtonMode.Background, OnButtonClick, Color.black, Color.white, MaxInteractionRange); _intraTeleBtn.ChangeText(QuantumTeleporterBuildable.LocalNetwork()); #endregion #region GLobal Tele Button var globalTele = InterfaceHelpers.FindGameObject(home, "Global_TeleBtn"); if (globalTele == null) { return(false); } _globalTeleBtn = InterfaceHelpers.CreateButton(globalTele, "GlobalTeleBtn", InterfaceButtonMode.Background, OnButtonClick, Color.black, Color.white, MaxInteractionRange); _globalTeleBtn.ChangeText(QuantumTeleporterBuildable.GlobalNetwork()); #endregion #region Information Label var unitInfo = InterfaceHelpers.FindGameObject(lPanel, "UnitNameInfo"); if (unitInfo == null) { return(false); } var infoText = unitInfo.GetComponent <Text>(); infoText.text = LeftPanelText(); #endregion #region Yes Button var yesBTNGO = InterfaceHelpers.FindGameObject(confirmation, "YesBTN"); if (yesBTNGO == null) { return(false); } var yesBTN = InterfaceHelpers.CreateButton(yesBTNGO, "ConfirmYesBtn", InterfaceButtonMode.Background, OnButtonClick, Color.black, Color.white, MaxInteractionRange); yesBTN.ChangeText(QuantumTeleporterBuildable.Confirm()); #endregion #region No Button var noBTNGO = InterfaceHelpers.FindGameObject(confirmation, "NoBTN"); if (noBTNGO == null) { return(false); } var noBTN = InterfaceHelpers.CreateButton(noBTNGO, "ConfirmNoBtn", InterfaceButtonMode.Background, OnButtonClick, Color.black, Color.white, MaxInteractionRange); noBTN.ChangeText(QuantumTeleporterBuildable.Cancel()); #endregion #region Confirmation var confirmMessage = InterfaceHelpers.FindGameObject(confirmation, "Message"); if (confirmMessage == null) { return(false); } confirmMessage.GetComponent <Text>().text = QuantumTeleporterBuildable.ConfirmMessage(); #endregion #region Destination var destination = InterfaceHelpers.FindGameObject(confirmation, "Destination"); if (destination == null) { return(false); } _destination = destination.GetComponent <Text>(); #endregion return(true); }
private void UpdateStatus() { if (_statusField == null || _mono == null) { return; } switch (_display.SelectedTab) { case QTTabs.Global: _statusField.text = _mono.PowerManager.HasEnoughPower(QTTeleportTypes.Global) ? QuantumTeleporterBuildable.Online() : QuantumTeleporterBuildable.Offline(); break; case QTTabs.Intra: _statusField.text = _mono.PowerManager.HasEnoughPower(QTTeleportTypes.Intra) ? QuantumTeleporterBuildable.Online() : QuantumTeleporterBuildable.Offline(); break; } }
public override void Initialize() { _prefabIdentifier = GetComponent <PrefabIdentifier>().Id ?? GetComponentInParent <PrefabIdentifier>().Id; _spinTitle = Animator.StringToHash("SpinTitle"); var target = gameObject.FindChild("targetPos"); if (target == null) { QuickLogger.Error("Cant find trigger targetPos"); return; } if (_buildable == null) { _buildable = GetComponentInParent <Constructable>() ?? GetComponent <Constructable>(); } if (ColorManager == null) { ColorManager = new ColorManager(); } ColorManager.Initialize(gameObject, QuantumTeleporterBuildable.BodyMaterial); TeleportManager.Initialize(); if (NameController == null) { NameController = gameObject.EnsureComponent <NameController>(); } if (AnimationManager == null) { AnimationManager = gameObject.GetComponent <AnimationManager>(); } if (DisplayManager == null) { DisplayManager = gameObject.GetComponent <QTDisplayManager>(); } if (SubRoot == null) { SubRoot = GetComponentInParent <SubRoot>(); } if (Manager == null) { Manager = BaseManager.FindManager(SubRoot); } if (AudioManager == null) { AudioManager = new AudioManager(gameObject.GetComponent <FMOD_CustomLoopingEmitter>()); } AudioManager.LoadFModAssets("/env/use_teleporter_use_loop", "use_teleporter_use_loop"); if (PowerManager == null) { PowerManager = new QTPowerManager(this); } //var pingInstance = gameObject.GetComponent<PingInstance>() ?? // gameObject.GetComponentInChildren<PingInstance>(); //if (QTPingManager == null) // QTPingManager = new QTPingManager(); //QTPingManager.Initialize(pingInstance); DisplayManager.Setup(this); NameController.Initialize(QuantumTeleporterBuildable.Submit(), Mod.FriendlyName); NameController.SetCurrentName(GetNewName(), DisplayManager.GetNameTextBox()); NameController.OnLabelChanged += OnLabelChanged; Manager.OnBaseUnitsChanged += OnBaseUnitsChanged; AddToManager(); AnimationManager.SetBoolHash(_spinTitle, true); if (QTDoorManager == null) { QTDoorManager = gameObject.FindChild("model").FindChild("anims").FindChild("door").AddComponent <QTDoorManager>(); } QTDoorManager.Initalize(this); var trigger = target.AddComponent <QTTriggerBoxManager>(); trigger.OnPlayerExit += QTDoorManager.OnPlayerExit; _target = target.transform; IsInitialized = true; }