void Update() { ray = new Ray(transform.position, transform.forward); if (!isAlive || lasersHitting > 0) { float distance = Mathf.Abs(Level.Dimension - transform.position.x); distance = Mathf.Abs(Vector3.Dot(transform.position, transform.forward) - Level.Dimension); if (distance > 10) { distance -= (Level.Dimension); } RaycastHit[] hits = Physics.RaycastAll(ray,distance); RaycastHit hit = new RaycastHit(); bool isRealHit = false; if(hits.Length > 0 && hits[0].transform.tag != "Selector"){ hit = hits[0]; isRealHit = true; }else{ if (hits.Length > 1 && hits[1].transform.tag != "Selector") { hit = hits[1]; isRealHit = true; } } /*Debug.Log(isAlive); foreach(RaycastHit h in hits){ Debug.Log(CubeHelper.GetEntityInPosition(h.transform.position)); }*/ if (isRealHit ) { hitPosition = hit.transform.position; renderer.SetPosition(1, hitPosition); if (!CubeHelper.IsFree(hitPosition) && CubeHelper.GetEntityInPosition(hitPosition) is ILaserReactive) { ILaserReactive newHit = (ILaserReactive)CubeHelper.GetEntityInPosition(hitPosition); if (!newHit.Equals(reactabletHit)) { newHit.HitByLaser(this.transform.position); reactabletHit = newHit; } } else { if (reactabletHit != null) { reactabletHit.StopHit(this.transform.position); reactabletHit = null; } } } else { if (reactabletHit !=null) { reactabletHit.StopHit(this.transform.position); reactabletHit = null; } renderer.SetPosition(1, transform.position+transform.forward * distance); } } else { renderer.SetPosition(1, this.transform.position); } }
void Update() { ray = new Ray(transform.position, transform.forward); if (!isAlive || lasersHitting > 0) { float distance = Mathf.Abs(Level.Dimension - transform.position.x); distance = Mathf.Abs(Vector3.Dot(transform.position, transform.forward) - Level.Dimension); if (distance > 10) { distance -= (Level.Dimension); } RaycastHit[] hits = Physics.RaycastAll(ray, distance); RaycastHit hit = new RaycastHit(); bool isRealHit = false; if (hits.Length > 0 && hits[0].transform.tag != "Selector") { hit = hits[0]; isRealHit = true; } else { if (hits.Length > 1 && hits[1].transform.tag != "Selector") { hit = hits[1]; isRealHit = true; } } /*Debug.Log(isAlive); * foreach(RaycastHit h in hits){ * Debug.Log(CubeHelper.GetEntityInPosition(h.transform.position)); * }*/ if (isRealHit) { hitPosition = hit.transform.position; renderer.SetPosition(1, hitPosition); if (!CubeHelper.IsFree(hitPosition) && CubeHelper.GetEntityInPosition(hitPosition) is ILaserReactive) { ILaserReactive newHit = (ILaserReactive)CubeHelper.GetEntityInPosition(hitPosition); if (!newHit.Equals(reactabletHit)) { newHit.HitByLaser(this.transform.position); reactabletHit = newHit; } } else { if (reactabletHit != null) { reactabletHit.StopHit(this.transform.position); reactabletHit = null; } } } else { if (reactabletHit != null) { reactabletHit.StopHit(this.transform.position); reactabletHit = null; } renderer.SetPosition(1, transform.position + transform.forward * distance); } } else { renderer.SetPosition(1, this.transform.position); } }