virtual protected void make_materials()
        {
            float fAlpha = 0.5f;

            srcMaterial      = MaterialUtil.CreateTransparentMaterial(ColorUtil.CgRed, fAlpha);
            srcHoverMaterial = MaterialUtil.CreateStandardMaterial(ColorUtil.CgRed);
        }
Ejemplo n.º 2
0
        public FScene(FContext context)
        {
            this.context = context;

            history       = new ChangeHistory();
            history_stack = new List <ChangeHistory>();
            TypeRegistry  = new SORegistry();

            initialize_scene_root();

            // initialize materials
            DefaultSOMaterial = new SOMaterial()
            {
                Name = "DefaultSO",
                Type = SOMaterial.MaterialType.StandardRGBColor, RGBColor = ColorUtil.StandardBeige
            };
            DefaultCurveSOMaterial = new SOMaterial()
            {
                Name = "DefaultCurveSO",
                Type = SOMaterial.MaterialType.UnlitRGBColor, RGBColor = Colorf.DarkSlateGrey
            };
            DefaultMeshSOMaterial = new SOMaterial()
            {
                Name = "DefaultMeshSO",
                Type = SOMaterial.MaterialType.PerVertexColor, RGBColor = Colorf.White
            };
            NewSOMaterial = new SOMaterial()
            {
                Name = "NewSO",
                Type = SOMaterial.MaterialType.StandardRGBColor, RGBColor = Colorf.CornflowerBlue
            };
            TransparentNewSOMaterial = new SOMaterial()
            {
                Name = "NewSO",
                Type = SOMaterial.MaterialType.TransparentRGBColor, RGBColor = new Colorf(Colorf.CornflowerBlue, 0.5f)
            };
            PivotSOMaterial = new SOMaterial()
            {
                Name = "PivotSO",
                Type = SOMaterial.MaterialType.TransparentRGBColor, RGBColor = ColorUtil.PivotYellow.SetAlpha(0.75f)
            };
            FrameSOMaterial = new SOMaterial()
            {
                Name = "PivotFrame",
                Type = SOMaterial.MaterialType.StandardRGBColor, RGBColor = ColorUtil.DarkGrey
            };

            SelectedMaterial = MaterialUtil.CreateStandardMaterial(ColorUtil.SelectionGold);
            FrameMaterial    = MaterialUtil.CreateStandardMaterial(ColorUtil.DarkGrey);
            PivotMaterial    = MaterialUtil.ToMaterialf(PivotSOMaterial);

            defaultPrimitiveType = SOTypes.Cylinder;
        }
Ejemplo n.º 3
0
        public Scene()
        {
            vObjects       = new List <SceneObject> ();
            vSelected      = new List <SceneObject> ();
            vUIElements    = new List <SceneUIElement> ();
            vBoundsObjects = new List <GameObject> ();

            sceneo = new GameObject("Scene");

            // initialize materials
            defaultMaterial  = MaterialUtil.CreateStandardMaterial(new Color(0.75f, 0.75f, 0.5f));
            selectedMaterial = MaterialUtil.CreateStandardMaterial(new Color(1.0f, 0.6f, 0.05f));
        }
Ejemplo n.º 4
0
        public void Initialize(Cockpit cockpit)
        {
            Frame3 cockpitF = cockpit.GetLocalFrame(CoordSpace.WorldCoords);

            float fHUDRadius = 0.7f;
            Color bgColor    = new Color(0.7f, 0.7f, 1.0f);

            Material bgMaterial   = MaterialUtil.CreateTransparentMaterial(bgColor, 0.7f);
            Material primMaterial = MaterialUtil.CreateStandardMaterial(Color.yellow);

            HUDButton addCylinderButton = new HUDButton()
            {
                Radius = 0.08f
            };

            addCylinderButton.Create(PrimitiveType.Cylinder, bgMaterial, primMaterial);
            Frame3 cylFrame    = addCylinderButton.GetObjectFrame();
            Frame3 cylHUDFrame = make_hud_sphere_frame(fHUDRadius, -45.0f, 0.0f);

            addCylinderButton.SetObjectFrame(
                cylFrame.Translated(cylHUDFrame.Origin)
                .Rotated(Quaternion.FromToRotation(cylFrame.Z, cylHUDFrame.Z)));
            addCylinderButton.OnClicked += (s, e) => {
                cockpit.Parent.Scene.AddCylinder();
            };
            cockpit.AddUIElement(addCylinderButton, true);


            HUDButton addBoxButton = new HUDButton()
            {
                Radius = 0.08f
            };

            addBoxButton.Create(PrimitiveType.Cube, bgMaterial, primMaterial);
            Frame3 boxFrame    = addBoxButton.GetObjectFrame();
            Frame3 boxHUDFrame = make_hud_sphere_frame(fHUDRadius, -45.0f, -15.0f);

            addBoxButton.SetObjectFrame(
                boxFrame.Translated(boxHUDFrame.Origin)
                .Rotated(Quaternion.FromToRotation(boxFrame.Z, boxHUDFrame.Z)));
            addBoxButton.OnClicked += (s, e) => {
                cockpit.Parent.Scene.AddBox();
            };
            cockpit.AddUIElement(addBoxButton, true);
        }
Ejemplo n.º 5
0
        public static HUDButton CreateMeshClickButton(
            Mesh mesh, Color color, float fMeshScale, Quaternion meshRotation,
            float fHUDRadius, float fAngleHorz, float fAngleVert,
            IGameObjectGenerator addGeometry = null)
        {
            Material mat = (color.a < 1.0f) ?
                           MaterialUtil.CreateTransparentMaterial(color, color.a) :
                           MaterialUtil.CreateStandardMaterial(color);

            HUDButton button = new HUDButton();

            button.Create(mesh, mat, fMeshScale, meshRotation);

            if (addGeometry != null)
            {
                button.AddVisualElements(addGeometry.Generate(), true);
            }
            HUDUtil.PlaceInSphere(button, fHUDRadius, fAngleHorz, fAngleVert);
            return(button);
        }
