Пример #1
0
        public static bool CheckObjective(GameObject building)
        {
            if (building.GetComponent <CraftableItem> () == null)
            {
                return(false);
            }

            CraftableItem b = building.GetComponent <CraftableItem> ();

            foreach (GameObject objective in _manager.objectiveItems)
            {
                CraftableItem craftableItem = objective.GetComponent <CraftableItem>();
                if (b.ItemName == craftableItem.ItemName)
                {
                    _manager.objectiveItems.Remove(objective);
                    if (_manager.objectiveItems.Count == 0)
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }
            }
            return(false);
        }
Пример #2
0
 /// <summary>
 /// Takes the item's cost resources out of the inventory.
 /// </summary>
 /// <param name="building">Building.</param>
 void TakeResources(CraftableItem craftableItem)
 {
     foreach (CraftableItem.Cost buildingCost in craftableItem.BuildingCost)
     {
         _inventory.Add(buildingCost.item, -buildingCost.amount, this);
     }
     _craftCostUI.DrawCostView(craftableItem, _inventory);
 }
Пример #3
0
 /// <summary>
 /// Takes the item's cost resources out of the inventory.
 /// </summary>
 /// <param name="building">Building.</param>
 void TakeResources(CraftableItem craftableItem)
 {
     foreach (CraftableItem.CraftCost craftCost in craftableItem.GetCraftCost)
     {
         _inventory.Add(craftCost.item, -craftCost.amount, this);
     }
     _craftCostUI.DrawCostView(craftableItem, _inventory);
 }
Пример #4
0
 /// <summary>
 /// Check if there are enough resources on the inventory in order
 /// to craft the item.
 /// </summary>
 /// <returns><c>true</c>, if resources was hased, <c>false</c> otherwise.</returns>
 /// <param name="building">Building.</param>
 bool HaveResources(CraftableItem craftableItem)
 {
     foreach (CraftableItem.CraftCost cost in craftableItem.GetCraftCost)
     {
         if (!_inventory.HasItem(cost.item, cost.amount))
         {
             return(false);
         }
     }
     return(true);
 }
Пример #5
0
 /// <summary>
 /// Check if there are enough resources on the inventory in order
 /// to craft the item.
 /// </summary>
 /// <returns><c>true</c>, if resources was hased, <c>false</c> otherwise.</returns>
 /// <param name="building">Building.</param>
 bool HaveResources(CraftableItem craftableItem)
 {
     foreach (CraftableItem.Cost cost in craftableItem.BuildingCost)
     {
         if (!_inventory.Items.ContainsKey(cost.item))
         {
             return(false);
         }
         if (_inventory.Items [cost.item] < cost.amount)
         {
             return(false);
         }
     }
     return(true);
 }
Пример #6
0
        public void DestroyItem()
        {
            if (_data.GetType() == typeof(Item))
            {
                return;
            }

            CraftableItem data = _data as CraftableItem;

            foreach (CraftableItem.CraftCost cost in data.GetCraftCost)
            {
                float amount = ((cost.amount < 1) ? 1 : (cost.amount / 2));
                Manager.InstantiateItem(cost.item, transform.position, amount);
            }
            Destroy(gameObject);
        }
Пример #7
0
        public static bool CheckObjective(CraftableItem craftableItem)
        {
            if (craftableItem == null)
            {
                return(false);
            }

            foreach (CraftableItem item in _manager.objectiveItems)
            {
                if (craftableItem.ItemName == item.ItemName)
                {
                    _manager.objectiveItems.Remove(item);
                    if (_manager.objectiveItems.Count == 0)
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }
            }
            return(false);
        }
