Example #1
0
    public void grab(Transform tograb)
    {
        tograb.SetParent(transform);
        grabbed = tograb;

        TextureBasedFrameBehaviour f = tograb.GetComponent <TextureBasedFrameBehaviour>();

        if (f != null)
        {
            frameGrabbed = f;
        }
    }
Example #2
0
    public void notifyFrameLift(TextureBasedFrameBehaviour lifted)
    {
        if (framePosIndexes.ContainsKey(lifted))
        {
            int prevPos = framePosIndexes[lifted];
            framesSlotsIndex[prevPos] = -1; //lifting it up

            Debug.Log("lifted F" + lifted.frameID + " from " + prevPos);
            sender?.liftFrame(lifted.frameID);

            framePosIndexes[lifted] = -1;
        }

        lifted.exterior.SetActive(false);
    }
Example #3
0
    public Vector3 registerAndPlaceNewFrame(TextureBasedFrameBehaviour f)
    {
        if (instanciatedFrame > maxNumberOfFrames)
        {
            Debug.LogError("Max number of 8 frames reached");
            return(Vector3.zero);
        }

        //Debug.Log("instanciatedFrame " + instanciatedFrame);

        framePosIndexes.Add(f, instanciatedFrame);
        framesSlotsIndex[instanciatedFrame] = f.frameID;

        return(getPosForIndex(instanciatedFrame++));
    }
Example #4
0
    private TextureBasedFrameBehaviour spawnAFrame(int id)
    {
        //Debug.Log("Spawning frame " + id);

        TextureBasedFrameBehaviour f = Instantiate(framePrefab, Vector3.zero, Quaternion.identity, hiveContainer).GetComponent <TextureBasedFrameBehaviour>();

        f.frameID = id;
        Vector3 framePos = positionner.registerAndPlaceNewFrame(f);

        f.transform.localPosition = framePos;

        frames.Add(f);

        return(f);
    }
    private void Update()
    {
        //velocityEstimator.FinishEstimatingVelocity();

        if (checkInput())
        {
            Debug.Log("Triggered");
            //Select or Deselect
            if (pickedUp == null)
            {
                if (tryGetNearestFrame(out TextureBasedFrameBehaviour f))
                {
                    pickedUp = f;

                    f.transform.SetParent(transform);
                    f.transform.localPosition = Vector3.zero;
                    f.transform.localRotation = Quaternion.identity;

                    positionner.notifyFrameLift(f);

                    velocityEstimator.BeginEstimatingVelocity();
                }
            }
            else
            {
                pickedUp.transform.SetParent(null);
                positionner.notifyFrameDropped(pickedUp);
                pickedUp = null;
                velocityEstimator.FinishEstimatingVelocity();
            }
        }

        if (pickedUp != null)
        {
            positionner.notifyFrameHandled(pickedUp);

            if (checkIfHit() && detectFrameHit)
            {
                //Hit frame
                sender?.hitFrame(pickedUp.frameID);
            }
        }

        //if(myInput.getTriggerPress(VRInteractionProfileManager.FRAME_PROFILE) && pickedUp != null)
        //{
        //}
    }
Example #6
0
    private TextureBasedFrameBehaviour getFrameWithCombID(int combID)
    {
        int frameID = combID / 2;

        TextureBasedFrameBehaviour f = null;

        for (int i = 0; i < frames.Count && f == null; ++i)
        {
            if (frames[i].frameID == frameID)
            {
                return(frames[i]);
            }
        }

        Debug.LogError("Spawning " + frameID + " from GetFrameWithCombID");
        return(spawnAFrame(frameID));
    }
Example #7
0
    public bool notifyFrameDropped(TextureBasedFrameBehaviour f, bool replaceFrame = true)
    {
        f.exterior.SetActive(true);

        if (tryGetClosestEmptyPos(f.transform.position, out int index))
        {
            framesSlotsIndex[index] = f.frameID;
            framePosIndexes[f]      = index;

            float angle = Vector3.Angle(f.transform.forward, transform.forward);

            //Debug.Log("Angle " + angle);

            //Debug.DrawRay(f.transform.position, -f.transform.forward, Color.red, 1);
            //Debug.DrawRay(f.transform.position, transform.forward, Color.blue, 1);

            if (replaceFrame)
            {
                f.transform.SetParent(transform);

                f.transform.localRotation = Quaternion.identity;
                f.transform.localPosition = getPosForIndex(index);

                if (angle > 90)
                {
                    f.transform.Rotate(transform.up, 180);
                }
            }

            bool reversed = angle > 90;

            bool wasReversed = f.isReversed;

            f.isReversed = reversed;

            Debug.Log("Dropped F" + f.frameID + " to " + index);
            sender?.putFrame(f.frameID, index, reversed != wasReversed);

            resetPlaceHolderPos();

            return(true);
        }

        return(false);
    }
    private bool tryGetNearestFrame(out TextureBasedFrameBehaviour nearest)
    {
        nearest = null;
        float closestDistance = distanceGrab;

        foreach (TextureBasedFrameBehaviour f in frameManager.getFrames())
        {
            float distance = (f.transform.position - transform.position).magnitude;

            if (distance < closestDistance)
            {
                closestDistance = distance;
                nearest         = f;
            }
        }

        return(nearest != null);
    }
