public void grab(Transform tograb) { tograb.SetParent(transform); grabbed = tograb; TextureBasedFrameBehaviour f = tograb.GetComponent <TextureBasedFrameBehaviour>(); if (f != null) { frameGrabbed = f; } }
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); }
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++)); }
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) //{ //} }
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)); }
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); }
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(); } }
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; }
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)); } }
// 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); } } } }