示例#1
0
 public void UseItemFromSlot(int index)
 {
     if (interactable == null)
     {
         return;
     }
     if (index + 1 > inventorySlots.Count)
     {
         return;
     }
     if (inventorySlots[index].item == null || interactable.GetComponent <ZodiacStatue>().itemRequired == null)
     {
         return;
     }
     if (inventorySlots[index].item.itemName == interactable.GetComponent <ZodiacStatue>().itemRequired.itemName)
     {
         Debug.Log(inventorySlots[index].item.itemName + " " + interactable.GetComponent <ZodiacStatue>().itemRequired.itemName);
         interactable.Activate(this.gameObject);
     }
     else if (inventorySlots[index].item.itemName != interactable.GetComponent <ZodiacStatue>().itemRequired.itemName)
     {
         Debug.Log(inventorySlots[index].item.itemName + " " + interactable.GetComponent <ZodiacStatue>().itemRequired.itemName);
         //interactable.Deactivate(this.gameObject);
     }
 }
    void ActivateObject()
    {
        if (grabbedObject != null && grabbedObject.parameters.activationType == ActivationType.Handheld)
        {
            //grabbedObject.Activate();
            switch (grabbedObject.parameters.objectName)
            {
            case "Bat":
                anim.SetTrigger("SwingTrigger");
                break;

            default:
                grabbedObject.Activate();
                break;
            }
        }
        else
        {
            //Collider[] objectsActivate = Physics.OverlapSphere(self.position + self.forward * checkCircleDistance, checkCircleRadius);
            //if (objectsActivate.Length > 0)
            //{
            //	List<Interactable> activableObjects = FilteredObjects(objectsActivate, Filter.Activate);
            //	if (activableObjects.Count > 0)
            //	{
            //		GetNearestInFront(activableObjects).Activate();
            //	}
            //}
            if (canInteract != null && canInteract.GetComponent <Interactable>().parameters.activationType == ActivationType.Proximity)
            {
                canInteract.Activate();
            }
        }
    }
示例#3
0
    void Interact()
    {
        // Handle attempts to interact, ie actively pressing key to interact with, any game objects.
        // This does not handle "automatic" interactions that require no player input ie proximity based prompts/states
        GameObject interactableGameObj = null;

        if (Input.anyKey)
        {
            RaycastHit hit;
            // Physics raycast
            if (Physics.Raycast(camera.transform.position, camera.transform.forward, out hit, MaxInteractDistance))
            {
                if (hit.transform.gameObject.CompareTag("Interactable") || hit.transform.gameObject.CompareTag("Tower"))
                {
                    // Objects can't have more than one tag... :-/
                    // Internal workaround?
                    interactableGameObj = hit.transform.gameObject;
                }
            }

            // UI/canvas raycast
            GameObject hitGameObj;
            if (shopMenuRaycastUtil.IsPlayerFacingUIElem(out hitGameObj))
            {
                interactableGameObj = hitGameObj;
            }
        }

        if (interactableGameObj != null)
        {
            Interactable interactable = GetInteractable(interactableGameObj);
            interactable.Activate();
        }
    }
    // Update is called once per frame
    void Update()
    {
        DrawLightSaber();

        CheckIfRayCastHit();

        if (OVRInput.Get(OVRInput.Button.PrimaryIndexTrigger))
        {
            pressed = true;
        }
        else
        {
            pressed = false;
            cando   = true;
        }

        if (pressed && cando)
        {
            // Interactables
            if (currentSelection)
            {
                currentSelection.Activate();
                ChangeLineCol(Color.red);
                cando = false;
            }

            //UI buttons
            if (currentBtn)
            {
                currentBtn.onClick.Invoke();
                ChangeLineCol(Color.red);
                cando = false;
            }
        }
    }
 public int Interact(Vector2Int offset)
 {
     if (interactable && offset.magnitude > 0)
     {
         return(interactable.Activate(this, offset));
     }
     return(0);
 }
示例#6
0
 // Activate specified controller
 private void ActivateController(Interactable controller)
 {
     // Set to active
     controller.Activate();
     // Add to active list
     activeControllers.Add(controller);
     // Update active status if need be
     CheckActiveStatus();
 }
示例#7
0
    IEnumerator WaitForInteractionElementCoroutine(Interactable interactable, GameObject outlineObject, Canvas menuObject)
    {
        outlineObject.SetActive(true);
        interactable.Activate();
        menuObject.enabled = true;
        yield return(new WaitUntil(() => interactable.Grabbed));

        outlineObject.SetActive(false);
        yield return(new WaitUntil(() => interactable.Triggered));

        interactable.Deactivate();
        _waitForInteraction = false;
        yield return(null);
    }
示例#8
0
    private void Update()
    {
        if (!parent.initialized)
        {
            return;
        }

        if (Input.GetKeyDown(KeyCode.Space))
        {
            parent.Activate();

            Destroy(this);
        }
    }
