Esempio n. 1
0
        private void Cast()
        {
            Quaternion x         = Quaternion.AngleAxis(angle.x, new Vector3(1, 0, 0));
            Quaternion y         = Quaternion.AngleAxis(angle.y, new Vector3(0, 1, 0));
            Quaternion z         = Quaternion.AngleAxis(angle.z, new Vector3(0, 0, 1));
            Vector3    direction = x * y * z * transform.forward * maxDistance;

            Debug.DrawRay(transform.position, direction, Color.red);

            Ray ray = new Ray(transform.position, direction);

            if (Physics.Raycast(ray, out RaycastHit hit, maxDistance: maxDistance))
            {
                if (currentHighlightable != null)
                {
                    currentHighlightable.OnHighlightStop();
                }

                if (hit.collider.CompareTag("Interactable"))
                {
                    currentHighlightable = hit.collider.gameObject.GetComponent <Highlightable>();
                    currentInteractable  = hit.collider.gameObject.GetComponent <Interactable>();
                    currentHighlightable?.OnHighlightStart();
                }
                else
                {
                    currentHighlightable = null;
                    currentInteractable  = null;
                }
            }
Esempio n. 2
0
    // Update is called once per frame
    void Update()
    {
        RaycastHit hit;
        Ray        ray = camera.ScreenPointToRay(new Vector3(Screen.width / 2f, Screen.height / 2f, 0));

        if (Physics.Raycast(ray, out hit))
        {
            Highlightable target = hit.transform.GetComponent <Highlightable>();
            if (target != highlighted)
            {
                if (highlighted != null)
                {
                    highlighted.Deselect();
                    if (highlighted.transform.parent == KeyBook.transform)
                    {
                        controller.lookingAtBook = false;
                    }
                }
            }
            if (hit.transform.parent == KeyBook.transform)
            {
                controller.lookingAtBook = true;
            }
            if (target != null)
            {
                target.Highlight();
                highlighted = target;
            }
            // Do something with the object that was hit by the raycast.
        }
        else if (highlighted != null)
        {
            highlighted.Deselect();
        }
    }
Esempio n. 3
0
    private void OnTriggerEnter(Collider other)
    {
        //Debug.Log(other.gameObject.name + " entered me");
        Highlightable hi = other.gameObject.GetComponent <Highlightable>();

        switch (OnEnter)
        {
        case DoWhatOn.AddListener:
            if (!HighlightController.Contains(hi))
            {
                OnPad += hi.ToggleHighlightMaterial;
                //Debug.Log("Adding callback");
            }
            break;

        case DoWhatOn.RemoveListener:
            OnPad -= hi.ToggleHighlightMaterial;
            break;

        case DoWhatOn.DoNothing:
            break;

        default:
            break;
        }
    }
Esempio n. 4
0
    private void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject == heldObj && holdingObj)
        {
            return;
        }

        if (selectableLayer == (selectableLayer.value | 1 << collision.gameObject.layer))
        {
            if (numberOfCollisionOld == 0)
            {
                return;
            }

            //highlights only the most recent object
            currentHighlightedObj = collision.gameObject;
            if (highlight != null)
            {
                highlightOld = highlight;
                highlightOld.SetAlternateSprite(false);
            }
            highlight = currentHighlightedObj.GetComponent <Highlightable>();
            if (highlight.highlightable)
            {
                highlight.SetAlternateSprite(true);
            }
            else
            {
                highlight             = null;
                currentHighlightedObj = null;
            }
        }
    }
Esempio n. 5
0
    void HighlightCollider(GameObject colliderGO, bool highlight)
    {
        Highlightable highlightScript = GetComponent <Highlightable>();

        if (highlightScript == null)
        {
            highlightScript = colliderGO.AddComponent <Highlightable>();
        }
        highlightScript.SetAllChildrenHighlightable(highlight);
    }
Esempio n. 6
0
    void Awake()
    {
        Highlightable highlighter = gameObject.GetComponent <Highlightable>();

        // get reference to the sound manager
        DogController[] foundDogControllers = FindObjectsOfType <DogController>();
        if (foundDogControllers.Length > 0)
        {
            SoundManagerInstance = foundDogControllers[0].GetComponentInChildren <SoundManager>();
        }
    }
Esempio n. 7
0
 // Update is called once per frame
 void LateUpdate()
 {
     Collider[] hitColliders = Physics.OverlapSphere(pickUpOffset.x * transform.right + pickUpOffset.y * transform.up + pickUpOffset.z * transform.forward + transform.position, pickUpRadius, pickUpLayer);
     foreach (Collider collider in hitColliders)
     {
         Highlightable highlightableScript = collider.GetComponentInParent <Highlightable>();
         if (highlightableScript != null)
         {
             if (highlightableScript.highlighted == false)
             {
                 highlightableScript.Highlight(highLightColour);
                 return;
             }
         }
     }
 }