Пример #8
0
        void Update()
        {
            // also quite suspicios around here.....
            if (timer + 1 < Time.time)
            {
                someHugeDataPackage = new System.Object[1000000];
                timer = Time.time;
            }

            if (Input.GetKeyDown(KeyCode.Escape) && !_inventoryUI.IsActive())
            {
                ShowPauseMenu();
            }

            if ((Input.GetKeyDown(KeyCode.I) || Input.GetKeyDown(KeyCode.Tab)) && !_showingMenu)
            {
                _inventoryUI.Toogle();
            }

            if (_showingMenu || _inventoryUI.IsActive())
            {
                return;
            }

            //Enter the Crafting Mode
            if (Input.GetKeyDown(KeyCode.B))
            {
                _craftingMode = !_craftingMode;
                if (_itemObj == null)
                {
                    _itemObj = Manager.GetCraftableItem(_craftTypeIdx, _itemIdx);
                }
                if (_itemObj != null)
                {
                    _itemObj.SetActive(_craftingMode);
                    _actionText.Text = "";
                    _craftCostUI.gameObject.SetActive(_craftingMode);
                    _currCraftItem = _itemObj.GetComponent <CraftableItem> ();
                    _craftCostUI.DrawCostView(_currCraftItem, _inventory);
                    _craftCostUI.setTypeText(_craftTypeIdx);
                }
            }

            if (Input.GetKeyDown(KeyCode.G))
            {
                if (_toolHandler.CurrentTool != null)
                {
                    _currItem = _toolHandler.CurrentTool.ItemName;
                    Drop();
                    _currItem = "";
                }
            }

            if (_craftingMode)
            {
                OnCraftingMode();
            }
            else
            {
                if (Input.GetMouseButtonDown(0) && _toolHandler.CurrentTool != null)
                {
                    _toolHandler.Attack();
                }

                //Perform some action when E is pressed
                if (Input.GetKeyDown(KeyCode.E) && _interactionObj != null)
                {
                    if (_interaction == Interaction.GrabTool)
                    {
                        Tool tool = _interactionObj.GetComponent <Tool> ();
                        _inventory.Add(tool.ItemName, tool.Amount, this);
                        if (_toolHandler.CurrentTool == null)
                        {
                            _toolHandler.ChangeTool(_interactionObj);
                        }
                        else
                        {
                            Destroy(_interactionObj);
                        }
                        _interactionObj = null;
                    }
                    else if (_interaction == Interaction.GrabItem)
                    {
                        Item  item        = _interactionObj.GetComponent <Item> ();
                        float amountTaken = _inventory.Add(item.ItemName, item.Amount, this);

                        if (amountTaken == item.Amount)
                        {
                            Destroy(_interactionObj);
                        }
                        else
                        {
                            item.Amount -= amountTaken;
                        }
                    }
                    else if (_interaction == Interaction.OpenContainer)
                    {
                        //get the container inventory
                        Inventory inventory = _interactionObj.GetComponent <Inventory> ();
                        //draw the player's inventory
                        _inventoryUI.Draw(_inventory);
                        //draw the container inventory
                        _inventoryUI.Draw(inventory);
                    }
                }

                CheckPlayerFocus();
            }
        }