Ejemplo n.º 6
0
        public static HUDButton CreateGeometryIconClickButton(HUDShape shape,
                                                              float fHUDRadius, float fAngleHorz, float fAngleVert,
                                                              Color bgColor,
                                                              IGameObjectGenerator addGeometry = null)
        {
            Material mat = (bgColor.a == 1.0f) ?
                           MaterialUtil.CreateStandardMaterial(bgColor) : MaterialUtil.CreateTransparentMaterial(bgColor);
            HUDButton button = new HUDButton()
            {
                Shape = shape
            };

            button.Create(mat);
            if (addGeometry != null)
            {
                button.AddVisualElements(addGeometry.Generate(), true);
            }
            HUDUtil.PlaceInSphere(button, fHUDRadius, fAngleHorz, fAngleVert);
            return(button);
        }
Ejemplo n.º 7
0
        public List <fGameObject> Generate()
        {
            fMesh           mesh    = FResources.LoadMesh(Path);
            fMeshGameObject fMeshGO = GameObjectFactory.CreateMeshGO("iconMesh", mesh, false, true);

            fMeshGO.SetMaterial(MaterialUtil.CreateStandardMaterial(this.Color), true);

            // apply orientation
            fMeshGO.SetLocalScale(new Vector3f(Scale, Scale, Scale));
            fMeshGO.SetLocalPosition(fMeshGO.GetLocalPosition() + Translate);
            fMeshGO.SetLocalRotation(Rotate);

            // ignore material changes when we add to GameObjectSet
            fMeshGO.AddComponent <IgnoreMaterialChanges>();

            return(new List <fGameObject>()
            {
                fMeshGO
            });
        }
Ejemplo n.º 8
0
        public static HUDButton CreateMeshClickButton(
            Mesh mesh, Color color, float fMeshScale, Quaternion meshRotation,
            HUDSurface hudSurf, float dx, float dy,
            IGameObjectGenerator addGeometry = null)
        {
            Material mat = (color.a < 1.0f) ?
                           MaterialUtil.CreateTransparentMaterial(color, color.a) :
                           MaterialUtil.CreateStandardMaterial(color);

            HUDButton button = new HUDButton();

            button.Create(mesh, mat, fMeshScale, meshRotation);

            if (addGeometry != null)
            {
                button.AddVisualElements(addGeometry.Generate(), true);
            }
            hudSurf.Place(button, dx, dy);
            return(button);
        }
Ejemplo n.º 9
0
        public static GameObject CreateMeshGO(string name, Mesh mesh,
                                              Material setMaterial = null, bool bCollider = true)
        {
            var gameObj = new GameObject(name);

            gameObj.AddComponent <MeshFilter>();
            gameObj.SetMesh(mesh);
            if (bCollider)
            {
                gameObj.AddComponent(typeof(MeshCollider));
                gameObj.GetComponent <MeshCollider>().enabled = false;
            }
            if (setMaterial)
            {
                (gameObj.AddComponent(typeof(MeshRenderer)) as MeshRenderer).material = setMaterial;
            }
            else
            {
                (gameObj.AddComponent(typeof(MeshRenderer)) as MeshRenderer).material =
                    MaterialUtil.CreateStandardMaterial(Color.red);
            }
            return(gameObj);
        }
Ejemplo n.º 10
0
        // creates a button with a floating primitive in front of the button shape
        public void CreateMeshIconButton(float fRadius, string sMeshPath, Material bgMaterial,
                                         float fMeshScaleFudge)
        {
            Shape = new HUDShape(HUDShapeType.Disc, fRadius);

            fMesh    iconmesh     = null;
            Material meshMaterial = null;

            try {
                iconmesh     = FResources.LoadMesh(sMeshPath);
                meshMaterial = MaterialUtil.CreateStandardVertexColorMaterial(Color.white);
            } catch { }
            if (iconmesh == null)
            {
                iconmesh     = UnityUtil.GetPrimitiveMesh(PrimitiveType.Sphere);
                meshMaterial = MaterialUtil.CreateStandardMaterial(Color.red);
            }

            float fMeshRadius = fRadius * fMeshScaleFudge;

            base.Create(bgMaterial, iconmesh, meshMaterial, fMeshRadius,
                        Frame3f.Identity.Translated(-fMeshRadius * 0.25f, 2).Rotated(-15.0f, 1));
        }
Ejemplo n.º 11
0
        public List <GameObject> Generate()
        {
            var gameObj     = new GameObject("iconMesh");
            var gameObjMesh = (MeshFilter)gameObj.AddComponent(typeof(MeshFilter));

            gameObj.SetMesh((Mesh)Resources.Load(Path, typeof(Mesh)));
            MeshRenderer ren = gameObj.AddComponent <MeshRenderer>();

            ren.material = MaterialUtil.CreateStandardMaterial(this.Color);

            // apply orientation
            gameObjMesh.transform.localScale     = new Vector3(Scale, Scale, Scale);
            gameObjMesh.transform.localPosition += Translate;
            gameObjMesh.transform.localRotation  = Rotate;

            // ignore material changes when we add to GameObjectSet
            gameObj.AddComponent <IgnoreMaterialChanges>();

            return(new List <GameObject>()
            {
                gameObj
            });
        }