Esempio n. 8
0
 public void SetAllChildrenHighlightable(bool highlight)
 {
     mChildrenRenderers = gameObject.GetComponentsInChildren <Renderer>();
     if (mChildrenRenderers != null)
     {
         foreach (Renderer render in mChildrenRenderers)
         {
             Highlightable highlightScript = GetComponent <Highlightable>();
             if (highlightScript == null)
             {
                 highlightScript = render.gameObject.AddComponent <Highlightable>();
             }
             highlightScript.SetHighlight(highlight);
         }
     }
 }
Esempio n. 9
0
    public static bool Contains(Highlightable obj)
    {
        if (OnPad == null)
        {
            return(false);
        }
        Delegate[] invocList = OnPad.GetInvocationList();

        foreach (Delegate d in invocList)
        {
#pragma warning disable 252
            if (d.Target == obj) // yes, compare references
#pragma warning restore 252
            {
                return(true);
            }
        }


        return(false);
    }
Esempio n. 10
0
    void Update()
    {
        RaycastHit hit;

        if (Physics.Raycast(gunBarrel.transform.position, gunBarrel.transform.forward, out hit, 30.0f))
        {
            target_object = hit.collider.gameObject;
            while (target_object.transform.parent != null && target_object.transform.parent.gameObject.tag != "Terrain")
            {
                target_object = target_object.transform.parent.gameObject;
            }
            target_script = target_object.GetComponent <Highlightable>();
            if (target_script != null)
            {
                setHighlighted(true);
                if (InputManager.GetAction("Use"))
                {
                    actuate();
                }
                else
                {
                    actuate();
                }
            }
            else
            {
                // if we lose focus, reset the timer
                reset();
            }
        }
        else
        {
            // if we lose focus, reset the timer
            reset();
        }
        if (InputManager.GetAction("ToggleLaser"))
        {
            ToggleLaser();
        }
    }
Esempio n. 11
0
    public void OnPickStateChanged(PickState prevState, PickState currentState, Picker picker, GameObject target)
    {
        switch (currentState)
        {
        case PickState.None:

            if (target && target.tag.Equals(TAG_PART))
            {
                Part part = target.GetComponent <Part>();
                part.Highlighted = Part.HighlightDegree.None;
                part.DisconnectFromRigidbody();
                if (picker != null)
                {
                    picker.Reset();
                }
            }
            else if (target && target.tag.Equals(TAG_BUTTON))
            {
                Highlightable button = target.GetComponentInChildren <Highlightable>();
                button.Highlighted = Highlightable.HighlightDegree.None;
            }

            break;


        case PickState.Hovering:

            if (target && target.tag.Equals(TAG_PART))
            {
                Part part = target.GetComponent <Part>();
                part.Highlighted = Part.HighlightDegree.Half;
                part.DisconnectFromRigidbody();
                if (prevState == PickState.Picking)
                {
                    part.Highlighted = Part.HighlightDegree.None;
                    if (picker != null)
                    {
                        picker.Reset();
                    }
                }
            }
            else if (target && target.tag.Equals(TAG_BUTTON))
            {
                Highlightable button = target.GetComponentInChildren <Highlightable>();
                button.Highlighted = Highlightable.HighlightDegree.Half;
            }

            if (currentShelf.CurrentPreset().Type == Preset.PresetType.NewPresetPlaceHolder)
            {
                audio.PlayOneShot(audioHover);
            }

            break;


        case PickState.Picking:

            if (target && target.tag.Equals(TAG_PART) && picker != null)
            {
                Part part = target.GetComponent <Part>();
                part.Highlighted = Part.HighlightDegree.Full;
                part.ConnectToRigidbody(picker.MiddlePointContainer.rigidbody, Vector3.zero);

                pickedAnyPart = true;

                if (currentShelf.CurrentPreset().Type == Preset.PresetType.NewPresetPlaceHolder)
                {
                    audio.PlayOneShot(audioPickPart);
                }
            }
            else if (target && target.tag.Equals(TAG_BUTTON))
            {
                Highlightable highlightable = target.GetComponentInChildren <Highlightable>();
                highlightable.Highlighted = Highlightable.HighlightDegree.Full;

                Button3D button = target.transform.parent.GetComponent <Button3D>();
                if (button == editButton)
                {
                    StartCoroutine(OnEditButtonPicked());
                }
                else if (button == saveEditingButton)
                {
                    StartCoroutine(OnSaveButtonPicked());
                }
                else if (button == cancelEditingButton)
                {
                    StartCoroutine(OnCancelButtonPicked());
                }
                else if (button == doneEditingButton)
                {
                    OnDoneButtonPicked();
                }

                audio.PlayOneShot(audioPickButton);
            }

            break;
        }
    }
