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;
        }
    }
Example #2
0
 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];
        }
    }
Example #4
0
        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);
        }