public void OnSceneGUI()
    {
        //Coloring SmartZones
        Handles.color = new Color(1, 0, 0, 0.1f);
        LifeSceneParameters self = (target as LifeSceneParameters);
        //smartZone = GameObject.Find("SmartZone");
        //float radius = self.GetComponentInChildren<SphereCollider>().radius;
        //float radius = GameObject.Find("SmartZone").GetComponent<SphereCollider>().radius;
        float radius = 5;
        float rangex = 5;
        float rangez = 5;

        if (self.GetComponent <SphereCollider>() != null)
        {
            radius = (self.collider as SphereCollider).radius;

            float radiusScale = Mathf.Max(Mathf.Abs(self.transform.lossyScale.x), Mathf.Max(Mathf.Abs(self.transform.lossyScale.y), Mathf.Abs(self.transform.lossyScale.z)));
            radius *= radiusScale;

            Handles.DrawSolidDisc(self.transform.position, Vector3.up, radius);
            Handles.color = Color.red;

            Vector3 vPos;

            vPos = Handles.FreeMoveHandle(self.transform.position + new Vector3(radius, 0, 0),
                                          Quaternion.identity,
                                          HandleUtility.GetHandleSize(self.transform.position + new Vector3(radius, 0, 0)) * .05f,
                                          Vector3.one,
                                          Handles.DotCap);
            radius = (vPos - self.transform.position).x;

            vPos = Handles.FreeMoveHandle(self.transform.position + new Vector3(-radius, 0, 0),
                                          Quaternion.identity,
                                          HandleUtility.GetHandleSize(self.transform.position + new Vector3(-radius, 0, 0)) * .05f,
                                          Vector3.one,
                                          Handles.DotCap);
            radius = Mathf.Abs((vPos - self.transform.position).x);

            vPos = Handles.FreeMoveHandle(self.transform.position + new Vector3(0, 0, radius),
                                          Quaternion.identity,
                                          HandleUtility.GetHandleSize(self.transform.position + new Vector3(0, 0, radius)) * .05f,
                                          Vector3.one,
                                          Handles.DotCap);
            radius = (vPos - self.transform.position).z;

            vPos = Handles.FreeMoveHandle(self.transform.position + new Vector3(0, 0, -radius),
                                          Quaternion.identity,
                                          HandleUtility.GetHandleSize(self.transform.position + new Vector3(0, 0, -radius)) * .05f,
                                          Vector3.one,
                                          Handles.DotCap);
            radius = Mathf.Abs((vPos - self.transform.position).z);

            radius = Mathf.Max(0, radius);
            //smartZone.GetComponent<SphereCollider>().radius = radius;
            //self.GetComponentInChildren<SphereCollider>().radius = radius;
            (self.collider as SphereCollider).radius = radius / radiusScale;
            //GameObject.Find("SmartZone").GetComponent<SphereCollider>().radius = radius;
        }

        if (self.GetComponent <BoxCollider>() != null)
        {
            BoxCollider collider = self.GetComponent <BoxCollider>();
            Vector3     center   = collider.center;
            rangex = collider.size.x;
            rangez = collider.size.z;

            Vector3[] verts = new Vector3[] {
                new Vector3(-rangex / 2, 0, -rangez / 2),
                new Vector3(-rangex / 2, 0, rangez / 2),
                new Vector3(rangex / 2, 0, rangez / 2),
                new Vector3(rangex / 2, 0, -rangez / 2)
            };
            Vector3[] vertsTrans = new Vector3[verts.Length];

            for (int i = 0; i < verts.Length; ++i)
            {
                vertsTrans[i] = self.transform.TransformPoint(center + verts[i]);
            }

            Handles.DrawSolidRectangleWithOutline(vertsTrans, Color.red, Color.green);
            Handles.color = Color.red;

            Vector3 vPos;
            vPos = Handles.FreeMoveHandle(self.transform.TransformPoint(new Vector3(rangex / 2, 0, 0)),
                                          Quaternion.identity,
                                          HandleUtility.GetHandleSize(self.transform.TransformPoint(new Vector3(rangex / 2, 0, 0))) * .05f,
                                          Vector3.one,
                                          Handles.DotCap);
            rangex = self.transform.InverseTransformPoint(vPos).x *2f;

            vPos = Handles.FreeMoveHandle(self.transform.TransformPoint(new Vector3(-rangex / 2, 0, 0)),
                                          Quaternion.identity,
                                          HandleUtility.GetHandleSize(self.transform.TransformPoint(new Vector3(-rangex / 2, 0, 0))) * .05f,
                                          Vector3.one,
                                          Handles.DotCap);
            rangex = Mathf.Abs(self.transform.InverseTransformPoint(vPos).x *2f);

            vPos = Handles.FreeMoveHandle(self.transform.TransformPoint(new Vector3(0, 0, rangez / 2)),
                                          Quaternion.identity,
                                          HandleUtility.GetHandleSize(self.transform.TransformPoint(new Vector3(0, 0, rangez / 2))) * .05f,
                                          Vector3.one,
                                          Handles.DotCap);
            rangez = self.transform.InverseTransformPoint(vPos).z * 2f;

            vPos = Handles.FreeMoveHandle(self.transform.TransformPoint(new Vector3(0, 0, -rangez / 2)),
                                          Quaternion.identity,
                                          HandleUtility.GetHandleSize(self.transform.TransformPoint(new Vector3(0, 0, -rangez / 2))) * .05f,
                                          Vector3.one,
                                          Handles.DotCap);
            rangez = Mathf.Abs(self.transform.InverseTransformPoint(vPos).z * 2f);


            rangex = Mathf.Max(0, rangex);
            rangez = Mathf.Max(0, rangez);

            (self.collider as BoxCollider).size = new Vector3(rangex, collider.size.y, rangez);
        }
    }