示例#9
0
    void Use()
    {
        RaycastHit hit;

        if (Physics.Raycast(transform.position, transform.forward, out hit, InteractRange))
        {
            try
            {
                Interactable I = hit.collider.transform.gameObject.GetComponent <Interactable>();

                if (I != null)
                {
                    I.Activate();
                }
            }
            catch (NullReferenceException) {}
        }
    }
示例#10
0
    void Use()
    {
        int        layerMask = LayerMask.GetMask("Interact");
        RaycastHit hit;

        if (Physics.Raycast(transform.position, transform.forward, out hit, layerMask))
        {
            try
            {
                Interactable I = hit.collider.transform.gameObject.GetComponent <Interactable>();

                if (I != null)
                {
                    I.Activate();
                }
            }
            catch {}
        }
    }
示例#11
0
    //Called when there is an update to one of the listed interactables
    public void Activation_UseItem()
    {
        //Check each interactable in our list to see if they are all 'correct'
        foreach (IItemUsable interactableNeeded in interactablesNeeded)
        {
            if (!interactableNeeded.IsCorrect())
            {
                hasActivated = false;
                break;
            }
            else
            {
                hasActivated = true;
            }
        }

        //Send an update to the interactable that we want to enable/disable
        interactableToActivate.Activate(hasActivated);
    }
示例#12
0
    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Escape))
        {
            Application.Quit();
        }

        if (isWalking)
        {
            Debug.Log(Vector3.Distance(new Vector3(transform.position.x, 0, transform.position.z), new Vector3(agent.destination.x, 0, agent.destination.z)));
            if (Vector3.Distance(new Vector3(transform.position.x, 0, transform.position.z), new Vector3(agent.destination.x, 0, agent.destination.z)) <= closeEnoughDist)
            {
                agent.SetDestination(transform.position);
                isWalking = false;
                anim.SetBool("IsWalking", false);
                ThingToActivateUponArival.Activate();
                anim.SetTrigger("Interact");
            }
        }
    }
示例#13
0
    void Interact()
    {
        //Checking for any nearby interactables
        Collider2D col2 = Physics2D.OverlapCircle(transform.position, interactRadius, interactableLayer);

        if (col2 != null) //If one is found
        {
            Interactable interactable = col2.gameObject.GetComponent <Interactable>();

            if (!camFol.IsFollowing()) //Stop the camera and focus it on the interactable
            {
                SetFocus(interactable);
                camFol.ChangeFollow();
            }

            if (interactable.IsFocus())
            {
                interactText.gameObject.SetActive(true); //Turn on press E text

                if (control.useItem)                     //If E is pressed
                {
                    interactable.Activate();             //Activate the interactable
                }
            }

            else
            {
                interactText.gameObject.SetActive(false);
            }
        }
        else //If there is no interactable nearby anymore
        {
            if (camFol.IsFollowing()) //Resume camera movement
            {
                camFol.ChangeFollow();
                RemoveFocus();
            }
        }
    }
示例#14
0
    void Use(char Filter)
    {
        LayerMask  Ignore = ~LayerMask.GetMask("Waypoint");
        RaycastHit hit;

        if (Physics.Raycast(transform.position, transform.forward, out hit, InteractRange, Ignore))
        {
            try
            {
                Interactable I = hit.collider.transform.root.gameObject.GetComponent <Interactable>();

                if (I == null)
                {
                    I = hit.collider.transform.gameObject.GetComponent <Interactable>();
                }

                if (I == null)
                {
                    I = hit.collider.transform.parent.gameObject.GetComponent <Interactable>();
                }

                if (I != null)
                {
                    if (Filter == 'M')
                    {
                        lastM = I;
                    }
                    else
                    {
                        lastF = I;
                    }

                    I.Activate(Filter);
                }
            }
            catch {}
        }
    }
示例#15
0
    public void Activate()
    {
        RaycastHit hitInfo;

        if (Physics.Raycast(cam.transform.position, cam.transform.forward, out hitInfo, interactionRange, Interactable))
        {
            Interactable heldItem = cam.transform.GetComponentInChildren <Interactable>();
            Interactable Obj      = hitInfo.transform.GetComponent <Interactable>();

            Debug.Log(hitInfo.transform.name);

            if (heldItem == null)
            {
                if (Obj != null)
                {
                    Obj.Activate();
                }
            }
            else
            {
                heldItem.Deactivate();
            }
        }
    }
示例#16
0
 public void interact()
 {
     currentInteractableSelected.Activate();
 }
示例#17
0
 public void Simulate(List <Vector2> positions)
 {
     Peripheral.Instance.ChangeTime(TimeScale.Normal);
     my_interactable.Activate(Skill);
     my_interactable.Simulate(positions);
 }
