Example #1
0
    private void Select(ISelectable selected)
    {
        if (this.selected != selected)
        {
            Deselect();
        }
        //TODO: move this nonsense ---------------------
        if (selected is ResourceInteractable)
        {
            ResourceInteractable resource = selected as ResourceInteractable;
            resource.OnCancelled += DeselectResource;
            resource.OnCompleted += DeselectResource;
        }
        else if (selected is TowerInteractable)
        {
            TowerInteractable tower = selected as TowerInteractable;
            HexGrid.Instance.displayHexTiles.ShowTiles(tower.GetComponent <Tower>().TilesInRange);
        }
        else if (selected is Enemy)
        {
            (selected as Enemy).OnDeath += DeselectEnemy;
        }
        //-------------------------------

        this.selected = selected;
        selectionEffect.SetColor(selected.SelectionColor);
        SetChildrenLayer(selectedLayer);
        selectionEffect.enabled = true;
    }
Example #2
0
 public void HarvestingState(BaseInteractable aHarvestingResource)
 {
     if (aHarvestingResource is ResourceInteractable)
     {
         ResourceInteractable resource = (ResourceInteractable)aHarvestingResource;
         runningRoutine = HarvestingRoutine(resource);
         StartCoroutine(runningRoutine);
     }
     else
     {
         ChangeState(PlayerState.NORMAL, Vector3.zero);
     }
 }
Example #3
0
    public void NormalState()
    {
        Vector2 input = new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"));

        _rigidBody.velocity        = input * m_fMovementSpeed;
        _rigidBody.angularVelocity = 0;
        if (input.magnitude > 0)
        {
            float radianToDegrees = Mathf.Atan2(-input.x, input.y) * 180 / Mathf.PI;
            float xAngle          = Mathf.Atan2(0, input.x) * 180 / Mathf.PI;

            rotation = Quaternion.AngleAxis(radianToDegrees, Vector3.forward);

            float      tempRadian = Mathf.Atan2(input.x, -input.y) * 180 / Mathf.PI;
            Quaternion temp       = Quaternion.AngleAxis(tempRadian, Vector3.forward);
            arrowObject.transform.rotation = temp;
            this.transform.rotation        = Quaternion.AngleAxis(xAngle, Vector3.up);
            _animator.SetBool("Moving", true);
        }
        else
        {
            _animator.SetBool("Moving", false);
        }
        if (Input.GetKeyDown(KeyCode.E))
        {
            Ray          ray   = new Ray(this.transform.position, rotation * Vector3.up);
            RaycastHit2D hit2d = Physics2D.Raycast(ray.origin, ray.direction, raycastRange, 1 << 8);

            Debug.DrawRay(ray.origin, ray.direction * 50, Color.red, 100);
            if (hit2d)
            {
                BaseInteractable interactable;
                if ((interactable = hit2d.transform.gameObject.GetComponent <BaseInteractable>()))
                {
                    if (interactable is ResourceInteractable)
                    {
                        ResourceInteractable resource = (interactable as ResourceInteractable);
                        if (resource.ToolRequired)
                        {
                            if (mInventory.GetCurrentItem() != null)
                            {
                                if (mInventory.GetCurrentItem().ItemType == ItemType.TOOL && mInventory.GetCurrentItem().ToolType == resource.toolTypeRequired)
                                {
                                    ChangeState(PlayerState.HARVESTING, Vector3.zero, interactable);
                                }
                            }
                        }
                        else
                        {
                            ChangeState(PlayerState.HARVESTING, Vector3.zero, interactable);
                        }
                    }
                    else if (interactable is CraftableInteractable)
                    {
                        if (mInventory.GetCurrentItem())
                        {
                            CraftableInteractable craftable = (interactable as CraftableInteractable);
                            craftable.Interact(mInventory.GetCurrentItem());

                            Item craftedItem = null;
                            if (craftable.isCompleted(out craftedItem))
                            {
                                if (craftable.itemScriptableObject)
                                {
                                    if (mInventory.ContainsItem(craftable.itemScriptableObject))
                                    {
                                        for (int i = 0; i < mInventory.m_Items.Count; i++)
                                        {
                                            if (mInventory.m_Items[i].ItemType == ItemType.TOOL && mInventory.m_Items[i].ToolType == craftedItem.ToolType)
                                            {
                                                mInventory.m_Items[i].IncreaseQuantity(1);
                                            }
                                        }
                                    }
                                    else
                                    {
                                        //Create a new item
                                        craftedItem.IncreaseQuantity(1);
                                        mInventory.AddNewItem(craftedItem);
                                    }
                                }
                                mResources.DepleteResource(PlayerResoureType.STAMINA);
                                if (craftable.DestroyOnceComplete)
                                {
                                    Destroy(craftable.gameObject);
                                }
                            }
                        }
                    }
                    else if (interactable is PlayerResourceInteractable)
                    {
                        PlayerResourceInteractable playerResource = (interactable as PlayerResourceInteractable);
                        if (playerResource.waitForCraftable)
                        {
                            if (playerResource.isReady())
                            {
                                ChangeState(PlayerState.REPLENISHING, hit2d.point, playerResource);
                            }
                        }
                        else
                        {
                            ChangeState(PlayerState.REPLENISHING, hit2d.point, playerResource);
                        }
                    }
                    else
                    {
                        interactable.Interact();
                    }
                    //else if (interactable is CraftableInteractable)
                    //{
                    //    //TODO
                    //}
                }
            }
        }

        for (int i = 0; i < mInventory.m_Items.Count; i++)
        {
            KeyCode potentialKeyPress = (KeyCode)Enum.Parse(typeof(KeyCode), string.Format("Alpha{0}", i + 1));
            if (Input.GetKeyDown(potentialKeyPress))
            {
                mInventory.SetItemIdx(i);
            }
        }
    }