示例#2
0
    void Create()
    {
        lifescenes = GameObject.Find("LifeScenes");
        if(lifescenes == null)
            lifescenes = new GameObject("LifeScenes");

        if (lifescenes.transform.FindChild(Wname) == null)
        {
            if (PrefabLS != null)
            {
                lifescene = Instantiate(PrefabLS) as GameObject;
                lifescene.name = Wname;
            }
            else
                lifescene = new GameObject(Wname);
            lifescene.transform.parent = lifescenes.transform;
            lifescene.transform.position = posLS;
            AddTag("LifeScene");
            lifescene.tag = "LifeScene";
            if (lifescene.transform.FindChild("3DAssets") == null)
            {
                assetO = new GameObject("3DAssets");
                assetO.transform.parent = lifescene.transform;
            }
            else
                assetO = lifescene.transform.FindChild("3DAssets").gameObject;

            for (int i = 0; i < PrefabLSs1.Count; i++)
            {
                if (PrefabLSs1[i] != null)
                {
                    Asset.Add(Instantiate(PrefabLSs1[i]) as GameObject);
                    Asset[i].transform.parent = assetO.transform;
                    Asset[i].transform.position = posLS;
                    string nameA = Asset[i].name;
                    if (nameA.Contains("(Clone)"))
                        nameA = nameA.Replace("(Clone)", "");
                    Asset[i].name = Wname + "_" + nameA;
                }
            }
            if (idCollider == 0)
            {
                if (lifescene.GetComponent("BoxCollider") != null)
                    DestroyImmediate(lifescene.GetComponent("BoxCollider"));
                if (lifescene.GetComponent("SphereCollider") == null)
                    zoneS = lifescene.AddComponent("SphereCollider") as SphereCollider;
                else
                    zoneS = lifescene.GetComponent("SphereCollider") as SphereCollider;
                zoneS.radius = 5;
                zoneS.isTrigger = true;
            }
            if (idCollider == 1)
            {
                if (lifescene.GetComponent("SphereCollider") != null)
                    DestroyImmediate(lifescene.GetComponent("SphereCollider"));
                if (lifescene.GetComponent("BoxCollider") == null)
                    zoneB = lifescene.AddComponent("BoxCollider") as BoxCollider;
                else
                    zoneB = lifescene.GetComponent("BoxCollider") as BoxCollider;
                Vector3 size = new Vector3(5f, 5f, 7f);
                zoneB.size = size;
                zoneB.isTrigger = true;
            }
            if (lifescene.GetComponent("Entity") == null)
                entity = lifescene.AddComponent("Entity") as Entity;
            else
                entity = lifescene.GetComponent("Entity") as Entity;
            entity.prototype = Pname;
            if (lifescene.GetComponent("LifeSceneParameters") == null)
                LSP = lifescene.AddComponent("LifeSceneParameters") as LifeSceneParameters;
            else
                LSP = lifescene.GetComponent("LifeSceneParameters") as LifeSceneParameters;
            LSP.Priority = priority;

            rootObjects.Clear();
            foreach (GameObject obj in UnityEngine.Object.FindObjectsOfType(typeof(GameObject)))
            {
                if (obj.transform.parent == null)
                {
                    rootObjects.Add(obj);
                }
            }

            foreach (GameObject obj in rootObjects)
            {
                if (obj.GetComponent<Simulation>() != null)
                {
                    if (obj.GetComponent("Initialisation") == null)
                        obj.AddComponent("Initialisation");
                }
            }

            if (Wname != "" && Wname != " ")
            {
                EditorGUIUtility.PingObject(lifescene);
                Selection.activeGameObject = lifescene;

                this.Close();
                Selection.activeGameObject.GetComponent<LifeSceneParameters>();
            }
        } else
            Debug.LogWarning("The name of the LifeScene already exists");
    }
