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); } }
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"); }
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(); }