Example #1
0
        private Mesh GetMeshFromObject(Object obj)
        {
            SplineMesh user = (SplineMesh)target;

            if (!(obj is GameObject))
            {
                return(null);
            }
            GameObject gameObj    = (GameObject)obj;
            MeshFilter filter     = gameObj.GetComponent <MeshFilter>();
            Mesh       returnMesh = null;

            if (filter != null && filter.sharedMesh != null)
            {
                returnMesh = filter.sharedMesh;
            }
            MeshRenderer rend = user.GetComponent <MeshRenderer>();

            if (rend == null)
            {
                return(returnMesh);
            }
            MeshRenderer meshRend = gameObj.GetComponent <MeshRenderer>();

            if (meshRend == null)
            {
                return(returnMesh);
            }
            bool found = false;

            for (int i = 0; i < meshRend.sharedMaterials.Length; i++)
            {
                for (int j = 0; j < rend.sharedMaterials.Length; j++)
                {
                    if (meshRend.sharedMaterials[i] == rend.sharedMaterials[j])
                    {
                        found = true;
                        break;
                    }
                }
            }
            if (!found)
            {
                if (EditorUtility.DisplayDialog("New Materials", "The added object has one or more materials which are not refrenced by the renderer. Would you like to add them?", "Yes", "No"))
                {
                    if (rend.sharedMaterial == AssetDatabase.GetBuiltinExtraResource <Material>("Default-Diffuse.mat"))
                    {
                        if (EditorUtility.DisplayDialog("Replace Material", "The renderer is using the default material. Replace it?", "Yes", "No"))
                        {
                            rend.sharedMaterials = new Material[0];
                        }
                    }
                    for (int i = 0; i < meshRend.sharedMaterials.Length; i++)
                    {
                        AddMaterial(rend, meshRend.sharedMaterials[i]);
                    }
                }
            }

            return(returnMesh);
        }
Example #2
0
        public void Update()
        {
            if (mFinished)
            {
                return;
            }

            if (ConnectionPathMarker == null || ConnectionPathOrigin == null || PathAlterAction == MarkerAlterAction.None)
            {
                Finish();
                return;
            }

            if (Vector3.Distance(ConnectionPathMarker.worlditem.tr.position, ConnectionPathOrigin.worlditem.tr.position) > Globals.PathOriginTriggerRadius)
            {
                Finish();
                return;
            }

            OriginDistanceToPlayer = Vector3.Distance(Player.Local.Position, ConnectionPathOrigin.worlditem.tr.position);
            FocusOffset            = Player.Local.Focus.FocusOffset(ConnectionPathOrigin.worlditem.tr.position);

            if (!IsActive)
            {
                spline.enabled   = false;
                PathMesh.enabled = false;
                PathMesh.GetComponent <Renderer>().enabled = false;
                PathMesh.updateMode = SplineMesh.UpdateMode.DontUpdate;
                return;
            }

            spline.enabled   = true;
            PathMesh.enabled = true;
            PathMesh.GetComponent <Renderer>().enabled = true;
            PathMesh.updateMode = SplineMesh.UpdateMode.EveryFrame;

            SplineNode1.position = ConnectionPathMarker.worlditem.tr.position;
            SplineNode2.position = ConnectionPathOrigin.worlditem.tr.position;

            switch (PathAlterAction)
            {
            case MarkerAlterAction.None:
            default:
                break;

            case MarkerAlterAction.AppendToPath:
                CurrentColor = Color.blue;
                break;

            case MarkerAlterAction.CreateBranch:
                CurrentColor = Color.green;
                break;

            case MarkerAlterAction.CreatePath:
                CurrentColor = Color.red;
                break;

            case MarkerAlterAction.CreatePathAndBranch:
                CurrentColor = Color.yellow;
                break;
            }

            PathMesh.GetComponent <Renderer>().material.SetColor("_TintColor", CurrentColor);
        }