Ejemplo n.º 12
0
 public static Material ToUnityMaterial(SOMaterial m)
 {
     if (m.Type == SOMaterial.MaterialType.TextureMap)
     {
         Material unityMat = new Material(Shader.Find("Standard"));
         unityMat.SetName(m.Name);
         unityMat.color = m.RGBColor;
         //if (m.Alpha < 1.0f)
         //    MaterialUtil.SetupMaterialWithBlendMode(unityMat, MaterialUtil.BlendMode.Transparent);
         unityMat.mainTexture = m.MainTexture;
         return(unityMat);
     }
     else if (m.Type == SOMaterial.MaterialType.PerVertexColor)
     {
         return(MaterialUtil.CreateStandardVertexColorMaterial(m.RGBColor));
     }
     else if (m.Type == SOMaterial.MaterialType.TransparentRGBColor)
     {
         return(MaterialUtil.CreateTransparentMaterial(m.RGBColor));
     }
     else if (m.Type == SOMaterial.MaterialType.StandardRGBColor)
     {
         return(MaterialUtil.CreateStandardMaterial(m.RGBColor));
     }
     else if (m.Type == SOMaterial.MaterialType.UnlitRGBColor)
     {
         return(MaterialUtil.CreateFlatMaterial(m.RGBColor));
     }
     else if (m is UnitySOMaterial)
     {
         return((m as UnitySOMaterial).unityMaterial);
     }
     else
     {
         return(MaterialUtil.CreateStandardMaterial(Color.black));
     }
 }
        // Use this for initialization
        public void Start()
        {
            fCursorSpeedNormalization = 1.0f;
            fCurPlaneX      = 0;
            fCurPlaneY      = 0;
            vPlaneCursorPos = Vector3.zero;
            vSceneCursorPos = vPlaneCursorPos;

            CursorDefaultMaterial = MaterialUtil.CreateTransparentMaterial(Color.grey, 0.6f);
            //CursorHitMaterial = MaterialUtil.CreateTransparentMaterial (Color.yellow, 0.8f);
            CursorHitMaterial       = MaterialUtil.CreateStandardMaterial(Color.yellow);
            CursorCapturingMaterial = MaterialUtil.CreateTransparentMaterial(Color.yellow, 0.75f);

            CursorVisualAngleInDegrees = 1.5f;

            standardCursorMesh = MeshGenerators.Create3DArrow(1.0f, 1.0f, 1.0f, 0.5f, 16);
            UnityUtil.TranslateMesh(standardCursorMesh, 0, -2.0f, 0);
            activeToolCursorMesh = MeshGenerators.Create3DArrow(1.0f, 1.0f, 1.0f, 1.0f, 16);
            UnityUtil.TranslateMesh(activeToolCursorMesh, 0, -2.0f, 0);

            Cursor = UnityUtil.CreateMeshGO("cursor", standardCursorMesh, CursorDefaultMaterial);
            Cursor.SetSharedMesh(standardCursorMesh);
            Cursor.transform.localScale    = new Vector3(0.3f, 0.3f, 0.3f);
            Cursor.transform.localRotation = Quaternion.AngleAxis(45.0f, new Vector3(1, 0, 1).normalized);
            MaterialUtil.DisableShadows(Cursor);

            xformObject = GameObject.CreatePrimitive(PrimitiveType.Plane);
            xformObject.SetName("cursor_plane");
            MaterialUtil.DisableShadows(xformObject);
            xformObject.GetComponent <MeshRenderer>().material
                = MaterialUtil.CreateTransparentMaterial(Color.cyan, 0.2f);
            xformObject.GetComponent <MeshRenderer>().enabled = false;

            lastMouseEventTime = FPlatform.RealTime();
            mouseInactiveState = false;
        }