示例#18
0
 void DropF()
 {
     lastF.Activate('F');
     fPermission = false;
     lastF       = null;
 }
    // Update is called once per frame
    void Update()
    {
        Vector3 origin    = this.transform.position;
        Vector3 direction = this.transform.forward * rayLength;

        if (Input.GetKeyDown(KeyCode.T))
        {
            if (mobileActive)
            {
                mobileActive = !mobileActive;
                mobile.SetActive(false);
            }
            else
            {
                mobileActive = !mobileActive;
                mobile.SetActive(true);
            }
        }

        // Draw the Raycast and puts colliding object in vision variable
        Debug.DrawRay(origin, direction);
        if (Physics.Raycast(origin, direction, out vision, rayLength))
        {
            // If object has Interactable tag continue
            if (vision.collider.tag.Equals("Interactable") && FindObjectOfType <PlayerController>().PlayerControlsEnabled())
            {
                // Check if object is Interactable
                bool succes = vision.collider.gameObject.TryGetComponent <Interactable>(out Interactable newSelection);

                image.color = crosshairSelectColor;
                // If object has Interactable component, continue,
                // else Log in error
                if (succes)
                {
                    // If object is newly selected, perform select function
                    if (!currentSelection)
                    {
                        currentSelection = newSelection;
                        currentSelection.Select();
                    }
                    else if (!newSelection.Equals(currentSelection))
                    {
                        currentSelection.Deselect();
                        currentSelection = newSelection;
                        currentSelection.Select();
                    }
                }
                else
                {
                    Debug.LogError(vision.collider.name + " has an Interactable tag, but does not contain an Interactable component");
                    currentSelection = null;
                    image.color      = crosshairDefaultColor;
                }
            }
            else
            {
                // If no interactable object is collided with, but there is an object selected,
                // deselect the object.
                if (currentSelection)
                {
                    currentSelection.Deselect();
                    currentSelection = null;
                    image.color      = crosshairDefaultColor;
                }
            }
        }
        // if no object is collided with, deselect the current selection if it exists
        else if (currentSelection)
        {
            currentSelection.Deselect();
            currentSelection = null;
            image.color      = crosshairDefaultColor;
        }

        // If 'E' key is pressed, activate current selection
        if (currentSelection && Input.GetKeyDown(KeyCode.E))
        {
            currentSelection.Activate();
        }
    }
示例#20
0
    // Update is called once per frame
    void Update()
    {
        if (Input.GetButtonDown("Fire1") && CursorManager.Instance.cursorState != CursorManager.CursorStates.deactivated)
        {
            // Fire ray
            GameObject camGO = GameObject.Find(CurrentCamera.Value);
            Camera     cam   = camGO.GetComponentInChildren <Camera>();

            if (cam == null || camGO == null)
            {
                Debug.LogError("PointAndClick::Update() -- Camera not found on " + CurrentCamera);
                return;
            }

            Ray ray = cam.ScreenPointToRay(Input.mousePosition);

            if (Physics.Raycast(ray, out RaycastHit hit, Mathf.Infinity, InteractableMask))
            {
                PlayerHealth.Value -= 5;

                Debug.LogWarning(hit.transform.name);
                if (hit.transform.root.gameObject.layer == LayerMask.NameToLayer("Interactable"))
                {
                    Interactable i = hit.transform.GetComponent <Interactable>();
                    if (i.MustMoveToBeforeInteraction)
                    {
                        Debug.Log("Move to");
                        if (i.MoveToLoc != null)
                        {
                            GameObject.FindGameObjectWithTag("Player").GetComponent <PlayerMovement>().MoveToInteract(i.MoveToLoc.position, i);
                        }
                        else
                        {
                            Debug.LogWarning("Move to loc not found for interactable. Defaulting to basic activate.");
                            i.Activate();
                        }
                    }
                    else
                    {
                        Debug.Log("Interact");
                        i.Activate();
                    }
                }
            }
        }

        // Passive Raycast
        if (CursorManager.Instance.cursorState != CursorManager.CursorStates.deactivated)
        {
            // Fire passive ray
            GameObject camGO = GameObject.Find(CurrentCamera.Value);
            Camera     cam   = camGO.GetComponentInChildren <Camera>();

            if (cam == null || camGO == null)
            {
                Debug.LogError("PointAndClick::Update() -- Camera not found on " + CurrentCamera);
                return;
            }

            Ray ray = cam.ScreenPointToRay(Input.mousePosition);

            if (Physics.Raycast(ray, out RaycastHit hit, Mathf.Infinity, InteractableMask))
            {
                if (hit.transform.root.gameObject.layer == LayerMask.NameToLayer("Interactable"))
                {
                    CursorManager.Instance.SetCurstor(CursorManager.CursorStates.interactable);
                    DisplayInteractionText.Instance.SetText(hit.transform.gameObject.GetComponent <Interactable>().Name);
                }
                else
                {
                    CursorManager.Instance.SetCurstor(CursorManager.CursorStates.normal);
                    DisplayInteractionText.Instance.SetText("");
                }
            }
        }
    }
示例#21
0
 void DropM()
 {
     lastM.Activate('M');
     mPermission = false;
     lastM       = null;
 }