예제 #1
0
        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());
        }
예제 #2
0
        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;
                }
            }
        }
예제 #3
0
 private void PickupPickerController_OnInteractionBegin(On.RoR2.PickupPickerController.orig_OnInteractionBegin orig, PickupPickerController self, Interactor activator)
 {
     activator.GetComponent <CharacterBody>().AddTimedBuff(BuffIndex.ArmorBoost, 1);
     orig(self, activator);
 }
예제 #4
0
 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);
     }
 }
예제 #5
0
        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);
                }
            }
        }
예제 #6
0
 void Awake()
 {
     ppc = GetComponent <PickupPickerController>();
 }
예제 #7
0
        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);
        }
예제 #8
0
        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);
        }