Ejemplo n.º 14
0
        public void Create(FScene parentScene, List <TransformableSO> targets)
        {
            this.parentScene = parentScene;
            this.targets     = targets;

            gizmo = new GameObject("TransformGizmo");

            float fAlpha = 0.5f;

            xMaterial        = MaterialUtil.CreateTransparentMaterial(Color.red, fAlpha);
            yMaterial        = MaterialUtil.CreateTransparentMaterial(Color.green, fAlpha);
            zMaterial        = MaterialUtil.CreateTransparentMaterial(Color.blue, fAlpha);
            xHoverMaterial   = MaterialUtil.CreateStandardMaterial(Color.red);
            yHoverMaterial   = MaterialUtil.CreateStandardMaterial(Color.green);
            zHoverMaterial   = MaterialUtil.CreateStandardMaterial(Color.blue);
            allMaterial      = MaterialUtil.CreateTransparentMaterial(Color.white, fAlpha);
            allHoverMaterial = MaterialUtil.CreateStandardMaterial(Color.white);

            x = AppendMeshGO("x_translate",
                             (Mesh)Resources.Load("transform_gizmo/axis_translate_x", typeof(Mesh)),
                             xMaterial, gizmo);
            Widgets[x] = new AxisTranslationWidget(0)
            {
                RootGameObject    = x, StandardMaterial = xMaterial, HoverMaterial = xHoverMaterial,
                TranslationScaleF = () => { return(1.0f / parentScene.GetSceneScale()); }
            };
            y = AppendMeshGO("y_translate",
                             (Mesh)Resources.Load("transform_gizmo/axis_translate_y", typeof(Mesh)),
                             yMaterial, gizmo);
            Widgets [y] = new AxisTranslationWidget(1)
            {
                RootGameObject    = y, StandardMaterial = yMaterial, HoverMaterial = yHoverMaterial,
                TranslationScaleF = () => { return(1.0f / parentScene.GetSceneScale()); }
            };
            z = AppendMeshGO("z_translate",
                             (Mesh)Resources.Load("transform_gizmo/axis_translate_z", typeof(Mesh)),
                             zMaterial, gizmo);
            Widgets [z] = new AxisTranslationWidget(2)
            {
                RootGameObject    = z, StandardMaterial = zMaterial, HoverMaterial = zHoverMaterial,
                TranslationScaleF = () => { return(1.0f / parentScene.GetSceneScale()); }
            };


            rotate_x = AppendMeshGO("x_rotate",
                                    (Mesh)Resources.Load("transform_gizmo/axisrotate_x", typeof(Mesh)),
                                    xMaterial, gizmo);
            Widgets [rotate_x] = new AxisRotationWidget(0)
            {
                RootGameObject = rotate_x, StandardMaterial = xMaterial, HoverMaterial = xHoverMaterial
            };
            rotate_y = AppendMeshGO("y_rotate",
                                    (Mesh)Resources.Load("transform_gizmo/axisrotate_y", typeof(Mesh)),
                                    yMaterial, gizmo);
            Widgets [rotate_y] = new AxisRotationWidget(1)
            {
                RootGameObject = rotate_y, StandardMaterial = yMaterial, HoverMaterial = yHoverMaterial
            };
            rotate_z = AppendMeshGO("z_rotate",
                                    (Mesh)Resources.Load("transform_gizmo/axisrotate_z", typeof(Mesh)),
                                    zMaterial, gizmo);
            Widgets [rotate_z] = new AxisRotationWidget(2)
            {
                RootGameObject = rotate_z, StandardMaterial = zMaterial, HoverMaterial = zHoverMaterial
            };


            // plane translation widgets
            translate_xy = AppendMeshGO("xy_translate",
                                        (Mesh)Resources.Load("transform_gizmo/plane_translate_xy", typeof(Mesh)),
                                        zMaterial, gizmo);
            Widgets [translate_xy] = new PlaneTranslationWidget(2)
            {
                RootGameObject    = translate_xy, StandardMaterial = zMaterial, HoverMaterial = zHoverMaterial,
                TranslationScaleF = () => { return(1.0f / parentScene.GetSceneScale()); }
            };
            translate_xz = AppendMeshGO("xz_translate",
                                        (Mesh)Resources.Load("transform_gizmo/plane_translate_xz", typeof(Mesh)),
                                        yMaterial, gizmo);
            Widgets [translate_xz] = new PlaneTranslationWidget(1)
            {
                RootGameObject    = translate_xz, StandardMaterial = yMaterial, HoverMaterial = yHoverMaterial,
                TranslationScaleF = () => { return(1.0f / parentScene.GetSceneScale()); }
            };
            translate_yz = AppendMeshGO("yz_translate",
                                        (Mesh)Resources.Load("transform_gizmo/plane_translate_yz", typeof(Mesh)),
                                        xMaterial, gizmo);
            Widgets [translate_yz] = new PlaneTranslationWidget(0)
            {
                RootGameObject    = translate_yz, StandardMaterial = xMaterial, HoverMaterial = xHoverMaterial,
                TranslationScaleF = () => { return(1.0f / parentScene.GetSceneScale()); }
            };


            uniform_scale = AppendMeshGO("uniform_scale",
                                         Resources.Load <Mesh>("transform_gizmo/uniform_scale"), allMaterial, gizmo);
            Widgets[uniform_scale] = new UniformScaleWidget(parentScene.ActiveCamera)
            {
                RootGameObject   = uniform_scale, StandardMaterial = allMaterial, HoverMaterial = allHoverMaterial,
                ScaleMultiplierF = () => { return(1.0f / parentScene.GetSceneScale()); }
            };

            gizmoGeomBounds = UnityUtil.GetGeometryBoundingBox(new List <GameObject>()
            {
                x, y, z, rotate_x, rotate_y, rotate_z, translate_xy, translate_xz, translate_yz, uniform_scale
            });

            // disable shadows on widget components
            foreach (var go in GameObjects)
            {
                MaterialUtil.DisableShadows(go);
            }

            eCurrentFrameMode = FrameType.LocalFrame;
            SetActiveFrame(eCurrentFrameMode);

            SetLayer(FPlatform.WidgetOverlayLayer);

            // seems like possibly this geometry will be shown this frame, before PreRender()
            // is called, which means that on next frame the geometry will pop.
            // So we hide here and show in PreRender
            gizmo.Hide();
        }
Ejemplo n.º 15
0
        public FScene(FContext context)
        {
            this.context = context;

            history      = new ChangeHistory();
            TypeRegistry = new SORegistry();

            vObjects       = new List <SceneObject>();
            vSelected      = new List <SceneObject>();
            vUIElements    = new List <SceneUIElement>();
            vBoundsObjects = new List <fGameObject>();
            ObjectAnimator = new GenericAnimator();
            LinkManager    = new SOLinkManager(this);

            sceneRoot = GameObjectFactory.CreateParentGO("Scene");
            // for animation playbacks
            sceneRoot.AddComponent <SceneAnimator>().Scene = this;
            sceneRoot.AddComponent <UnityPerFrameAnimationBehavior>().Animator = ObjectAnimator;

            scene_objects = GameObjectFactory.CreateParentGO("scene_objects");
            sceneRoot.AddChild(scene_objects, false);

            deleted_objects = GameObjectFactory.CreateParentGO("deleted_objects");
            sceneRoot.AddChild(deleted_objects, false);
            vDeleted = new List <SceneObject>();

            // initialize materials
            DefaultSOMaterial = new SOMaterial()
            {
                Name = "DefaultSO",
                Type = SOMaterial.MaterialType.StandardRGBColor, RGBColor = ColorUtil.StandardBeige
            };
            DefaultCurveSOMaterial = new SOMaterial()
            {
                Name = "DefaultCurveSO",
                Type = SOMaterial.MaterialType.UnlitRGBColor, RGBColor = Colorf.DarkSlateGrey
            };
            DefaultMeshSOMaterial = new SOMaterial()
            {
                Name = "DefaultMeshSO",
                Type = SOMaterial.MaterialType.PerVertexColor, RGBColor = Colorf.White
            };
            NewSOMaterial = new SOMaterial()
            {
                Name = "NewSO",
                Type = SOMaterial.MaterialType.StandardRGBColor, RGBColor = Colorf.CornflowerBlue
            };
            TransparentNewSOMaterial = new SOMaterial()
            {
                Name = "NewSO",
                Type = SOMaterial.MaterialType.TransparentRGBColor, RGBColor = new Colorf(Colorf.CornflowerBlue, 0.5f)
            };
            PivotSOMaterial = new SOMaterial()
            {
                Name = "PivotSO",
                Type = SOMaterial.MaterialType.TransparentRGBColor, RGBColor = ColorUtil.PivotYellow.SetAlpha(0.75f)
            };
            FrameSOMaterial = new SOMaterial()
            {
                Name = "PivotFrame",
                Type = SOMaterial.MaterialType.StandardRGBColor, RGBColor = ColorUtil.DarkGrey
            };

            SelectedMaterial = MaterialUtil.CreateStandardMaterial(ColorUtil.SelectionGold);
            FrameMaterial    = MaterialUtil.CreateStandardMaterial(ColorUtil.DarkGrey);
            PivotMaterial    = MaterialUtil.ToUnityMaterial(PivotSOMaterial);

            defaultPrimitiveType = SOTypes.Cylinder;
        }
