void FixedUpdate() { Vector3 armVector = -attachmentPoint.transform.right; Vector3 headToArmVector = (attachmentPoint.transform.position - head.transform.position).normalized; DebugLineRenderer.Draw(attachmentPoint.transform.position, attachmentPoint.transform.position + armVector, armCurrentlyVisible ? Color.green : Color.red); DebugLineRenderer.Draw(attachmentPoint.transform.position, attachmentPoint.transform.position + headToArmVector, Color.blue); if (armCurrentlyVisible) { if (Vector3.Dot(armVector, headToArmVector) <= lookingAwayFromArmValue && Vector3.Dot(head.transform.forward, -headToArmVector) <= lookingAwayFromArmValue) { return; } tablet.SetActive(false); laser.SetActive(false); armCurrentlyVisible = false; } else { if (Vector3.Dot(armVector, headToArmVector) >= lookingAtArmValue || Vector3.Dot(head.transform.forward, -headToArmVector) >= lookingAtArmValue) { return; } tablet.SetActive(true); laser.SetActive(true); armCurrentlyVisible = true; } }
void Start() { _Instance = this; lines = new List <Line>(); mesh = new Mesh(); filter = GetComponent <MeshFilter>(); }
void FixedUpdate() { if (pathIndex >= 0) { transform.position = Vector3.MoveTowards(transform.position, path[pathIndex].position + new Vector3(0.0f, 0.02f, 0.0f), Time.deltaTime * 2.5f); float distance = Vector3.Distance(transform.position, path[pathIndex].position); if (distance < 1.0f && pathIndex - 1 >= 0) { Quaternion lookOnLook = Quaternion.LookRotation(path[pathIndex - 1].position - transform.position); transform.rotation = Quaternion.Slerp(previousRotation, lookOnLook, 1.0f - distance); } if (distance < 0.05f) { if (pathIndex - 1 >= 0) { previousRotation = Quaternion.LookRotation(path[pathIndex - 1].position - transform.position); } pathIndex--; } } else { Destroy(gameObject); } Node prev = null; for (int i = pathIndex; i >= 0; i--) { DebugLineRenderer.Draw(prev == null ? transform.position : prev.position, path[i].position, Color.green); prev = path[i]; } }
public WorldViewer(ITagContainer diContainer) { this.diContainer = diContainer; resourcePool = diContainer.GetTag <IResourcePool>(); Window = diContainer.GetTag <WindowContainer>().NewWindow("World Viewer"); Window.AddTag(this); Window.InitialBounds = new Rect(float.NaN, float.NaN, 1100.0f, 600.0f); editor = new TwoColumnEditorTag(Window, diContainer); var onceAction = new OnceAction(); Window.AddTag(onceAction); Window.OnContent += onceAction.Invoke; Window.OnContent += UpdateIntersectionPrimitive; Window.OnKeyDown += HandleKeyDown; var menuBar = new MenuBarWindowTag(Window); menuBar.AddButton("Open", HandleMenuOpen); var gridRenderer = new DebugGridRenderer(diContainer); //gridRenderer.Material.LinkTransformsTo(controls.Projection, controls.View, controls.World); AddDisposable(gridRenderer); modelMaterialEdit = new ModelMaterialEdit(Window, diContainer); modelMaterialEdit.OpenEntriesByDefault = false; diContainer.GetTag <OpenDocumentSet>().AddEditor(this); openFileModal = new OpenFileModal(diContainer); openFileModal.Filter = "*.bsp"; openFileModal.IsFilterChangeable = false; openFileModal.OnOpenedResource += Load; locationBuffer = new LocationBuffer(diContainer.GetTag <GraphicsDevice>()); AddDisposable(locationBuffer); camera = new Camera(diContainer.ExtendedWith(locationBuffer)); AddDisposable(camera); controls = new FlyControlsTag(Window, camera.Location, diContainer); worldTransform = new UniformBuffer <Matrix4x4>(diContainer.GetTag <GraphicsDevice>().ResourceFactory); worldTransform.Ref = Matrix4x4.Identity; AddDisposable(worldTransform); fbArea = Window.GetTag <FramebufferArea>(); fbArea.OnResize += HandleResize; fbArea.OnRender += locationBuffer.Update; fbArea.OnRender += worldTransform.Update; fbArea.OnRender += camera.Update; fbArea.OnRender += gridRenderer.Render; fbArea.OnRender += HandleRender; editor.AddInfoSection("Statistics", HandleStatisticsContent); editor.AddInfoSection("Materials", HandleMaterialsContent, false); editor.AddInfoSection("Sections", HandleSectionsContent, false); editor.AddInfoSection("ViewFrustum Culling", HandleViewFrustumCulling, false); editor.AddInfoSection("Collision", HandleCollision, false); editor.AddInfoSection("Raycast", HandleRaycast, true); boundsRenderer = new DebugBoxLineRenderer(diContainer); boundsRenderer.Color = IColor.Red; boundsRenderer.Material.LinkTransformsTo(camera); boundsRenderer.Material.LinkTransformsTo(world: worldTransform); AddDisposable(boundsRenderer); planeRenderer = new DebugPlaneRenderer(diContainer); planeRenderer.Material.LinkTransformsTo(camera); planeRenderer.Material.LinkTransformsTo(world: worldTransform); AddDisposable(planeRenderer); frustumRenderer = new DebugHexahedronLineRenderer(diContainer); frustumRenderer.Material.LinkTransformsTo(camera); frustumRenderer.Material.LinkTransformsTo(world: worldTransform); AddDisposable(frustumRenderer); triangleRenderer = new DebugTriangleLineRenderer(diContainer); triangleRenderer.Material.LinkTransformsTo(camera); triangleRenderer.Material.LinkTransformsTo(world: worldTransform); AddDisposable(triangleRenderer); rayRenderer = new DebugLineRenderer(diContainer); rayRenderer.Material.LinkTransformsTo(camera); rayRenderer.Material.LinkTransformsTo(world: worldTransform); AddDisposable(rayRenderer); worldRenderer = new WorldRenderer(diContainer.ExtendedWith(camera, locationBuffer)); AddDisposable(worldRenderer); }