Example #4
0
    private IEnumerator HarvestingRoutine(BaseInteractable aHarvestingResource)
    {
        float timer = 0;

        this._rigidBody.velocity = Vector3.zero;
        Debug.Log("HarvestingRoutine");
        ResourceInteractable resource = (ResourceInteractable)aHarvestingResource;
        float       harvestingTime    = resource.HarvestingTime;
        ProgressBar bar = UIManager.Instance.GetProgressBar(resource.gameObject);

        while (timer <= harvestingTime)
        {
            bar.SetProgress(timer / harvestingTime);
            timer += Time.deltaTime;
            yield return(null);
        }
        Destroy(bar.gameObject);
        if (mInventory.ContainsItem(resource.itemScriptableObject))
        {
            for (int i = 0; i < mInventory.m_Items.Count; i++)
            {
                if (mInventory.m_Items[i].ItemType == ItemType.RESOURCE && mInventory.m_Items[i].ResourceType == resource.ResourceType)
                {
                    mInventory.m_Items[i].IncreaseQuantity(resource.Interact(mInventory.GetCurrentItem()));
                }
            }
        }
        else
        {
            //Create a new item
            Item newItem = Instantiate(resource.itemScriptableObject);
            newItem.IncreaseQuantity(resource.Interact(mInventory.GetCurrentItem()));
            mInventory.AddNewItem(newItem);
        }

        if (resource.secondaryHarvest)
        {
            if (mInventory.ContainsItem(resource.secondaryHarvestItem))
            {
                for (int i = 0; i < mInventory.m_Items.Count; i++)
                {
                    if (mInventory.m_Items[i].ItemType == ItemType.RESOURCE && mInventory.m_Items[i].ResourceType == resource.SecondaryResourceType)
                    {
                        mInventory.m_Items[i].IncreaseQuantity(resource.Interact(mInventory.GetCurrentItem()));
                    }
                }
            }
            else
            {
                //Create a new item
                Item newItem = Instantiate(resource.secondaryHarvestItem);
                newItem.IncreaseQuantity(resource.Interact(mInventory.GetCurrentItem()));
                mInventory.AddNewItem(newItem);
            }
        }

        resource.ItemHarvested();
        if (resource.limitedResource)
        {
            if (resource.DepletedResource)
            {
                Destroy(resource.gameObject);
            }
        }
        mResources.DepleteResource(PlayerResoureType.STAMINA, true);
        //Do the harvesting things

        ChangeState(PlayerState.NORMAL, Vector3.zero);
        yield return(null);
    }