Ejemplo n.º 16
0
        public void Create(Cockpit cockpit)
        {
            base.Create();
            this.cockpit = cockpit;

            float fHUDRadius    = 0.7f;
            float fButtonRadius = 0.06f;

            Colorf bgColor     = new Color(0.7f, 0.7f, 1.0f, 0.7f);
            Colorf activeColor = new Colorf(ColorUtil.SelectionGold, 0.7f);

            defaultMaterial = (bgColor.a == 1.0f) ?
                              MaterialUtil.CreateStandardMaterialF(bgColor) : MaterialUtil.CreateTransparentMaterialF(bgColor);
            activeMaterial = (activeColor.a == 1.0f) ?
                             MaterialUtil.CreateStandardMaterialF(activeColor) : MaterialUtil.CreateTransparentMaterialF(activeColor);

            List <toolInfo> toolNames = new List <toolInfo>()
            {
                new toolInfo()
                {
                    identifier = "cancel", sMeshPath = "tool_icons/cancel", fMeshScaleFudge = 1.2f
                },
                new toolInfo()
                {
                    identifier = SnapDrawPrimitivesTool.Identifier, sMeshPath = "tool_icons/draw_primitive", fMeshScaleFudge = 1.2f
                },
                new toolInfo()
                {
                    identifier = DrawTubeTool.Identifier, sMeshPath = "tool_icons/draw_tube", fMeshScaleFudge = 1.2f
                },
                new toolInfo()
                {
                    identifier = DrawCurveTool.Identifier, sMeshPath = "tool_icons/draw_curve", fMeshScaleFudge = 1.2f
                },
                new toolInfo()
                {
                    identifier = DrawSurfaceCurveTool.Identifier, sMeshPath = "tool_icons/draw_surface_curve", fMeshScaleFudge = 1.2f
                },
                new toolInfo()
                {
                    identifier = RevolveTool.Identifier, sMeshPath = "tool_icons/revolve", fMeshScaleFudge = 1.2f
                },
                new toolInfo()
                {
                    identifier = TwoPointMeasureTool.Identifier, sMeshPath = "tool_icons/measure", fMeshScaleFudge = 1.2f
                },
                new toolInfo()
                {
                    identifier = SculptCurveTool.Identifier, sMeshPath = "tool_icons/sculpt_curve", fMeshScaleFudge = 1.2f
                },
                new toolInfo()
                {
                    identifier = PlaneCutTool.Identifier, sMeshPath = "tool_icons/plane_cut", fMeshScaleFudge = 1.2f
                }
            };


            float        fRight     = -43.0f;
            float        df         = -11.0f;
            List <float> AngleSteps = new List <float>()
            {
                fRight, fRight + df, fRight + 2 * df
            };
            float fVertStep = 11.0f;
            float fTop      = 0.0f;

            int ri = 0, ci = 0;

            toolButtons    = new List <ActivateToolButton>();
            toolButtonInfo = new List <toolInfo>();
            foreach (toolInfo t in toolNames)
            {
                float fX = AngleSteps[ci++];
                float fY = fTop - (float)ri * fVertStep;
                if (ci == AngleSteps.Count)
                {
                    ci = 0; ri++;
                }

                var button = add_tool_button(cockpit, t.identifier, fHUDRadius,
                                             fX, fY, fButtonRadius, t);
                AddChild(button);
                toolButtons.Add(button);

                toolInfo ti = new toolInfo();
                ti        = t;
                ti.button = button;
                toolButtonInfo.Add(ti);
            }


            // build indicators
            string[] paths = { "tool_icons/star_green", "tool_icons/star_red" };
            for (int k = 0; k < 2; ++k)
            {
                Mesh     iconMesh     = null;
                Material iconMaterial = null;
                try {
                    iconMesh     = Resources.Load <Mesh>(paths[k]);
                    iconMaterial = MaterialUtil.CreateStandardVertexColorMaterial(Color.white);
                } catch { }
                if (iconMesh == null)
                {
                    iconMesh     = UnityUtil.GetPrimitiveMesh(PrimitiveType.Sphere);
                    iconMaterial = MaterialUtil.CreateStandardMaterial((k == 0) ? Color.green : Color.red);
                }
                indicator[k]      = GameObject.CreatePrimitive(PrimitiveType.Sphere);
                indicator[k].name = (k == 0) ? "left_tool_star" : "right_tool_star";
                Component.Destroy(indicator[k].GetComponent <Collider>());
                indicator[k].SetMesh(iconMesh);
                indicator[k].GetComponent <Renderer>().material = iconMaterial;


                // have to add to some button because we need them to be in GO tree
                //  when we do AddChild() on cockpit...that sets up layer, size, etc
                indicatorButton[k] = toolButtons[0];
                indicator[k].transform.localScale     = fIndicatorSize * Vector3.one;
                indicator[k].transform.localPosition +=
                    fIndicatorShiftXY * (Vector3.up + Vector3.right * ((k == 0) ? -1 : 1)) - fIndicatorShiftZ * Vector3.forward;
                indicatorButton[k].AppendNewGO(indicator[k], indicatorButton[k].RootGameObject, false);
                indicator[k].Hide();
            }


            // listen for changes
            cockpit.Context.ToolManager.OnToolActivationChanged += on_tool_changed;
        }
