private void DoScan() { Camera cam = _controlServices.ControlledCamera.Camera; if (!cam) { DisableScannedObject(); return; } Ray r = cam.ScreenPointToRay(Input.mousePosition); RaycastHit hitInfo; if (!Physics.Raycast(r, out hitInfo, _maxGrabDistance)) { DisableScannedObject(); return; } GameObject hitObject = hitInfo.collider.gameObject; ScannableObject scannable = hitObject.GetComponent <ScannableObject>(); if (scannable != _highlighted) { DisableScannedObject(); EnableScannedObject(scannable); return; } }
void ScanClosestObject() { currentIndex = (currentIndex < currentScannedObjects.Count) ? currentIndex : 0; Debug.Log(currentIndex); currentActive = currentScannedObjects[currentIndex].scannedableObject; activeChanged = true; }
private void DisableScannedObject() { if (_highlighted) { _highlighted.enabled = false; _highlighted = null; MetablastUI.Instance.HudView.ContextMessageView.SetLowPriorityText(""); } }
private void EnableScannedObject(ScannableObject scannable) { if (scannable) { scannable.enabled = true; _highlighted = scannable; MetablastUI.Instance.HudView.ContextMessageView.SetLowPriorityText("Click to grab " + _highlighted.BiologEntry); } }
// Update is called once per frame void Update() { if (scan) { scanTimer -= Time.deltaTime; foreach (ScannedObject currentObject in currentScannedObjects) { Material mat = currentObject.scannedableObject.GetComponent <Renderer>().material; mat.SetFloat("_ScanPower", Mathf.PingPong(Time.time, 1f) * scanPower); } if (currentActive != null && activeChanged) { currentActive.baseObject.Unscan(); activeChanged = false; currentActive.baseObject.ScanObject(); } if (currentActive != null) { Material mat = currentActive.GetComponent <Renderer>().material; mat.SetFloat("_ScanPower", Mathf.PingPong(Time.time, 1f) * activeScanPower); } if (scanTimer <= 0f) { scan = false; foreach (ScannedObject currentObject in currentScannedObjects) { Material mat = currentObject.scannedableObject.GetComponent <Renderer>().material; mat.SetFloat("_ScanPower", 0f); } if (currentActive != null) { currentActive.baseObject.Unscan(); } currentActive = null; scanTimer = 0f; currentScannedObjects.Clear(); particleSystem.Stop(); } } }
public ObjectScannedLogEntry(Guid userGuid, ScannableObject scannedObject) : base(userGuid) { Vector3 position = scannedObject.transform.position; _data = JsonConvert.SerializeObject( new { BiologEntry = scannedObject.BiologEntry, GameObject = new { Name = scannedObject.gameObject.name, Location = new { X = position.x, Y = position.y, Z = position.z } } }); }
private void EnableScannedObject(ScannableObject scannable) { if (scannable) { scannable.enabled = true; _highlighted = scannable; if (GameContext.Instance.Player.BiologProgress.IsEntryUnlocked(scannable.BiologEntry)) { MetablastUI.Instance.HudView.ContextMessageView.SetLowPriorityText("Left click to scan " + _highlighted.BiologEntry); } else { MetablastUI.Instance.HudView.ContextMessageView.SetLowPriorityText("Left click to scan unknown object"); } } }
void ScanForObjects() { currentScannedObjects.Clear(); Collider[] objects = Physics.OverlapSphere(transform.position, scanRadius); foreach (Collider currentObject in objects) { ScannableObject relay = currentObject.transform.GetComponent <ScannableObject>(); if (relay != null) { float distance = Vector3.Distance(currentObject.transform.position, transform.position); currentScannedObjects.Add(new ScannedObject() { scannedableObject = relay, initalDistance = distance }); } } currentScannedObjects.Sort((a, b) => a.initalDistance > b.initalDistance ? 1 : -1); }
public ScannableObject Scan() { ActivateScanner(true); if (m_ObectToScanInRange) { //continue scanning if (m_timeLeftToScan > 0) { var scanCompletePerc = ScanTime > 0 ? (ScanTime - m_timeLeftToScan) / ScanTime : 1; m_ObectToScanInRange.OnScan(scanCompletePerc); m_timeLeftToScan -= Time.deltaTime; } //finish scanning else { m_ObectToScanInRange.OnScanStop(); m_ScannedObject = m_ObectToScanInRange.GetScannedObject(); return(m_ScannedObject); } } return(null); }
void UpdateIdle() { if (!_cameraController.Camera) { return; } Ray ray = _cameraController.Camera.ScreenPointToRay(Input.mousePosition); RaycastHit hitInfo; if (Physics.Raycast(ray, out hitInfo, _maxGrabDistance, _layerMask)) { GameObject hitObject = hitInfo.collider.gameObject; GrabbableObject grabbedObject = hitObject.GetComponent <GrabbableObject>(); ScannableObject scannable = hitObject.GetComponent <ScannableObject>(); if (scannable != _highlighted) { DisableScannedObject(); EnableScannedObject(scannable); } if (!grabbedObject) { DisableScannedObject(); } if (grabbedObject && !EventSystem.current.IsPointerOverGameObject() && Input.GetMouseButtonDown(0)) { MetablastUI.Instance.HudView.ContextMessageView.SetLowPriorityText(""); GrabObject(grabbedObject, hitInfo.point); _state = ImpulseGunState.Grabbing; } } else { DisableScannedObject(); } }
public ScannableObject[] ObjectsToScan() { int numberOfScans = Random.Range(minScans, maxScans); List <ScannableObject> unchosenScanObjs = new List <ScannableObject>(); List <ScannableObject> objsToRemove = new List <ScannableObject>(); foreach (ScannableObject so in scannableObjects) { if (so != null) { unchosenScanObjs.Add(so); } else { objsToRemove.Add(so); } } for (int i = 0; i < objsToRemove.Count; i++) { scannableObjects.Remove(objsToRemove[i]); } numberOfScans = Mathf.Clamp(numberOfScans, 1, scannableObjects.Count); ScannableObject[] chosenScanObjects = new ScannableObject[numberOfScans]; for (int i = 0; i < numberOfScans; i++) { int randomNum = Random.Range(0, unchosenScanObjs.Count); chosenScanObjects[i] = unchosenScanObjs[randomNum]; unchosenScanObjs.Remove(unchosenScanObjs[randomNum]); } return(chosenScanObjects); }