源战役客户端
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

571 líneas
24 KiB

  1. //Update SC
  2. using UnityEngine;
  3. using UnityEditor;
  4. using System.Collections;
  5. [CustomEditor(typeof(T4MObjSC))]
  6. [CanEditMultipleObjects]
  7. public class T4MExtendsSC : Editor {
  8. int layerMask = 1073741824;
  9. bool ToggleF = false;
  10. Texture2D[] UndoObj;
  11. static Color[] terrainBay2;
  12. GameObject PlantObj;
  13. GameObject PlantObjPreview;
  14. GameObject currentObjPreview;
  15. float rotationCorrect;
  16. T4MPlantObjSC[] T4MPlantObjGet;
  17. int CheckPlacement;
  18. int State;
  19. int oldState;
  20. float RandomDistance;
  21. Vector3 RandomRotation;
  22. bool oldRandomRot;
  23. int plantmodval;
  24. float oldSize;
  25. Renderer[] T4MPlantRenderer;
  26. string OldActivStat = "";
  27. Collider[] T4MPreviewColl;
  28. Renderer[] LodObj;
  29. static ArrayList onPlayModeInstanceFolder= new ArrayList();
  30. static ArrayList onPlayModeInstanceGroup= new ArrayList();
  31. static ArrayList onPlayModeInstancePos= new ArrayList();
  32. static ArrayList onPlayModeInstanceRot= new ArrayList();
  33. static ArrayList onPlayModeInstanceSize= new ArrayList();
  34. static ArrayList onPlayModeDestroyed= new ArrayList();
  35. static bool Play;
  36. void OnSceneGUI () {
  37. if (T4MSC.T4MPreview && T4MSC.T4MMenuToolbar == 3)
  38. Painter();
  39. else if (T4MSC.T4MMenuToolbar == 4)
  40. Planting ();
  41. else State = 3;
  42. if (oldState != State || !PlantObjPreview && T4MSC.T4MMenuToolbar == 4 ||T4MSC.T4MObjectPlant[T4MSC.T4MPlantSel] == null && T4MSC.T4MMenuToolbar == 4){
  43. MeshRenderer[] prev = GameObject.FindObjectsOfType(typeof(MeshRenderer)) as MeshRenderer[];
  44. foreach(MeshRenderer go in prev)
  45. {
  46. if(go.hideFlags == HideFlags.HideInHierarchy || go.name == "previewT4M")
  47. {
  48. go.hideFlags=0;
  49. DestroyImmediate (go.gameObject);
  50. }
  51. }
  52. oldState = State;
  53. }
  54. }
  55. void Painter (){
  56. if (State != 1)
  57. State = 1;
  58. Event e = Event.current;
  59. if (e.type == EventType.KeyDown && e.keyCode==KeyCode.T){
  60. if (T4MSC.T4MActived != "Activated")
  61. T4MSC.T4MActived = "Activated";
  62. else T4MSC.T4MActived = "Deactivated";
  63. }
  64. if (T4MSC.T4MPreview && T4MSC.T4MActived == "Activated" && T4MSC.T4MPreview.enabled == false || T4MSC.T4MPreview.enabled == false){
  65. if(
  66. T4MSC.PaintPrev != T4MSC.PaintHandle.Follow_Normal_Circle &&
  67. T4MSC.PaintPrev != T4MSC.PaintHandle.Follow_Normal_WireCircle &&
  68. T4MSC.PaintPrev != T4MSC.PaintHandle.Hide_preview
  69. ){
  70. T4MSC.T4MPreview.enabled = true;
  71. }
  72. }else if (T4MSC.T4MPreview && T4MSC.T4MActived == "Deactivated" && T4MSC.T4MPreview.enabled == true || T4MSC.T4MPreview.enabled == true){
  73. if (T4MSC.PaintPrev != T4MSC.PaintHandle.Classic){
  74. T4MSC.T4MPreview.enabled = false;
  75. }
  76. }
  77. if (T4MSC.T4MActived == "Activated"){
  78. HandleUtility.AddDefaultControl (0);
  79. RaycastHit raycastHit = new RaycastHit();
  80. Ray terrain = HandleUtility.GUIPointToWorldRay (e.mousePosition);
  81. if (e.type == EventType.KeyDown && e.keyCode==KeyCode.KeypadPlus){
  82. T4MSC.brushSize += 1;
  83. }else if (e.type == EventType.KeyDown && e.keyCode==KeyCode.KeypadMinus){
  84. T4MSC.brushSize -= 1;
  85. }
  86. if(Physics.Raycast(terrain, out raycastHit, Mathf.Infinity,layerMask)) {
  87. T4MObjSC t4msc = T4MSC.CurrentSelect.gameObject.GetComponent<T4MObjSC>();
  88. if (t4msc && t4msc.ConvertType != "UT") {
  89. T4MSC.T4MPreview.transform.localEulerAngles = new Vector3(90, 180 + T4MSC.CurrentSelect.localEulerAngles.y, 0);
  90. } else {
  91. T4MSC.T4MPreview.transform.localEulerAngles = new Vector3(90, T4MSC.CurrentSelect.localEulerAngles.y, 0);
  92. }
  93. T4MSC.T4MPreview.transform.position = raycastHit.point;
  94. if(T4MSC.PaintPrev != T4MSC.PaintHandle.Classic && T4MSC.PaintPrev != T4MSC.PaintHandle.Hide_preview && T4MSC.PaintPrev != T4MSC.PaintHandle.Follow_Normal_WireCircle){
  95. Handles.color = new Color(1f,1f,0f,0.05f);
  96. Handles.DrawSolidDisc(raycastHit.point, raycastHit.normal, T4MSC.T4MPreview.orthographicSize*0.9f);
  97. }else if(T4MSC.PaintPrev != T4MSC.PaintHandle.Classic && T4MSC.PaintPrev != T4MSC.PaintHandle.Hide_preview && T4MSC.PaintPrev != T4MSC.PaintHandle.Follow_Normal_Circle){
  98. Handles.color = new Color(1f,1f,0f,1f);
  99. Handles.DrawWireDisc(raycastHit.point, raycastHit.normal, T4MSC.T4MPreview.orthographicSize*0.9f);
  100. }
  101. if ((e.type == EventType.MouseDrag && e.alt == false && e.shift == false && e.button == 0) || (e.shift == false && e.alt == false && e.button == 0 && ToggleF == false)){
  102. Vector2 pixelUV = raycastHit.textureCoord*T4MSC.T4MMaskTexUVCoord;//0.14f;
  103. int PuX = Mathf.FloorToInt (pixelUV.x * T4MSC.T4MMaskTex.width);
  104. int PuY = Mathf.FloorToInt (pixelUV.y * T4MSC.T4MMaskTex.height);
  105. int x = Mathf.Clamp ( PuX - T4MSC.T4MBrushSizeInPourcent / 2, 0, T4MSC.T4MMaskTex.width - 1);
  106. int y = Mathf.Clamp (PuY - T4MSC.T4MBrushSizeInPourcent / 2, 0, T4MSC.T4MMaskTex.height - 1);
  107. int width = Mathf.Clamp (( PuX + T4MSC.T4MBrushSizeInPourcent / 2) , 0, T4MSC.T4MMaskTex.width) - x;
  108. int height = Mathf.Clamp ((PuY + T4MSC.T4MBrushSizeInPourcent / 2), 0, T4MSC.T4MMaskTex.height) - y;
  109. Color[] terrainBay = T4MSC.T4MMaskTex.GetPixels (x, y, width, height, 0);
  110. if(T4MSC.T4MMaskTex2)
  111. terrainBay2 = T4MSC.T4MMaskTex2.GetPixels(x, y, width, height, 0);
  112. for (int i = 0; i < height; i++) {
  113. for (int j = 0; j < width; j++) {
  114. int index = (i * width) + j;
  115. float Stronger= T4MSC.T4MBrushAlpha[Mathf.Clamp((y + i) - (PuY - T4MSC.T4MBrushSizeInPourcent / 2), 0, T4MSC.T4MBrushSizeInPourcent - 1)*T4MSC.T4MBrushSizeInPourcent + Mathf.Clamp((x + j) - ( PuX - T4MSC.T4MBrushSizeInPourcent / 2), 0, T4MSC.T4MBrushSizeInPourcent - 1)]* T4MSC.T4MStronger;
  116. if (T4MSC.T4MselTexture <3){
  117. terrainBay[index] = Color.Lerp(terrainBay[index], T4MSC.T4MtargetColor,Stronger);
  118. }else{
  119. terrainBay[index] = Color.Lerp(terrainBay[index], T4MSC.T4MtargetColor,Stronger);//*0.3f);
  120. if(T4MSC.T4MMaskTex2)
  121. terrainBay2[index] = Color.Lerp(terrainBay2[index], T4MSC.T4MtargetColor2,Stronger);///0.3f);
  122. }
  123. }
  124. }
  125. T4MSC.T4MMaskTex.SetPixels(x, y, width,height, terrainBay,0);
  126. T4MSC.T4MMaskTex.Apply();
  127. if(T4MSC.T4MMaskTex2){
  128. T4MSC.T4MMaskTex2.SetPixels(x, y, width,height, terrainBay2, 0);
  129. T4MSC.T4MMaskTex2.Apply();
  130. UndoObj = new Texture2D[2];
  131. UndoObj[0] = T4MSC.T4MMaskTex;
  132. UndoObj[1] = T4MSC.T4MMaskTex2;
  133. }else{
  134. UndoObj = new Texture2D[1];
  135. UndoObj[0] = T4MSC.T4MMaskTex;
  136. }
  137. //Undo.RecordObjects(UndoObj, "T4MMask"); //Unity don't work correctly with this for now
  138. ToggleF = true;
  139. }else if (e.type == EventType.MouseUp && e.alt == false && e.button == 0 && ToggleF == true){
  140. T4MSC.SaveTexture();
  141. ToggleF = false;
  142. }
  143. }
  144. }
  145. }
  146. void Planting (){
  147. if (State != 2)
  148. State = 2;
  149. Event e = Event.current;
  150. if (e.type == EventType.KeyDown && e.keyCode==KeyCode.T){
  151. if (T4MSC.T4MActived != "Activated")
  152. T4MSC.T4MActived = "Activated";
  153. else T4MSC.T4MActived = "Deactivated";
  154. }
  155. if (!Play && EditorApplication.isPlaying == true){
  156. Play=true;
  157. }else if (Play && EditorApplication.isPlaying == false){
  158. SaveInPlayingMode();
  159. Play=false;
  160. }
  161. if (PlantObjPreview && T4MSC.T4MActived == "Activated" && OldActivStat != T4MSC.T4MActived){
  162. T4MPlantRenderer = PlantObjPreview.GetComponentsInChildren <Renderer>();
  163. for(int i=0;i<T4MPlantRenderer.Length;i++){
  164. if(T4MPlantRenderer[i].GetComponent<Renderer>().enabled == false)
  165. T4MPlantRenderer[i].GetComponent<Renderer>().enabled = true;
  166. }
  167. OldActivStat = T4MSC.T4MActived;
  168. }else if (PlantObjPreview && T4MSC.T4MActived == "Deactivated" && OldActivStat != T4MSC.T4MActived){
  169. T4MPlantRenderer = PlantObjPreview.GetComponentsInChildren <Renderer>();
  170. for(int i=0;i<T4MPlantRenderer.Length;i++){
  171. if(T4MPlantRenderer[i].GetComponent<Renderer>().enabled == true)
  172. T4MPlantRenderer[i].GetComponent<Renderer>().enabled = false;
  173. }
  174. OldActivStat = T4MSC.T4MActived;
  175. }
  176. if (T4MSC.T4MActived == "Activated"){
  177. if(oldRandomRot != T4MSC.T4MRandomRot){
  178. if(PlantObjPreview)
  179. PlantObjPreview.transform.rotation = Quaternion.FromToRotation(Vector3.up, Vector3.zero);
  180. oldRandomRot = T4MSC.T4MRandomRot;
  181. }
  182. if (PlantObjPreview && PlantObjPreview.transform.localScale != new Vector3 (T4MSC.T4MObjSize,T4MSC.T4MObjSize,T4MSC.T4MObjSize) && T4MSC.T4MSizeVar ==0 ||PlantObjPreview && oldSize != T4MSC.T4MObjSize){
  183. PlantObjPreview.transform.localScale = new Vector3 (T4MSC.T4MObjSize,T4MSC.T4MObjSize,T4MSC.T4MObjSize);
  184. oldSize = T4MSC.T4MObjSize;
  185. }
  186. HandleUtility.AddDefaultControl (0);
  187. RaycastHit raycastHit = new RaycastHit();
  188. Ray terrain = HandleUtility.GUIPointToWorldRay (e.mousePosition);
  189. GameObject CurrentObject = T4MSC.T4MObjectPlant[T4MSC.T4MPlantSel];
  190. if(Physics.Raycast(terrain, out raycastHit, Mathf.Infinity,layerMask)){
  191. if (CurrentObject){
  192. if(T4MSC.T4MDistanceMin != T4MSC.T4MDistanceMax && T4MSC.T4MRandomSpa && RandomDistance ==0 || RandomDistance < T4MSC.T4MDistanceMin || RandomDistance > T4MSC.T4MDistanceMax)
  193. RandomDist();
  194. if (e.type == EventType.KeyDown && e.keyCode==KeyCode.H){
  195. rotationCorrect = -1;
  196. }else if (e.type == EventType.KeyDown && e.keyCode==KeyCode.G){
  197. rotationCorrect = 1;
  198. }else rotationCorrect = 0;
  199. if (e.type == EventType.KeyDown && e.keyCode==KeyCode.KeypadPlus){
  200. T4MSC.T4MYOrigin += 0.1f;
  201. }else if (e.type == EventType.KeyDown && e.keyCode==KeyCode.KeypadMinus){
  202. T4MSC.T4MYOrigin -= 0.1f;
  203. }
  204. if (!PlantObjPreview || currentObjPreview != CurrentObject){
  205. rotationCorrect= 0f;
  206. if (PlantObjPreview)
  207. DestroyImmediate (PlantObjPreview);
  208. PlantObjPreview = Instantiate (CurrentObject, raycastHit.point,Quaternion.identity) as GameObject;
  209. T4MPlantRenderer = PlantObjPreview.GetComponentsInChildren <Renderer>();
  210. for(int i=0;i<T4MPlantRenderer.Length;i++){
  211. if (T4MPlantRenderer[i].GetComponent<Renderer>() && T4MPlantRenderer[i].GetComponent<Renderer>().sharedMaterial.HasProperty("_MainTex")){
  212. Texture Text = T4MPlantRenderer[i].GetComponent<Renderer>().sharedMaterial.GetTexture("_MainTex");
  213. Shader myShader = Shader.Find("Hidden/PlantPreview");
  214. Material NewPMat = new Material(myShader);
  215. T4MPlantRenderer[i].GetComponent<Renderer>().sharedMaterial = NewPMat;
  216. T4MPlantRenderer[i].GetComponent<Renderer>().sharedMaterial.SetTexture("_MainTex", Text);
  217. }
  218. }
  219. T4MPreviewColl = PlantObjPreview.GetComponentsInChildren <Collider>();
  220. for(int j=0;j<T4MPreviewColl.Length;j++){
  221. DestroyImmediate(T4MPreviewColl[j]);
  222. }
  223. PlantObjPreview.transform.rotation = Quaternion.FromToRotation(Vector3.up, Vector3.zero);
  224. PlantObjPreview.name = "previewT4M";
  225. T4MPlantObjSC removeScript = PlantObjPreview.GetComponent <T4MPlantObjSC>();
  226. DestroyImmediate(removeScript);
  227. PlantObjPreview.hideFlags = HideFlags.HideInHierarchy;
  228. currentObjPreview = CurrentObject;
  229. }
  230. PlantObjPreview.transform.position = raycastHit.point + (raycastHit.normal * T4MSC.T4MYOrigin);
  231. if(T4MSC.T4MSizeVar ==0)
  232. PlantObjPreview.transform.localScale = new Vector3 (T4MSC.T4MObjSize,T4MSC.T4MObjSize,T4MSC.T4MObjSize);
  233. if (T4MSC.T4MPlantMod == T4MSC.PlantMode.Follow_Normals){
  234. if (e.type == EventType.MouseMove){
  235. PlantObjPreview.transform.up = PlantObjPreview.transform.up+raycastHit.normal;
  236. plantmodval = 1;
  237. }
  238. }else{
  239. if (plantmodval ==1){
  240. PlantObjPreview.transform.rotation = Quaternion.FromToRotation(Vector3.up, Vector3.zero);
  241. plantmodval = 0;
  242. }
  243. }
  244. if (rotationCorrect !=0){
  245. PlantObjPreview.transform.Rotate(0,rotationCorrect * 100 * 0.02f,0);
  246. }
  247. if (e.shift == false && e.control == false){
  248. T4MPlantRenderer = PlantObjPreview.GetComponentsInChildren <Renderer>();
  249. if (CheckPlacement !=0){
  250. for(int i=0;i<T4MPlantRenderer.Length;i++){
  251. T4MPlantRenderer[i].GetComponent<Renderer>().sharedMaterial.SetColor("_TintColor", new Color(1f,0.5f,0.5f,0.071f));
  252. }
  253. }else{
  254. for(int i=0;i<T4MPlantRenderer.Length;i++){
  255. T4MPlantRenderer[i].GetComponent<Renderer>().sharedMaterial.SetColor("_TintColor", new Color(0.5f,0.5f,0.5f,0.2f));
  256. }
  257. }
  258. for(int i=0;i<T4MPlantRenderer.Length;i++){
  259. T4MPlantRenderer[i].GetComponent<Renderer>().enabled = true;
  260. }
  261. Handles.color = new Color(0f,1f,0f,0.03f);
  262. Handles.DrawSolidDisc(raycastHit.point, raycastHit.normal, T4MSC.T4MDistanceMin);
  263. if (T4MSC.T4MDistanceMin != T4MSC.T4MDistanceMax && T4MSC.T4MRandomSpa){
  264. Handles.color = new Color(1f,1f,0f,0.05f);
  265. Handles.DrawSolidDisc(raycastHit.point, raycastHit.normal, T4MSC.T4MDistanceMax);
  266. Handles.color = new Color(1f,1f,0f,0.5f);
  267. if(RandomDistance > T4MSC.T4MDistanceMin && RandomDistance < T4MSC.T4MDistanceMax)
  268. Handles.DrawWireDisc(raycastHit.point, raycastHit.normal, RandomDistance);
  269. }
  270. }else if (e.shift == true && e.control == false){
  271. T4MPlantRenderer = PlantObjPreview.GetComponentsInChildren <Renderer>();
  272. for(int i=0;i<T4MPlantRenderer.Length;i++){
  273. T4MPlantRenderer[i].GetComponent<Renderer>().enabled = false;
  274. }
  275. Handles.color = new Color(1f,0f,0f,0.1f);
  276. Handles.DrawSolidDisc(raycastHit.point, raycastHit.normal, T4MSC.T4MDistanceMin);
  277. }else if (e.shift == false && e.control == true){
  278. T4MPlantRenderer = PlantObjPreview.GetComponentsInChildren <Renderer>();
  279. for(int i=0;i<T4MPlantRenderer.Length;i++){
  280. T4MPlantRenderer[i].GetComponent<Renderer>().enabled = false;
  281. }
  282. Handles.color = new Color(1f,1f,0f,0.1f);
  283. Handles.DrawSolidDisc(raycastHit.point, raycastHit.normal, T4MSC.T4MDistanceMin);
  284. }
  285. if (ToggleF == false){
  286. T4MPlantObjGet = GameObject.FindObjectsOfType(typeof(T4MPlantObjSC)) as T4MPlantObjSC[];
  287. ToggleF = true;
  288. }
  289. CheckPlacement = 0;
  290. Vector3 fix = raycastHit.point;
  291. if (T4MPlantObjGet !=null && T4MPlantObjGet.Length>0 && ToggleF == true)
  292. for(int i=0;i<T4MPlantObjGet.Length;i++){
  293. if (T4MSC.T4MDistanceMin != T4MSC.T4MDistanceMax && T4MSC.T4MRandomSpa){
  294. if(Vector3.Distance(T4MPlantObjGet[i].transform.position, new Vector3(fix.x, T4MPlantObjGet[i].transform.position.y ,fix.z))< RandomDistance)
  295. CheckPlacement +=1;
  296. }else{
  297. if(Vector3.Distance(T4MPlantObjGet[i].transform.position, new Vector3(fix.x, T4MPlantObjGet[i].transform.position.y ,fix.z))< T4MSC.T4MDistanceMin)
  298. CheckPlacement +=1;
  299. }
  300. }
  301. }
  302. if (e.type == EventType.MouseDown && e.alt == false && e.button == 0 && e.shift == false && e.control == false && PlantObjPreview|| e.type == EventType.MouseDrag && e.alt == false && e.button == 0 && e.shift == false && e.control == false && PlantObjPreview){
  303. if (CurrentObject){
  304. if (CheckPlacement == 0)
  305. {
  306. PlantObj = null;
  307. PlantObj = PrefabUtility.InstantiatePrefab(CurrentObject) as GameObject;
  308. if (!PlantObj.GetComponent<T4MPlantObjSC>())
  309. PlantObj.AddComponent <T4MPlantObjSC>();
  310. PlantObj.transform.position = PlantObjPreview.transform.position;
  311. PlantObj.transform.rotation = PlantObjPreview.transform.rotation;
  312. PlantObj.transform.localScale = PlantObjPreview.transform.localScale;
  313. LodObj = PlantObj.GetComponentsInChildren <Renderer>();
  314. for (int t=0;t<LodObj.Length;t++){
  315. if(T4MSC.ViewDistance[T4MSC.T4MPlantSel]==T4MSC.ViewD.Close)
  316. LodObj[t].gameObject.layer = 26;
  317. else if(T4MSC.ViewDistance[T4MSC.T4MPlantSel]==T4MSC.ViewD.Middle)
  318. LodObj[t].gameObject.layer = 27;
  319. else if(T4MSC.ViewDistance[T4MSC.T4MPlantSel]==T4MSC.ViewD.Far)
  320. LodObj[t].gameObject.layer = 28;
  321. else if(T4MSC.ViewDistance[T4MSC.T4MPlantSel]==T4MSC.ViewD.BackGround)
  322. LodObj[t].gameObject.layer = 29;
  323. }
  324. ToggleF =false;
  325. GameObject Group = GameObject.Find(T4MSC.T4MGroupName);
  326. if (!Group){
  327. Group = new GameObject (T4MSC.T4MGroupName);
  328. }
  329. PlantObj.transform.parent = Group.transform;
  330. if (PlantObj.GetComponent<T4MLodObjSC>()){
  331. T4MSC.LodActivate = false;
  332. PlantObj.isStatic = T4MSC.T4MStaticObj;
  333. }else if (PlantObj.GetComponent<T4MBillBObjSC>()){
  334. PlantObj.isStatic = false;
  335. T4MSC.billActivate = false;
  336. }else PlantObj.isStatic = T4MSC.T4MStaticObj;
  337. if (T4MSC.T4MCreateColl && !PlantObj.GetComponent<Collider>())
  338. PlantObj.AddComponent<MeshCollider>();
  339. if(T4MSC.T4MRandomSpa)
  340. RandomDist();
  341. if(T4MSC.T4MRandomRot)
  342. RandomRot();
  343. if(T4MSC.T4MSizeVar !=0)
  344. RandomSize();
  345. if (T4MSC.T4MselectObj >1)
  346. RandomObject ();
  347. if(EditorApplication.isPlaying == true)
  348. InPlayingAdd(CurrentObject as GameObject, Group.name as string);
  349. }
  350. }
  351. }else if(e.type == EventType.MouseDown && e.alt == false && e.button == 0 && e.shift == true && e.control == false && PlantObjPreview || e.type == EventType.MouseDrag && e.alt == false && e.button == 0 && e.shift == true && e.control == false && PlantObjPreview){
  352. if (ToggleF == false){
  353. T4MPlantObjGet = GameObject.FindObjectsOfType(typeof(T4MPlantObjSC)) as T4MPlantObjSC[];
  354. ToggleF =true;
  355. }
  356. for(int i=0;i<T4MPlantObjGet.Length;i++){
  357. Vector3 fix = raycastHit.point;
  358. if(Vector3.Distance(T4MPlantObjGet[i].transform.position, new Vector3(fix.x, T4MPlantObjGet[i].transform.position.y ,fix.z))< T4MSC.T4MDistanceMin){
  359. if(EditorApplication.isPlaying == true)
  360. onPlayModeDestroyed.Add(T4MPlantObjGet[i].gameObject.transform.position);
  361. if (T4MPlantObjGet[i].GetComponent<T4MBillBObjSC>())
  362. T4MSC.billActivate = false;
  363. else if (T4MPlantObjGet[i].GetComponent<T4MLodObjSC>())
  364. T4MSC.LodActivate = false;
  365. DestroyImmediate (T4MPlantObjGet[i].gameObject);
  366. ToggleF = false;
  367. }
  368. }
  369. }else if(e.type == EventType.MouseDown && e.alt == false && e.button == 0 && e.shift == false && e.control == true && PlantObjPreview || e.type == EventType.MouseDrag && e.alt == false && e.button == 0 && e.shift == false && e.control == true && PlantObjPreview){
  370. if (ToggleF == false){
  371. T4MPlantObjGet = GameObject.FindObjectsOfType(typeof(T4MPlantObjSC)) as T4MPlantObjSC[];
  372. ToggleF =true;
  373. }
  374. for(int i=0;i<T4MPlantObjGet.Length;i++){
  375. Vector3 fix = raycastHit.point;
  376. if(Vector3.Distance(T4MPlantObjGet[i].transform.position, new Vector3(fix.x, T4MPlantObjGet[i].transform.position.y ,fix.z))< T4MSC.T4MDistanceMin){
  377. Quaternion rot = T4MPlantObjGet[i].gameObject.transform.rotation;
  378. Vector3 pos = T4MPlantObjGet[i].gameObject.transform.position;
  379. Vector3 scale = T4MPlantObjGet[i].gameObject.transform.localScale;
  380. int lay = T4MPlantObjGet[i].gameObject.layer;
  381. bool Static = T4MPlantObjGet[i].gameObject.isStatic;
  382. int LODBILL =0;
  383. if (T4MPlantObjGet[i].gameObject.GetComponent<T4MLodObjSC>())
  384. LODBILL =1;
  385. else if (T4MPlantObjGet[i].gameObject.GetComponent<T4MBillBObjSC>())
  386. LODBILL =2;
  387. DestroyImmediate (T4MPlantObjGet[i].gameObject);
  388. ToggleF = false;
  389. PlantObj = null;
  390. PlantObj = PrefabUtility.InstantiatePrefab(CurrentObject) as GameObject;
  391. if (!PlantObj.GetComponent<T4MPlantObjSC>())
  392. PlantObj.AddComponent <T4MPlantObjSC>();
  393. PlantObj.transform.position = pos;
  394. PlantObj.transform.rotation = rot;
  395. PlantObj.transform.localScale = scale;
  396. LodObj = PlantObj.GetComponentsInChildren <Renderer>();
  397. for (int t=0;t<LodObj.Length;t++){
  398. LodObj[t].gameObject.layer = lay;
  399. }
  400. if (LODBILL==1)
  401. T4MSC.LodActivate = false;
  402. else if (LODBILL==2)
  403. T4MSC.billActivate = false;
  404. if (PlantObj.GetComponent<T4MLodObjSC>()){
  405. T4MSC.LodActivate = false;
  406. PlantObj.isStatic = Static;
  407. }else if (PlantObj.GetComponent<T4MBillBObjSC>()){
  408. PlantObj.isStatic = false;
  409. T4MSC.billActivate = false;
  410. }else PlantObj.isStatic = Static;
  411. GameObject Group = GameObject.Find(T4MSC.T4MGroupName);
  412. if (!Group){
  413. Group = new GameObject (T4MSC.T4MGroupName);
  414. }
  415. PlantObj.transform.parent = Group.transform;
  416. }
  417. }
  418. }else if (e.type == EventType.MouseUp && ToggleF == true){
  419. ToggleF =false;
  420. }
  421. }
  422. }
  423. }
  424. void RandomRot(){
  425. RandomRotation = new Vector3(Random.Range (-T4MSC.T4MrandX*45, T4MSC.T4MrandX*45),Random.Range (-T4MSC.T4MrandY*180, T4MSC.T4MrandY*180),Random.Range (-T4MSC.T4MrandZ*45, T4MSC.T4MrandZ*45));
  426. if(PlantObjPreview){
  427. PlantObjPreview.transform.rotation = Quaternion.FromToRotation(Vector3.up, Vector3.zero);
  428. PlantObjPreview.transform.Rotate(RandomRotation);
  429. }
  430. }
  431. void RandomObject (){
  432. int SelObj = Random.Range (1, T4MSC.T4MselectObj+1);
  433. int MatchSel=0;
  434. for (int i=0;i<T4MSC.T4MBoolObj.Length;i++){
  435. if (T4MSC.T4MObjectPlant[i]){
  436. if (T4MSC.T4MBoolObj[i] == true)
  437. MatchSel +=1;
  438. }
  439. if (MatchSel == SelObj){
  440. T4MSC.T4MPlantSel= i;
  441. return;
  442. }
  443. }
  444. }
  445. void RandomSize(){
  446. if(PlantObjPreview){
  447. float Var = Random.Range (-T4MSC.T4MSizeVar, T4MSC.T4MSizeVar);
  448. float variation = T4MSC.T4MObjSize*Var;
  449. PlantObjPreview.transform.transform.localScale = new Vector3(T4MSC.T4MObjSize+variation,T4MSC.T4MObjSize+variation,T4MSC.T4MObjSize+variation);
  450. }
  451. }
  452. void RandomDist(){
  453. RandomDistance = Random.Range(T4MSC.T4MDistanceMin, T4MSC.T4MDistanceMax);
  454. }
  455. void InPlayingAdd(GameObject CurrentObject, string Grp){
  456. onPlayModeInstanceFolder.Add(AssetDatabase.GetAssetPath (CurrentObject) as string);
  457. onPlayModeInstanceGroup.Add(Grp as string);
  458. onPlayModeInstancePos.Add(PlantObj.transform.position);
  459. onPlayModeInstanceRot.Add(PlantObj.transform.rotation);
  460. onPlayModeInstanceSize.Add(PlantObj.transform.localScale);
  461. }
  462. void SaveInPlayingMode(){
  463. string[] F = onPlayModeInstanceFolder.ToArray(typeof(string)) as string[];
  464. string[] G = onPlayModeInstanceGroup.ToArray(typeof(string)) as string[];
  465. Vector3[] P = onPlayModeInstancePos.ToArray(typeof(Vector3)) as Vector3[];
  466. Quaternion[]R = onPlayModeInstanceRot.ToArray(typeof(Quaternion)) as Quaternion[];
  467. Vector3[] S = onPlayModeInstanceSize.ToArray(typeof(Vector3)) as Vector3[];
  468. Vector3[] D = onPlayModeDestroyed.ToArray(typeof(Vector3)) as Vector3[];
  469. for (int i=0;i<F.Length;i++){
  470. GameObject test = PrefabUtility.InstantiatePrefab((GameObject)AssetDatabase.LoadAssetAtPath(F[i], typeof(GameObject))) as GameObject;
  471. test.transform.position = P[i];
  472. test.transform.rotation = R[i];
  473. test.transform.localScale = S[i];
  474. if (!test.GetComponent<T4MPlantObjSC>())
  475. test.AddComponent <T4MPlantObjSC>();
  476. GameObject Group = GameObject.Find(G[i]);
  477. if (!Group){
  478. Group = new GameObject (G[i]);
  479. }
  480. test.transform.parent = Group.transform;
  481. }
  482. T4MPlantObjSC[] T4MPlantToErase = GameObject.FindObjectsOfType(typeof(T4MPlantObjSC)) as T4MPlantObjSC[];
  483. for (int j=0;j<D.Length;j++){
  484. for (int k=0;k<T4MPlantToErase.Length;k++){
  485. if (T4MPlantToErase[k].gameObject.transform.position == D[j])
  486. DestroyImmediate(T4MPlantToErase[k].gameObject);
  487. T4MPlantToErase = GameObject.FindObjectsOfType(typeof(T4MPlantObjSC)) as T4MPlantObjSC[];
  488. }
  489. }
  490. onPlayModeInstanceFolder = new ArrayList();
  491. onPlayModeInstanceGroup = new ArrayList();
  492. onPlayModeInstancePos = new ArrayList();
  493. onPlayModeInstanceRot = new ArrayList();
  494. onPlayModeInstanceSize = new ArrayList();
  495. onPlayModeDestroyed = new ArrayList();
  496. }
  497. }