Ejemplo n.º 17
0
        public void Create(Cockpit cockpit)
        {
            base.Create();

            float fHUDRadius    = 0.75f;
            float fButtonRadius = 0.06f;

            Color bgColor = new Color(0.7f, 0.7f, 1.0f, 0.7f);

            Material bgMaterial = (bgColor.a == 1.0f) ?
                                  MaterialUtil.CreateStandardMaterial(bgColor) : MaterialUtil.CreateTransparentMaterial(bgColor);

            List <SOMaterial> materials = new List <SOMaterial>()
            {
                SOMaterial.CreateStandard("default", ColorUtil.StandardBeige),
                SOMaterial.CreateStandard("standard_white", Colorf.VideoWhite),
                SOMaterial.CreateStandard("standard_black", Colorf.VideoBlack),
                SOMaterial.CreateStandard("middle_grey", new Colorf(0.5f)),

                SOMaterial.CreateStandard("standard_green", Colorf.VideoGreen),
                SOMaterial.CreateStandard("forest_green", Colorf.ForestGreen),
                SOMaterial.CreateStandard("teal", Colorf.Teal),
                SOMaterial.CreateStandard("light_green", Colorf.LightGreen),

                SOMaterial.CreateStandard("standard_blue", Colorf.VideoBlue),
                SOMaterial.CreateStandard("navy", Colorf.Navy),
                SOMaterial.CreateStandard("cornflower_blue", Colorf.CornflowerBlue),
                SOMaterial.CreateStandard("light_steel_blue", Colorf.LightSteelBlue),

                SOMaterial.CreateStandard("standard_red", Colorf.VideoRed),
                SOMaterial.CreateStandard("fire_red", Colorf.FireBrick),
                SOMaterial.CreateStandard("hot_pink", Colorf.HotPink),
                SOMaterial.CreateStandard("light_pink", Colorf.LightPink),


                SOMaterial.CreateStandard("standard_yellow", Colorf.VideoYellow),
                SOMaterial.CreateStandard("standard_orange", Colorf.Orange),
                SOMaterial.CreateStandard("saddle_brown", Colorf.SaddleBrown),
                SOMaterial.CreateStandard("wheat", Colorf.Wheat),


                SOMaterial.CreateStandard("standard_cyan", Colorf.VideoCyan),
                SOMaterial.CreateStandard("standard_magenta", Colorf.VideoMagenta),
                SOMaterial.CreateStandard("silver", Colorf.Silver),
                SOMaterial.CreateStandard("dark_slate_grey", Colorf.DarkSlateGrey)
            };


            float        fRight     = -41.0f;
            float        df         = -7.25f;
            float        df_fudge   = -0.2f;
            List <float> AngleSteps = new List <float>()
            {
                fRight, fRight + df, fRight + 2 * df, fRight + 3 * df
            };
            float fVertStep = 6.75f;
            float fTop      = 2.0f;

            int ri = 0, ci = 0;

            foreach (SOMaterial m in materials)
            {
                float fXFudge = df_fudge * (float)ri * (float)ci;
                float fX      = AngleSteps[ci++] + fXFudge;
                float fY      = fTop - (float)ri * fVertStep;
                if (ci == AngleSteps.Count)
                {
                    ci = 0; ri++;
                }

                var button = add_material_button(cockpit, m.Name, fHUDRadius,
                                                 fX, fY, fButtonRadius, bgMaterial, m);
                AddChild(button);
                buttons.Add(button);
            }


            fMesh    iconMesh     = null;
            Material iconMaterial = null;

            try {
                iconMesh     = new fMesh(Resources.Load <Mesh>("tool_icons/star"));
                iconMaterial = MaterialUtil.CreateStandardVertexColorMaterial(Color.white);
            } catch { }
            if (iconMesh == null)
            {
                iconMesh     = new fMesh(UnityUtil.GetPrimitiveMesh(PrimitiveType.Sphere));
                iconMaterial = MaterialUtil.CreateStandardMaterial(Color.yellow);
            }
            indicatorGO = new fMeshGameObject(iconMesh);
            indicatorGO.SetName("active_star");
            indicatorGO.SetMesh(iconMesh);
            indicatorGO.SetMaterial(iconMaterial);
            indicatorGO.SetLocalScale(fIndicatorSize * Vector3f.One);
            indicatorGO.SetLocalPosition(indicatorGO.GetLocalPosition() +
                                         fIndicatorShift * (Vector3f.AxisY - 4 * Vector3f.AxisZ + Vector3f.AxisX));

            indicatorButton = buttons[0];   // this is default material
            indicatorButton.AppendNewGO(indicatorGO, indicatorButton.RootGameObject, false);
        }
