private static void SetPickupPickerControllerAspectOptions(PickupPickerController controller, PickupDef pickupDef) { List <PickupPickerController.Option> options = new List <PickupPickerController.Option>(); if (pickupDef.itemIndex != ItemIndex.None) { foreach (ItemIndex itemIndex in Catalog.aspectItemIndexes) { bool valid = !Catalog.disabledItemIndexes.Contains(itemIndex); bool available = !Run.instance.IsItemExpansionLocked(itemIndex); if (valid && available) { PickupIndex pickupIndex = PickupCatalog.FindPickupIndex(itemIndex); options.Add(new PickupPickerController.Option { available = true, pickupIndex = pickupIndex }); } } } else if (pickupDef.equipmentIndex != EquipmentIndex.None) { foreach (EquipmentIndex equipIndex in Catalog.aspectEquipIndexes) { bool available = !Run.instance.IsEquipmentExpansionLocked(equipIndex); if (available) { PickupIndex pickupIndex = PickupCatalog.FindPickupIndex(equipIndex); options.Add(new PickupPickerController.Option { available = true, pickupIndex = pickupIndex }); } } } else { options.Add(new PickupPickerController.Option { available = true, pickupIndex = pickupDef.pickupIndex }); } controller.SetOptionsServer(options.ToArray()); }
private static void MovePickerPanelToWorld(On.RoR2.PickupPickerController.orig_OnDisplayBegin orig, PickupPickerController self, NetworkUIPromptController networkUIPromptController, LocalUser localUser, CameraRigController cameraRigController) { orig(self, networkUIPromptController, localUser, cameraRigController); if (self.panelInstance && GetUICamera()) { pickerCanvas = GameObject.Instantiate(pickerCanvasPrefab); pickerCanvas.GetComponent <Canvas>().worldCamera = cachedUICam; pickerCanvas.transform.rotation = Quaternion.Euler(0, cachedUICam.transform.eulerAngles.y, 0); pickerCanvas.transform.position = pickerCanvas.transform.forward * 4; if (ModConfig.InitialRoomscaleValue) { pickerCanvas.transform.Translate(0, ModConfig.PlayerHeight.Value, 0); } RectTransform panelTransform = self.panelInstance.transform as RectTransform; panelTransform.SetParent(pickerCanvas.transform); panelTransform.localPosition = Vector3.zero; panelTransform.localRotation = Quaternion.identity; panelTransform.localScale = Vector3.one; panelTransform.offsetMin = Vector2.zero; panelTransform.offsetMax = Vector2.zero; LeTai.Asset.TranslucentImage.TranslucentImage translucentImage = self.panelInstance.gameObject.GetComponent <LeTai.Asset.TranslucentImage.TranslucentImage>(); if (translucentImage) { translucentImage.enabled = false; } } }
private void PickupPickerController_OnInteractionBegin(On.RoR2.PickupPickerController.orig_OnInteractionBegin orig, PickupPickerController self, Interactor activator) { activator.GetComponent <CharacterBody>().AddTimedBuff(BuffIndex.ArmorBoost, 1); orig(self, activator); }
private static void DestroyPickerPanelCanvas(On.RoR2.PickupPickerController.orig_OnDisplayEnd orig, PickupPickerController self, NetworkUIPromptController networkUIPromptController, LocalUser localUser, CameraRigController cameraRigController) { orig(self, networkUIPromptController, localUser, cameraRigController); if (pickerCanvas) { GameObject.Destroy(pickerCanvas); } }
private void PickupPickerController_FixedUpdateServer(On.RoR2.PickupPickerController.orig_FixedUpdateServer orig, PickupPickerController self) { CharacterMaster currentParticipantMaster = self.networkUIPromptController.currentParticipantMaster; if (currentParticipantMaster) { CharacterBody body = currentParticipantMaster.GetBody(); var interactor = (body)? body.GetComponent <Interactor>(): null; if (!body || (body.inputBank.aimOrigin - self.transform.position).sqrMagnitude > ((interactor)? Math.Pow((interactor.maxInteractionDistance + self.cutoffDistance), 2f): (self.cutoffDistance * self.cutoffDistance))) { self.networkUIPromptController.SetParticipantMaster(null); } } }
void Awake() { ppc = GetComponent <PickupPickerController>(); }
private void PickupPickerController_SubmitChoice1(On.RoR2.PickupPickerController.orig_SubmitChoice orig, PickupPickerController self, int choiceIndex) { var CommandCubes = InstanceTracker.GetInstancesList <PickupPickerController>(); CommandCubes.Remove(self); var displayToken = self.GetComponent <GenericDisplayNameProvider>().displayToken; var isModifying = Input.GetKey(ModifierKey.Value); if (isModifying && self.networkUIPromptController.currentParticipantMaster) //2nd check to prevent recursion from the forloop { string choices = ""; // Collect Cubes for (int i = 0; i < CommandCubes.Count; i++) { var cube = CommandCubes[i]; if (Vector3.Distance(self.gameObject.transform.position, cube.gameObject.transform.position) <= finalRadius) { if (cube.GetComponent <GenericDisplayNameProvider>()?.displayToken == displayToken) { var network = cube.networkUIPromptController; if (!network.currentParticipantMaster) //prevents recursion and theft { choices += $"{i},"; } } } } //Send Request if (!choices.IsNullOrWhiteSpace()) { new Networking.RadiusCommandToServer(choices, choiceIndex).Send(NetworkDestination.Server); } } orig(self, choiceIndex); }
private void PickupPickerController_SubmitChoice(On.RoR2.PickupPickerController.orig_SubmitChoice orig, PickupPickerController self, int choiceIndex) { var CommandCubes = InstanceTracker.GetInstancesList <PickupPickerController>(); CommandCubes.Remove(self); var displayToken = self.GetComponent <GenericDisplayNameProvider>().displayToken; var isModifying = Input.GetKey(ModifierKey.Value); if (isModifying) { Debug.Log("we are modifying"); if (!NetworkServer.active) { Debug.Log("We are a client!"); var i = 0; foreach (var cube in CommandCubes.ToList()) { Debug.Log("Entered foreach loop with cube # " + i); if (Vector3.Distance(self.gameObject.transform.position, cube.gameObject.transform.position) <= Radius.Value) { Debug.Log("Cube is in distance"); if (cube.GetComponent <GenericDisplayNameProvider>()?.displayToken == displayToken) { Debug.Log("The display token is valid, Writing the network options."); NetworkWriter networkWriter = cube.networkUIPromptController.BeginMessageToServer(); networkWriter.Write(0); networkWriter.Write(choiceIndex); cube.networkUIPromptController.FinishMessageToServer(networkWriter); } } //get rid of the return or it wont work in multiplayer i++; } } else { foreach (var cube in CommandCubes.ToList()) { if (Vector3.Distance(self.gameObject.transform.position, cube.gameObject.transform.position) <= Radius.Value) { if (cube.GetComponent <GenericDisplayNameProvider>()?.displayToken == displayToken) { cube.HandlePickupSelected(choiceIndex); } } } } } Debug.Log("We've exited."); orig(self, choiceIndex); }