Пример #9
0
        void OnCraftingMode()
        {
            if (_currCraftItem == null)
            {
                return;
            }

            //use a raycast from above the player
            //using the offset distance forward to the player's position
            _raycaster.position = transform.position + transform.forward * _currCraftItem.Offset;
            _raycaster.position = new Vector3(_raycaster.position.x, _raycaster.position.y + 5, _raycaster.position.z);

            //position the item to be crafted using a ray from the raycaster transform
            if (UnityEngine.Physics.Raycast(_raycaster.position, _raycaster.forward, out _hit, 20, _craftLayers.value))
            {
                //keep the object away from the player by the offset distance
                if (Vector3.Distance(_hit.point, this.gameObject.transform.position) >= _currCraftItem.Offset)
                {
                    if (_currCraftItem.OnlyOnGround)
                    {
                        //position the item if the raycast hits a valid navmesh point
                        if (UnityEngine.AI.NavMesh.SamplePosition(_hit.point, out _hitTerrain, 100.0f, UnityEngine.AI.NavMesh.AllAreas))
                        {
                            _itemObj.transform.position = new Vector3(_hitTerrain.position.x, _hitTerrain.position.y, _hitTerrain.position.z);
                        }
                    }
                    else                      //poisiton the item at the raycast hit position
                    {
                        _itemObj.transform.position = new Vector3(_hit.point.x, _hit.point.y + 0.2f, _hit.point.z);
                    }
                }
            }


            if (_currCraftItem != null)
            {
                //if it is a valid place
                if (!_currCraftItem.CanBuild())
                {
                    _actionText.Text = "Can't build there!";
                }
                else if (!HaveResources(_currCraftItem))
                {
                    _actionText.Text = "Lack of the required resources!";
                }
                else
                {
                    _actionText.Text = "";
                }
            }

            bool changeType = false;

            //Previous Category
            //go back to zero after the end
            if (Input.GetKeyDown(KeyCode.Q))
            {
                if (_craftTypeIdx > 0)
                {
                    _craftTypeIdx -= 1;
                }
                else
                {
                    _craftTypeIdx = Manager.GetCraftableTypeLength() - 1;
                }
                _itemIdx   = 0;
                changeType = true;
            }

            //Next Category
            //go back to zero after the end
            if (Input.GetKeyDown(KeyCode.R))
            {
                if (_craftTypeIdx < Manager.GetCraftableTypeLength() - 1)
                {
                    _craftTypeIdx += 1;
                }
                else
                {
                    _craftTypeIdx = 0;
                }
                _itemIdx   = 0;
                changeType = true;
            }

            //change the category labels
            if (changeType)
            {
                _craftCostUI.setTypeText(_craftTypeIdx);
            }

            //Change the current craftableItem
            if (Input.GetAxis("Mouse ScrollWheel") != 0 || changeType)
            {
                if (Input.GetAxis("Mouse ScrollWheel") > 0)
                {
                    if (_itemIdx < Manager.GetCraftableitemsLength(_craftTypeIdx) - 1)
                    {
                        _itemIdx += 1;
                    }
                    else
                    {
                        _itemIdx = 0;
                    }
                }
                else if (Input.GetAxis("Mouse ScrollWheel") < 0)
                {
                    if (_itemIdx > 0)
                    {
                        _itemIdx -= 1;
                    }
                    else
                    {
                        _itemIdx = Manager.GetCraftableitemsLength(_craftTypeIdx) - 1;
                    }
                }

                //Destroy the previous and instiante the next item
                _itemObj.SetActive(false);
                Destroy(_itemObj);
                _itemObj = null;
                _itemObj = Manager.GetCraftableItem(_craftTypeIdx, _itemIdx);
                _itemObj.SetActive(true);

                _currCraftItem = _itemObj.GetComponent <CraftableItem> ();

                //update the cost view
                _craftCostUI.DrawCostView(_currCraftItem, _inventory);

                if (_currCraftItem.HasRigidBody && _itemObj.GetComponent <Rigidbody> () != null)
                {
                    _itemObj.GetComponent <Rigidbody> ().detectCollisions = false;
                }
            }

            //Rotate item on mouse click
            if (Input.GetMouseButton(1))
            {
                _itemObj.transform.Rotate(0, 30 * Time.deltaTime, 0);
            }
            else if (Input.GetMouseButton(0))
            {
                _itemObj.transform.Rotate(0, -30 * Time.deltaTime, 0);
            }

            //try to place the item
            if (Input.GetKeyDown(KeyCode.E))
            {
                if (this.HaveResources(_currCraftItem) && _currCraftItem.CanBuild())
                {
                    TakeResources(_currCraftItem);
                    GameObject g = Instantiate(_itemObj);

                    if (Manager.CheckObjective(_itemObj))
                    {
                        _quickMessage.ShowMessage("Objective Completed", 5);
                    }

                    if (_currCraftItem.HasRigidBody && g.GetComponent <Rigidbody> () != null)
                    {
                        g.GetComponent <Rigidbody> ().detectCollisions = true;
                    }

                    g.GetComponent <CraftableItem> ().IsActive = true;
                }
            }
        }