Ejemplo n.º 18
0
        void InitializeSpatialInput()
        {
            Left  = new SpatialDevice();
            Right = new SpatialDevice();

            Left.CursorDefaultMaterial   = MaterialUtil.CreateTransparentMaterial(ColorUtil.ForestGreen, 0.6f);
            Left.CursorHitMaterial       = MaterialUtil.CreateStandardMaterial(ColorUtil.SelectionGold);
            Left.CursorCapturingMaterial = MaterialUtil.CreateTransparentMaterial(ColorUtil.SelectionGold, 0.75f);
            Left.HandMaterial            = MaterialUtil.CreateTransparentMaterial(ColorUtil.ForestGreen, 0.3f);

            Right.CursorDefaultMaterial   = MaterialUtil.CreateTransparentMaterial(Colorf.DarkRed, 0.6f);
            Right.CursorHitMaterial       = MaterialUtil.CreateStandardMaterial(ColorUtil.PivotYellow);
            Right.CursorCapturingMaterial = MaterialUtil.CreateTransparentMaterial(ColorUtil.PivotYellow, 0.75f);
            Right.HandMaterial            = MaterialUtil.CreateTransparentMaterial(ColorUtil.CgRed, 0.3f);

            CursorVisualAngleInDegrees = 1.5f;

            standardCursorMesh = MeshGenerators.Create3DArrow(1.0f, 1.0f, 1.0f, 0.5f, 16);
            UnityUtil.TranslateMesh(standardCursorMesh, 0, -2.0f, 0);
            activeToolCursorMesh = MeshGenerators.Create3DArrow(1.0f, 1.0f, 1.0f, 1.0f, 16);
            UnityUtil.TranslateMesh(activeToolCursorMesh, 0, -2.0f, 0);

            Left.Cursor = UnityUtil.CreateMeshGO("left_cursor", standardCursorMesh, Left.CursorDefaultMaterial);
            Left.Cursor.transform.localScale    = 0.3f * Vector3.one;
            Left.Cursor.transform.localRotation = Quaternion.AngleAxis(45.0f, new Vector3(1, 0, 1).normalized);
            MaterialUtil.DisableShadows(Left.Cursor);
            Left.Cursor.SetLayer(FPlatform.CursorLayer);
            Left.SmoothedHandFrame = Frame3f.Identity;

            var leftHandMesh = MeshGenerators.Create3DArrow(1.0f, 1.0f, 1.0f, 0.5f, 16);

            Left.Hand = UnityUtil.CreateMeshGO("left_hand", leftHandMesh, Left.HandMaterial);
            UnityUtil.TranslateMesh(leftHandMesh, 0, -1.0f, 0);
            Left.Hand.transform.localScale = 0.1f * Vector3.one;
            Left.Hand.transform.rotation   = Quaternion.FromToRotation(Vector3.up, Vector3.forward);
            Left.Hand.SetLayer(FPlatform.HUDLayer);

            Left.Laser    = new GameObject("left_laser");
            Left.LaserRen = Left.Laser.AddComponent <LineRenderer>();
            Left.LaserRen.SetPositions(new Vector3[2] {
                Vector3.zero, 100 * Vector3.up
            });
            Left.LaserRen.startWidth = Left.LaserRen.endWidth = 0.01f;
            Left.LaserRen.material   = MaterialUtil.CreateFlatMaterial(ColorUtil.ForestGreen, 0.2f);
            Left.Laser.SetLayer(FPlatform.CursorLayer);
            Left.Laser.transform.parent = Left.Cursor.transform;

            Right.Cursor = UnityUtil.CreateMeshGO("right_cursor", standardCursorMesh, Right.CursorDefaultMaterial);
            Right.Cursor.transform.localScale    = 0.3f * Vector3.one;
            Right.Cursor.transform.localRotation = Quaternion.AngleAxis(45.0f, new Vector3(1, 0, 1).normalized);
            MaterialUtil.DisableShadows(Right.Cursor);
            Right.Cursor.SetLayer(FPlatform.CursorLayer);
            Right.SmoothedHandFrame = Frame3f.Identity;

            var rightHandMesh = MeshGenerators.Create3DArrow(1.0f, 1.0f, 1.0f, 0.5f, 16);

            Right.Hand = UnityUtil.CreateMeshGO("right_hand", rightHandMesh, Right.HandMaterial);
            UnityUtil.TranslateMesh(rightHandMesh, 0, -1.0f, 0);
            Right.Hand.transform.localScale = 0.1f * Vector3.one;
            Right.Hand.transform.rotation   = Quaternion.FromToRotation(Vector3.up, Vector3.forward);
            Right.Hand.SetLayer(FPlatform.HUDLayer);

            Right.Laser    = new GameObject("right_laser");
            Right.LaserRen = Right.Laser.AddComponent <LineRenderer>();
            Right.LaserRen.SetPositions(new Vector3[2] {
                Vector3.zero, 100 * Vector3.up
            });
            Right.LaserRen.startWidth = Right.LaserRen.endWidth = 0.01f;
            Right.LaserRen.material   = MaterialUtil.CreateFlatMaterial(ColorUtil.CgRed, 0.2f);
            Right.Laser.SetLayer(FPlatform.CursorLayer);
            Right.Laser.transform.parent = Right.Cursor.transform;

            spatialInputInitialized = true;
        }