示例#3
0
    void Create()
    {
        lifescenes = GameObject.Find("LifeScenes");
        if (lifescenes == null)
        {
            lifescenes = new GameObject("LifeScenes");
        }

        if (lifescenes.transform.FindChild(Wname) == null)
        {
            if (PrefabLS != null)
            {
                lifescene      = Instantiate(PrefabLS) as GameObject;
                lifescene.name = Wname;
            }
            else
            {
                lifescene = new GameObject(Wname);
            }
            lifescene.transform.parent   = lifescenes.transform;
            lifescene.transform.position = posLS;
            AddTag("LifeScene");
            lifescene.tag = "LifeScene";
            if (lifescene.transform.FindChild("3DAssets") == null)
            {
                assetO = new GameObject("3DAssets");
                assetO.transform.parent = lifescene.transform;
            }
            else
            {
                assetO = lifescene.transform.FindChild("3DAssets").gameObject;
            }

            for (int i = 0; i < PrefabLSs1.Count; i++)
            {
                if (PrefabLSs1[i] != null)
                {
                    Asset.Add(Instantiate(PrefabLSs1[i]) as GameObject);
                    Asset[i].transform.parent   = assetO.transform;
                    Asset[i].transform.position = posLS;
                    string nameA = Asset[i].name;
                    if (nameA.Contains("(Clone)"))
                    {
                        nameA = nameA.Replace("(Clone)", "");
                    }
                    Asset[i].name = Wname + "_" + nameA;
                }
            }
            if (idCollider == 0)
            {
                if (lifescene.GetComponent("BoxCollider") != null)
                {
                    DestroyImmediate(lifescene.GetComponent("BoxCollider"));
                }
                if (lifescene.GetComponent("SphereCollider") == null)
                {
                    zoneS = lifescene.AddComponent("SphereCollider") as SphereCollider;
                }
                else
                {
                    zoneS = lifescene.GetComponent("SphereCollider") as SphereCollider;
                }
                zoneS.radius    = 5;
                zoneS.isTrigger = true;
            }
            if (idCollider == 1)
            {
                if (lifescene.GetComponent("SphereCollider") != null)
                {
                    DestroyImmediate(lifescene.GetComponent("SphereCollider"));
                }
                if (lifescene.GetComponent("BoxCollider") == null)
                {
                    zoneB = lifescene.AddComponent("BoxCollider") as BoxCollider;
                }
                else
                {
                    zoneB = lifescene.GetComponent("BoxCollider") as BoxCollider;
                }
                Vector3 size = new Vector3(5f, 5f, 7f);
                zoneB.size      = size;
                zoneB.isTrigger = true;
            }
            if (lifescene.GetComponent("Entity") == null)
            {
                entity = lifescene.AddComponent("Entity") as Entity;
            }
            else
            {
                entity = lifescene.GetComponent("Entity") as Entity;
            }
            entity.prototype = Pname;
            if (lifescene.GetComponent("LifeSceneParameters") == null)
            {
                LSP = lifescene.AddComponent("LifeSceneParameters") as LifeSceneParameters;
            }
            else
            {
                LSP = lifescene.GetComponent("LifeSceneParameters") as LifeSceneParameters;
            }
            LSP.Priority = priority;

            rootObjects.Clear();
            foreach (GameObject obj in UnityEngine.Object.FindObjectsOfType(typeof(GameObject)))
            {
                if (obj.transform.parent == null)
                {
                    rootObjects.Add(obj);
                }
            }

            foreach (GameObject obj in rootObjects)
            {
                if (obj.GetComponent <Simulation>() != null)
                {
                    if (obj.GetComponent("Initialisation") == null)
                    {
                        obj.AddComponent("Initialisation");
                    }
                }
            }


            if (Wname != "" && Wname != " ")
            {
                EditorGUIUtility.PingObject(lifescene);
                Selection.activeGameObject = lifescene;

                this.Close();
                Selection.activeGameObject.GetComponent <LifeSceneParameters>();
            }
        }
        else
        {
            Debug.LogWarning("The name of the LifeScene already exists");
        }
    }
    public void Setup()
    {
        msgProblematic = string.Empty;
        skipNext = false;
        selectedTimeLine = null;
        hoverItem = null;
        configItem = null;
        if (Selection.activeGameObject == null)
            return;
        LifeSceneParameters target = Selection.activeGameObject.GetComponent<LifeSceneParameters>();
        lastEdit = target;
        if (target == null)
            return;

        // make sure we have one and only one timeLine per role
        RoleParameters rp = target.roleParameters;
        LifeSceneTimeLine timeLine = target.timeLine;
        if (timeLine == null)
            timeLine = new LifeSceneTimeLine();
        target.timeLine = timeLine;
        ValidateTimeLine(rp, timeLine);

        btsForRoles.Clear();
        defaultBtForRoles.Clear ();

        if( target.roleParameters.Roles.Length == 0 )
        {
            msgProblematic = "No role defined\nCheck the Roles tab";
            return;
        }
        if( target.behaviorParameters.Behaviors.Length == 0 )
        {
            msgProblematic = "No behaviors defined\nCheck the Behaviors tab";
            return;
        }

        foreach (string role in target.roleParameters.Roles)
        {
            if( role == "" || role == null || role == string.Empty)
            {
                msgProblematic = "Empty role found\nCheck the Roles tab";
                return;
            }
            else if( btsForRoles.ContainsKey(role) == false )
            {
                btsForRoles.Add( role, new List<string>() );
                defaultBtForRoles.Add( role, 0 );
            }
            else
            {
                msgProblematic = "Duplicated roles found :"+role+"\nCheck the Roles tab";
                return;
            }
        }

        for( int i = 0; i< target.behaviorParameters.Behaviors.Length;++i )
        {

            string bt = target.behaviorParameters.Behaviors[i];
            string role = target.behaviorParameters.Roles[i];
            if( bt == "" || bt == null || bt == string.Empty)
            {
                msgProblematic = "Empty behavior found\nCheck the Behaviors tab";
                return;
            }
            if( role == "" || role == null || role == string.Empty)
            {
                msgProblematic = "Empty role associated with behavior "+bt+"\nCheck the Behaviors tab";
                return;
            }
            if( btsForRoles.ContainsKey(role) == true )
                btsForRoles[role].Add( bt );
            else
            {
                msgProblematic = "Inconsistent role found between the Roles tab and Behaviors tab\n"+role+" not found";
                return;
            }

        }
        foreach (string role in target.roleParameters.Roles)
        {
            btsForRoles[role] = btsForRoles[role].Distinct().ToList();
            if( btsForRoles[role].Count == 0 )
            {
                msgProblematic = "No Behaviors found for "+role;
                return;
            }
        }

        TypeRoleManager typeRole = TypeRoleManager.Instance;
        List<string> typeRoles = typeRole.typeRoles.ToList();

        timeLine.timeLineForRoles = timeLine.timeLineForRoles.OrderBy( tl =>
                                          {
            var idRole = target.roleParameters.Roles.ToList().FindIndex ( tr => tr == tl.roleName );
            var namedType = target.roleParameters.RolesType[idRole];
            var id = typeRoles.FindIndex( tr => tr == namedType );
            return id == -1 ? typeRoles.Count : id;
        } ).ToArray();
    }