Esempio n. 12
0
    private void OnCollisionStay(Collision collision)
    {
        if (collision.gameObject == heldObj && holdingObj)
        {
            return;
        }

        if (selectableLayer == (selectableLayer.value | 1 << collision.gameObject.layer))
        {
            ++numberOfCollisions;

            if (numberOfCollisions > 1) //checks the y pos, of the objects. then it only highlights the lowest one.
            {
                secondCollYPos = collision.gameObject.transform.position.y;
                if (highlightOld != null)
                {
                    highlightOld.SetAlternateSprite(false);
                }
                if (highlight != null)
                {
                    highlightOld = highlight;
                    highlightOld.SetAlternateSprite(false);
                }

                if (secondCollYPos < firstCollYPos)
                {
                    currentHighlightedObj = collision.gameObject;
                    highlight             = currentHighlightedObj.GetComponent <Highlightable>();
                    if (highlight.highlightable)
                    {
                        highlight.SetAlternateSprite(true);
                    }
                    else
                    {
                        highlight             = null;
                        currentHighlightedObj = null;
                    }
                }
                else
                {
                    currentHighlightedObj = firstCollision;
                    highlight             = currentHighlightedObj.GetComponent <Highlightable>();
                    if (highlight.highlightable)
                    {
                        highlight.SetAlternateSprite(true);
                    }
                    else
                    {
                        highlight             = null;
                        currentHighlightedObj = null;
                    }
                }

                return;
            }
            else
            {
                firstCollYPos  = collision.gameObject.transform.position.y;
                firstCollision = collision.gameObject;
                if (numberOfCollisionOld > 1 || numberOfCollisionOld == 0)
                {
                    return;
                }
            }


            if (collision.gameObject != currentHighlightedObj)
            {
                //highlights only the most recent object
                currentHighlightedObj = collision.gameObject;
                if (highlight != null)
                {
                    highlightOld = highlight;
                    highlightOld.SetAlternateSprite(false);
                }
                highlight = currentHighlightedObj.GetComponent <Highlightable>();
                if (highlight.highlightable)
                {
                    highlight.SetAlternateSprite(true);
                }
                else
                {
                    highlight             = null;
                    currentHighlightedObj = null;
                }
            }
        }
    }
Esempio n. 13
0
    void HandledInteract()
    {
        if (((controller.playerOne && Input.GetAxisRaw("InteractOne") == 1) || (!controller.playerOne && Input.GetAxisRaw("InteractTwo") == 1)) && !performedInteraction)
        {
            if (currentHighlightedObj != null)
            {
                InteractionType type = highlight.interactionType;
                switch (type)
                {
                case InteractionType.PickUp:
                    if (heldObj == null)
                    {
                        performedInteraction = true;
                        holdingObj           = true;
                        heldObj                         = currentHighlightedObj;
                        heldObjHighlight                = highlight;
                        heldObj.transform.parent        = transform;
                        heldObj.transform.localPosition = handsTransform.localPosition;
                        currentHighlightedObj           = null;
                        highlight.SetAlternateSprite(false);
                    }
                    break;

                case InteractionType.Activate:
                    //actions possible if you are holding or not holding a part



                    if (heldObj != null)  //actions only possible while holding parts
                    {
                        performedInteraction = true;
                        //checks to see if you can use a part to repair
                        RecieveParts partsReciver;
                        currentHighlightedObj.TryGetComponent(out partsReciver);
                        if (partsReciver != null)
                        {
                            if (partsReciver.RecivePart(heldObjHighlight.partID))
                            {
                                performedInteraction         = true;
                                holdingObj                   = false;
                                controller.controller.center = new Vector3(0, 0, 0);
                                Destroy(heldObj);

                                if (highlight != null)
                                {
                                    highlight.SetAlternateSprite(false);
                                    currentHighlightedObj = null;
                                    highlight             = null;
                                }
                                heldObjHighlight = null;
                                heldObj          = null;
                                return;
                            }
                        }
                        //checks to see if you can activate a light breaker
                        ChangeLight changeLight;
                        currentHighlightedObj.TryGetComponent(out changeLight);
                        if (changeLight)
                        {
                            performedInteraction = true;
                            changeLight.SwitchLights(transform.position);
                            return;
                        }
                        //checks to see if you can pass a part
                        PassPart partsPasser;
                        currentHighlightedObj.TryGetComponent(out partsPasser);
                        if (partsPasser != null)
                        {
                            if (partsPasser.TransferPart(heldObj, transform.position))
                            {
                                performedInteraction         = true;
                                holdingObj                   = false;
                                controller.controller.center = new Vector3(0, 0, 0);
                                heldObj.transform.parent     = null;
                                heldObjHighlight             = null;
                                heldObj = null;
                                return;
                            }
                        }
                    }
                    else    //actions only possible while not holding parts
                    {
                        //checks to see if you can activate a light breaker
                        ChangeLight changeLight;
                        currentHighlightedObj.TryGetComponent(out changeLight);
                        if (changeLight)
                        {
                            performedInteraction = true;
                            changeLight.SwitchLights(transform.position);
                        }
                    }
                    break;


                default:
                    Debug.Log("error for " + currentHighlightedObj.name);
                    break;
                }
            }

            if (currentHighlightedObj == null && !performedInteraction)//put down an object
            {
                if (heldObj != null)
                {
                    performedInteraction         = true;
                    holdingObj                   = false;
                    controller.controller.center = new Vector3(0, 0, 0);
                    heldObj.transform.parent     = null;
                    heldObjHighlight             = null;
                    heldObj = null;
                }
            }
        }

        if (((controller.playerOne && Input.GetAxisRaw("InteractOne") == 0) || (!controller.playerOne && Input.GetAxis("InteractTwo") == 0)) && performedInteraction)
        {
            performedInteraction = false;
        }
    }