Example #9
0
    public void notifyFrameHandled(TextureBasedFrameBehaviour lifted)
    {
        if (framePosIndexes.ContainsKey(lifted))
        {
            if (framePosIndexes[lifted] != -1)
            {
                notifyFrameLift(lifted);
            }
        }

        if (tryGetClosestEmptyPos(lifted.transform.position, out int index))
        {
            //highlight pos
            //Debug.DrawRay(new Vector3(0, 0, index * frameIntervals), Vector3.up * 2, Color.red);
            //Debug.Log("Found " + index);
            //move a ghost or smthg
            instanciatedPlaceHolder.localPosition = getPosForIndex(index);
        }
        else
        {
            resetPlaceHolderPos();
        }
    }
Example #10
0
    public void toggleFrameState(int frameIndex)
    {
        if (frameIndex >= frames.Count)
        {
            return;
        }

        TextureBasedFrameBehaviour frame = frames[frameIndex];

        if (frame.isUp)
        {
            //Put it down
            frame.transform.position = frame.initPos;
            frame.transform.rotation = frame.initRot;
            sender.putFrame(frameIndex, frameIndex, false);
        }
        else
        {
            //lift it up
            frame.transform.Translate(frame.transform.up * 50f);
            sender.liftFrame(frameIndex);
        }
        frames[frameIndex].isUp = !frame.isUp;
    }
Example #11
0
    private void initialiseWith(int[] combIDs)
    {
        foreach (TextureBasedFrameBehaviour f in frames)
        {
            Destroy(f.gameObject);
        }

        frames.Clear();

        positionner.reset();

        for (int i = 0; i < combIDs.Length; i += 2)
        {
            //Debug.Log("Spawning " + combIDs[i] / 2 + " from initialiseWith");
            TextureBasedFrameBehaviour f = spawnAFrame(combIDs[i] / 2);

            if (combIDs[i] > combIDs[i + 1])
            {
                f.transform.Rotate(Vector3.up, 180, Space.World);
            }

            //Debug.Log("Spanwed frame" + combIDs[i] / 2 + " at pos " + (frames.Count));
        }
    }
Example #12
0
    // Update is called once per frame
    void Update()
    {
        if (grabbed == null)
        {
            RaycastHit hit;

            if (Physics.Raycast(transform.position, transform.forward, out hit, 3f, layers))
            {
                highlight(true);

                if (Input.GetMouseButtonDown(0))
                {
                    Interactible item = hit.collider.transform.GetComponentInParent <Interactible>();
                    if (item != null)
                    {
                        item.interact(this);
                    }
                    else
                    {
                        Debug.Log("Did not find any interactible in " + hit.collider.transform.name);
                    }
                }
            }
            else
            {
                highlight(false);
            }
        }
        else
        {
            //DROP
            if (Input.GetMouseButtonDown(0))
            {
                if (frameGrabbed != null)
                {
                    positionner.notifyFrameDropped(frameGrabbed);
                    grabbed.SetParent(positionner.transform);
                }
                else
                {
                    grabbed.SetParent(null);
                }

                grabbed      = null;
                frameGrabbed = null;
            }
            else
            {
                if (frameGrabbed != null)
                {
                    positionner.notifyFrameHandled(frameGrabbed);
                }
                //frameHandling

                if (Input.GetKey(KeyCode.A))
                {
                    grabbed.Rotate(Vector3.up * 2);
                }
                else if (Input.GetKey(KeyCode.E))
                {
                    grabbed.Rotate(Vector3.down * 2);
                }
                else if (Input.GetKey(KeyCode.R))
                {
                    grabbed.Rotate(Vector3.left * 2);
                }
                else if (Input.GetKey(KeyCode.F))
                {
                    grabbed.Rotate(Vector3.right * 2);
                }
                else if (Input.GetKey(KeyCode.T) && frameGrabbed != null)
                {
                    //start shaknig anim

                    //send message through positionner command sender
                    positionner.sender.hitFrame(frameGrabbed.frameID);
                }

                if (Input.mouseScrollDelta.y != 0)
                {
                    grabbed.Translate(-transform.forward * 0.1f * Input.mouseScrollDelta.y, Space.World);
                }
            }
        }
    }