Exemple #1
0
        private void RebuildItemGrid(int focused)
        {
            bool ItemFound = false;

            for (int y = 0; y < ItemGridDimensions.y; y++)
            {
                for (int x = 0; x < ItemGridDimensions.x; x++)
                {
                    // Find the item and mesh
                    int  i    = x + y * (int)ItemGridDimensions.x;
                    Item Item = Inventory.Drive.GetItemAt(x + y * (int)ItemGridDimensions.x);
                    if (Item != null && (!ItemGridContainedItems.ContainsKey(i) || ItemGridContainedItems[i] != Item))
                    {
                        // Clear cell
                        for (int j = 0; j < ItemGridCells[i].childCount; j++)
                        {
                            DestroyImmediate(ItemGridCells[i].GetChild(j).gameObject);
                        }

                        // Add new item
                        GameObject ItemObject = PrefabDB.Create(Item.ModelID, ItemGridCells[i]);
                        MeshUtil.SetMaterial(ItemObject, ItemGridHologramMaterial);
                        ItemGridContainedItems[i] = Item;
                    }
                    else if (Item == null && ItemGridContainedItems.ContainsKey(i))
                    {
                        for (int j = 0; j < ItemGridCells[i].childCount; j++)
                        {
                            Destroy(ItemGridCells[i].GetChild(j).gameObject);
                        }
                        ItemGridContainedItems.Remove(i);
                    }

                    // Set the base scale and spin status
                    float Scale    = 0.13f;
                    bool  Spinning = false;

                    if (focused == i || ItemGridSelectedIndex == i)
                    {
                        // Item is selected or hovered, animate
                        Scale    = 0.16f;
                        Spinning = true;
                    }

                    if (ItemGridSelectedIndex == i)
                    {
                        // Set preview information
                        if (ItemGridCells[i].childCount > 0)
                        {
                            SetPreviewItem(Item);
                        }
                        TextTextureProperties NameProps        = ItemNameText.TextProperties;
                        TextTextureProperties DescriptionProps = ItemDescriptionText.TextProperties;
                        if (Item != null)
                        {
                            NameProps.Text        = Item.Name;
                            DescriptionProps.Text = Item.Description;
                            ItemFound             = true;
                        }
                        else
                        {
                            NameProps.Text        = "";
                            DescriptionProps.Text = "";
                        }
                        ItemNameText.SetTextProperties(NameProps);
                        ItemDescriptionText.SetTextProperties(DescriptionProps);

                        // Move selector
                        if ((ItemGridSelector.position - ItemGridCells[i].position).magnitude < 0.01f)
                        {
                            ItemGridSelector.position = ItemGridCells[i].position;
                        }
                        else
                        {
                            ItemGridSelector.position =
                                Vector3.Lerp(ItemGridSelector.position,
                                             ItemGridCells[i].position, 10f * Time.deltaTime);
                        }
                        Vector3 NewRot = ItemGridSelector.localEulerAngles;
                        NewRot.z = 0;
                        ItemGridSelector.localEulerAngles = NewRot;
                    }

                    if (!Spinning)
                    {
                        // Not selected, reset rotation
                        if (ItemGridCells[i].childCount > 0)
                        {
                            Transform ItemTransform = ItemGridCells[i].GetChild(0);
                            ItemTransform.LookAt(Camera.transform);
                            Vector3 NewRot = ItemTransform.localEulerAngles;
                            NewRot.z  = 0;
                            NewRot.y += 90;
                            ItemTransform.localEulerAngles = NewRot;
                        }
                    }

                    // Update spinning status and scaling
                    ItemGridCells[i].GetComponent <Spinner>().Spinning = Spinning;
                    if (ItemGridCells[i].childCount > 0)
                    {
                        FixMeshScaling(ItemGridCells[i].GetChild(0), Scale);
                    }
                }
            }

            // Hide the selector if nothing is selected
            ItemGridSelector.gameObject.SetActive(ItemGridSelectedIndex >= 0);

            // Clean up the preview screen if there was no item
            if (!ItemFound)
            {
                SetPreviewItem(null);
                TextTextureProperties NameProps        = ItemNameText.TextProperties;
                TextTextureProperties DescriptionProps = ItemDescriptionText.TextProperties;
                NameProps.Text        = "";
                DescriptionProps.Text = "";
                ItemNameText.SetTextProperties(NameProps);
                ItemDescriptionText.SetTextProperties(DescriptionProps);
                PreviewVisibility = Mathf.Lerp(PreviewVisibility, 0f, 10f * Time.deltaTime);
            }
            else
            {
                PreviewVisibility = Mathf.Lerp(PreviewVisibility, 1f, 10f * Time.deltaTime);
            }
        }