Ejemplo n.º 19
0
        public void Create(Cockpit cockpit)
        {
            base.Create();

            float    fHUDRadius    = 0.7f;
            float    fButtonRadius = 0.08f;
            Color    bgColor       = new Color(0.7f, 0.7f, 1.0f, 0.7f);
            Material bgMaterial    = (bgColor.a == 1.0f) ?
                                     MaterialUtil.CreateStandardMaterial(bgColor) : MaterialUtil.CreateTransparentMaterial(bgColor);
            Material primMaterial = MaterialUtil.CreateStandardMaterial(Color.yellow);


            var addCylinderButton = add_primitive_button(cockpit, "addCylinder", fHUDRadius, -45.0f, 0.0f,
                                                         PrimitiveType.Cylinder, 0.7f, bgMaterial, primMaterial,
                                                         () => {
                return(new CylinderSO().Create(cockpit.Scene.DefaultSOMaterial));
            });

            AddChild(addCylinderButton);
            buttons.Add(addCylinderButton);
            buttonTypes[addCylinderButton] = SOTypes.Cylinder;


            var addBoxButton = add_primitive_button(cockpit, "addBox", fHUDRadius, -45.0f, -15.0f,
                                                    PrimitiveType.Cube, 0.7f, bgMaterial, primMaterial,
                                                    () => {
                return(new BoxSO().Create(cockpit.Scene.DefaultSOMaterial));
            });

            AddChild(addBoxButton);
            buttons.Add(addBoxButton);
            buttonTypes[addBoxButton] = SOTypes.Box;


            var addSphereButton = add_primitive_button(cockpit, "addSphere", fHUDRadius, -45.0f, -30.0f,
                                                       PrimitiveType.Sphere, 0.85f, bgMaterial, primMaterial,
                                                       () => {
                return(new SphereSO().Create(cockpit.Scene.DefaultSOMaterial));
            });

            AddChild(addSphereButton);
            buttons.Add(addSphereButton);
            buttonTypes[addSphereButton] = SOTypes.Sphere;


            var addPivotButton = add_primitive_button(cockpit, "addPivot", fHUDRadius, -60.0f, 0.0f,
                                                      PrimitiveType.Sphere, 0.7f, bgMaterial, primMaterial,
                                                      () => {
                return(new PivotSO().Create(cockpit.Scene.PivotSOMaterial, cockpit.Scene.FrameSOMaterial,
                                            FPlatform.WidgetOverlayLayer));
            },
                                                      new pivotIconGenerator()
            {
                SphereMaterial = cockpit.Scene.SelectedMaterial,
                FrameMaterial  = cockpit.Scene.FrameMaterial, PrimSize = fButtonRadius * 0.7f
            });

            AddChild(addPivotButton);
            buttons.Add(addPivotButton);
            buttonTypes[addPivotButton] = SOTypes.Pivot;


            //var addCurveButton = add_curve_button(cockpit, "addCurve", fHUDRadius, -60.0f, -15.0f,
            //    bgMaterial, primMaterial,
            //    () => {
            //        return new PolyCurveSO().Create(cockpit.ActiveScene.DefaultSOMaterial);
            //    });
            //AddChild(addCurveButton);


            /*
             *          HUDButton addBunnyButton = HUDBuilder.CreateGeometryIconClickButton(
             *              new HUDShape(HUDShapeType.Disc, fButtonRadius ),
             *              fHUDRadius, -45.0f, -30.0f, bgColor,
             *              new meshIconGenerator() { MeshPath = "icon_meshes/bunny_1k", UseMaterial = primMaterial, UseSize = fButtonRadius * 0.7f });
             *          addBunnyButton.Name = "addBunnyButton";
             *          addBunnyButton.OnClicked += (s, e) => {
             *              // TODO add existing mesh to scene
             *              cockpit.Parent.Scene.AddBox();
             *          };
             *          cockpit.AddUIElement(addBunnyButton, true);
             */



            // initialize selected-primitive indicator icon
            fMesh     iconMesh     = null;
            fMaterial iconMaterial = null;

            try {
                iconMesh     = new fMesh(Resources.Load <Mesh>("tool_icons/star"));
                iconMaterial = MaterialUtil.CreateStandardVertexColorMaterialF(Color.white);
            } catch { }
            if (iconMesh == null)
            {
                iconMesh     = new fMesh(UnityUtil.GetPrimitiveMesh(PrimitiveType.Sphere));
                iconMaterial = MaterialUtil.CreateStandardMaterialF(Color.yellow);
            }
            indicatorGO = new fMeshGameObject(iconMesh);
            indicatorGO.SetName("active_star");
            indicatorGO.SetMesh(iconMesh);
            indicatorGO.SetMaterial(iconMaterial);
            indicatorGO.SetLocalScale(fIndicatorSize * Vector3f.One);
            indicatorGO.SetLocalPosition(indicatorGO.GetLocalPosition() +
                                         fIndicatorShift * (Vector3f.AxisY - 1 * Vector3f.AxisZ + Vector3f.AxisX));

            indicatorButton = buttons[0];   // this is default material
            indicatorButton.AppendNewGO(indicatorGO, indicatorButton.RootGameObject, false);
        }
Ejemplo n.º 20
0
        public static fMaterial ToMaterialf(SOMaterial m)
        {
            fMaterial unityMat = null;

            if (m.Type == SOMaterial.MaterialType.TextureMap)
            {
                unityMat       = new Material(Shader.Find("Standard"));
                unityMat.name  = m.Name;
                unityMat.color = m.RGBColor;
                //if (m.Alpha < 1.0f)
                //    MaterialUtil.SetupMaterialWithBlendMode(unityMat, MaterialUtil.BlendMode.Transparent);
                unityMat.mainTexture = m.MainTexture;
            }
            else if (m.Type == SOMaterial.MaterialType.PerVertexColor)
            {
                unityMat              = MaterialUtil.CreateStandardVertexColorMaterial(m.RGBColor);
                unityMat.renderQueue += m.RenderQueueShift;
                unityMat.SetInt("_Cull", (int)m.CullingMode);
            }
            else if (m.Type == SOMaterial.MaterialType.FlatShadedPerVertexColor)
            {
                unityMat              = MaterialUtil.CreateFlatShadedVertexColorMaterialF(m.RGBColor);
                unityMat.renderQueue += m.RenderQueueShift;
                unityMat.SetInt("_Cull", (int)m.CullingMode);
            }
            else if (m.Type == SOMaterial.MaterialType.TransparentRGBColor)
            {
                unityMat              = MaterialUtil.CreateTransparentMaterial(m.RGBColor);
                unityMat.renderQueue += m.RenderQueueShift;
            }
            else if (m.Type == SOMaterial.MaterialType.StandardRGBColor)
            {
                unityMat              = MaterialUtil.CreateStandardMaterial(m.RGBColor);
                unityMat.renderQueue += m.RenderQueueShift;
            }
            else if (m.Type == SOMaterial.MaterialType.UnlitRGBColor)
            {
                unityMat              = MaterialUtil.CreateFlatMaterial(m.RGBColor);
                unityMat.renderQueue += m.RenderQueueShift;
            }
            else if (m.Type == SOMaterial.MaterialType.DepthWriteOnly)
            {
                unityMat              = MaterialUtil.CreateDepthWriteOnly();
                unityMat.renderQueue += m.RenderQueueShift;
            }
            else if (m.Type == SOMaterial.MaterialType.StandardMesh)
            {
                fMeshMaterial meshMat = MaterialUtil.CreateStandardMeshMaterial(m.RGBColor);
                meshMat.renderQueue += m.RenderQueueShift;
                if (m is SOMeshMaterial)
                {
                    meshMat.InitializeFromSOMaterial(m as SOMeshMaterial);
                }
                unityMat = meshMat;
            }
            else if (m is UnitySOMeshMaterial)
            {
                unityMat = (m as UnitySOMeshMaterial).meshMaterial;
            }
            else if (m is UnitySOMaterial)
            {
                unityMat = (m as UnitySOMaterial).unityMaterial;
            }
            else
            {
                unityMat = MaterialUtil.CreateStandardMaterial(Color.black);
            }

            if ((m.Hints & SOMaterial.HintFlags.UseTransparentPass) != 0)
            {
                SetupMaterialWithBlendMode(unityMat, BlendMode.Transparent);
            }

            if (m.MaterialCustomizerF != null)
            {
                m.MaterialCustomizerF(unityMat);
            }

            return(unityMat);
        }