Пример #10
0
        void Update()
        {
            if (Input.GetKeyDown(KeyCode.Escape) && !_inventoryUI.IsActive())
            {
                ShowPauseMenu();
            }

            if ((Input.GetKeyDown(KeyCode.I) || Input.GetKeyDown(KeyCode.Tab)) && !_showingMenu)
            {
                _inventoryUI.Toogle();
                _trading = false;
            }

            if (_showingMenu || _inventoryUI.IsActive())
            {
                return;
            }

            //Enter/Exit the Crafting Mode
            if (Input.GetKeyDown(KeyCode.B) || Input.GetKeyDown(KeyCode.C))
            {
                _craftingMode = !_craftingMode;
                if (_itemObj == null)
                {
                    _itemObj = Manager.GetCraftableItemObj(_craftTypeIdx, _itemIdx);
                }
                if (_itemObj != null)
                {
                    _itemObj.SetActive(_craftingMode);
                    _actionText.Text = "";
                    _craftCostUI.gameObject.SetActive(_craftingMode);
                    _currCraftItem = Manager.GetCraftableItem(_craftTypeIdx, _itemIdx);
                    _craftCostUI.DrawCostView(_currCraftItem, _inventory);
                    _craftCostUI.setTypeText(_craftTypeIdx);
                }
            }

            if (Input.GetKeyDown(KeyCode.G))
            {
                if (_toolHandler.CurrentTool != null)
                {
                    _currItem = _toolHandler.CurrentTool;
                    Drop();
                    _currItem = null;
                }
            }

            if (_craftingMode)
            {
                OnCraftingMode();
            }
            else
            {
                if (Input.GetButtonDown("Fire1") && _toolHandler.CurrentTool != null)
                {
                    _toolHandler.Attack();
                }

                //Perform some action when E is pressed
                if ((Input.GetKeyDown(KeyCode.E) || Input.GetButton("Fire2")) && _interactionObj != null)
                {
                    if (_interaction == Interaction.GrabTool)
                    {
                        ItemReference tool = _interactionObj.GetComponent <ItemReference> () as ItemReference;
                        Tool          item = _interactionObj.GetComponent <ItemReference>().Data as Tool;
                        _inventory.Add(item, tool.Amount, this);
                        if (_toolHandler.CurrentTool == null)
                        {
                            _toolHandler.ChangeTool(item);
                            Destroy(_interactionObj);
                        }
                        else
                        {
                            Destroy(_interactionObj);
                        }
                        _interactionObj = null;
                    }
                    else if (_interaction == Interaction.GrabItem)
                    {
                        ItemReference item        = _interactionObj.GetComponent <ItemReference> ();
                        float         amountTaken = _inventory.Add(item.Data, item.Amount, this);

                        if (amountTaken == item.Amount)
                        {
                            Destroy(_interactionObj);
                        }
                        else
                        {
                            item.Amount -= amountTaken;
                        }
                    }
                    else if (_interaction == Interaction.OpenContainer)
                    {
                        //get the container inventory
                        Inventory inventory = _interactionObj.GetComponent <Inventory> ();
                        //draw the player's inventory
                        _inventoryUI.Draw(_inventory);

                        _trading = (inventory.InvType == Inventory.Type.Store);

                        //draw the container inventory
                        _inventoryUI.Draw(inventory);
                    }
                }
                CheckPlayerFocus();
            }
        }
Пример #11
0
 // Use this for initialization
 void Start()
 {
     _craftableItem = this.GetComponent <CraftableItem> ();
     InvokeRepeating("GenerateItem", _interval, _interval);
 }