Exemple #2
0
        private void Update()
        {
            if (Term.IsVisible())
            {
                return;
            }

            if (Input.GetButtonDown("Inventory"))
            {
                InventoryOpen    = !InventoryOpen;
                Hologram.Visible = InventoryOpen;
                CursorHandler.RequestLockState(!InventoryOpen);
            }

            int        CurrentIndex = -1;
            RaycastHit LookedAt     = CameraUtil.GetLookedAtHit(Camera, 1f, true);

            if (LookedAt.collider != null)
            {
                MeshRenderer Mesh = LookedAt.collider.GetComponent <MeshRenderer>();
                if (ItemGridCells.Contains(LookedAt.collider.transform))
                {
                    // Interacting with the item list
                    CurrentIndex = int.Parse(LookedAt.collider.name.Split(' ')[1]);
                    if (GrabbedItem == null)
                    {
                        // Nothing is currently being dragged, continue as normal
                        if (Input.GetButton("Activate") &&
                            (Input.GetAxis("Mouse X") != 0 || Input.GetAxis("Mouse Y") != 0) &&
                            ItemGridSelectedIndex == CurrentIndex)
                        {
                            // This item has been selected for at least a frame,
                            // and the mouse is moving, this counts as dragging
                            GrabbedItem      = LookedAt.collider.transform;
                            GrabbedItemIndex = CurrentIndex;
                        }
                        if (Input.GetButtonDown("Activate") || Input.GetButtonDown("Equip"))
                        {
                            // Select things
                            ItemGridSelectedIndex = CurrentIndex;
                        }
                        if (Input.GetButtonDown("Equip"))
                        {
                            // Equip things
                            Item SelectedItem = Inventory.Drive.GetItemAt(ItemGridSelectedIndex);
                            if (SelectedItem != null)
                            {
                                Item Equipped = Inventory.Drive.GetSlot(SelectedItem.Slot);
                                if (Equipped != null && Equipped.ID == SelectedItem.ID)
                                {
                                    Inventory.Drive.UnequipSlot(SelectedItem.Slot);
                                    Client.Send(PktType.InventoryAction, Inventory.ActionHandler.BuildClearSlot(SelectedItem.Slot));
                                }
                                else
                                {
                                    Inventory.Drive.EquipItem(ItemGridSelectedIndex);
                                    Client.Send(PktType.InventoryAction, Inventory.ActionHandler.BuildEquipItem(ItemGridSelectedIndex));
                                }
                            }
                        }
                    }
                    else
                    {
                        // Something is grabbed, make things react to this
                        ItemGridSelectedIndex = CurrentIndex;
                        if (Input.GetButtonUp("Activate"))
                        {
                            // Grab was released, drop item here
                            if (GrabbedItemIndex == CurrentIndex)
                            {
                                // The item was dropped in place, reset the position
                                if (ItemGridCells[GrabbedItemIndex].childCount > 0)
                                {
                                    ItemGridCells[GrabbedItemIndex].GetChild(0).localPosition = new Vector3();
                                }
                            }
                            else
                            {
                                // Lerp things (if the models are set)
                                Vector3 ReturnToPos = ItemGridCells[GrabbedItemIndex].position;
                                ItemGridCells[GrabbedItemIndex].position = ItemGridCells[CurrentIndex].position;
                                Lerper.LerpTransformPosition(ItemGridCells[GrabbedItemIndex], ReturnToPos, 20f);

                                // Switch items
                                Inventory.Drive.SwitchSlots(GrabbedItemIndex, CurrentIndex);
                                Client.Send(PktType.InventoryAction, Inventory.ActionHandler.BuildSlotSwitch(GrabbedItemIndex, CurrentIndex));
                            }

                            // Reset grabbing
                            GrabbedItem      = null;
                            GrabbedItemIndex = -1;
                        }
                        else
                        {
                            if (ItemGridCells[GrabbedItemIndex].childCount > 0)
                            {
                                ItemGridCells[GrabbedItemIndex].GetChild(0).position = LookedAt.point;
                            }
                        }
                    }
                }
                else if (Mesh != null)
                {
                    float  InvBrightness = 1.1f;
                    float  StsBrightness = 1f;
                    float  SclBrightness = 1f;
                    float  MapBrightness = 1f;
                    string SelectedIcon  = "";

                    if (Mesh == IconInventory)
                    {
                        InvBrightness = 1.2f;
                        SelectedIcon  = "Storage";
                    }
                    else if (Mesh == IconStatus)
                    {
                        StsBrightness = 1.2f;
                        SelectedIcon  = "Status";
                    }
                    else if (Mesh == IconSocial)
                    {
                        SclBrightness = 1.2f;
                        SelectedIcon  = "Social";
                    }
                    else if (Mesh == IconMap)
                    {
                        MapBrightness = 1.2f;
                        SelectedIcon  = "Map";
                    }

                    TextTextureProperties Props = IconExplainerText.TextProperties;
                    Props.Text = SelectedIcon;
                    IconExplainerText.SetTextProperties(Props);


                    IconInventory.material.SetColor("_EmissionColor", new Color(IconInventoryColor.r * InvBrightness,
                                                                                IconInventoryColor.g * InvBrightness, IconInventoryColor.b * InvBrightness));
                    IconStatus.material.SetColor("_EmissionColor", new Color(IconStatusColor.r * StsBrightness,
                                                                             IconStatusColor.g * StsBrightness, IconStatusColor.b * StsBrightness));
                    IconSocial.material.SetColor("_EmissionColor", new Color(IconSocialColor.r * SclBrightness,
                                                                             IconSocialColor.g * SclBrightness, IconSocialColor.b * SclBrightness));
                    IconMap.material.SetColor("_EmissionColor", new Color(IconMapColor.r * MapBrightness,
                                                                          IconMapColor.g * MapBrightness, IconMapColor.b * MapBrightness));
                }
            }
            else
            {
                // Outside of the inventory, clicking will unselect
                if (Input.GetButtonDown("Activate"))
                {
                    ItemGridSelectedIndex = -1;
                }
            }
            RebuildItemGrid(CurrentIndex);
        }