NewN_UAVPlane/Assets/art/haidao/EasyRoads3D/Editor/ERTextureWindow.js

221 lines
5.8 KiB
JavaScript

import System.IO;
class ERTextureWindow extends EditorWindow {
public static var instance : ERTextureWindow ;
private var roadTexture : Texture2D;
private var scrollPosition : Vector2;
private var selectedItem : int = 0;
private var shaders1 : String[];
private var shaders2 : String[];
private var shaders3 : String[];
private var roadTextures : Texture2D[];
private var texturePaths : String[];
private var shaderOptions : int[];
private var selInt : int[];
private var dtextures : List.<String> = new List.<String>();
private var btextures : List.<String> = new List.<String>();
private var stextures : List.<String> = new List.<String>();
private var ext : String[] = [".PSD", ".TIFF",".JPG",".TGA",".PNG",".GIF",".BMP",".IFF",".PICT"];
static public var window : ERTextureWindow;
static private var roadscript : RoadObjectScript;
public static var test : int;
private var assetPath;
static function Init (scr : RoadObjectScript) {
roadscript = scr;
window = EditorWindow.GetWindow (ERTextureWindow);
}
public function ERTextureWindow() {
instance = this;
}
function OnDestroy(){
instance = null;
}
function OnGUI () {
if(roadTextures == null){
GetFiles() ;
titleContent = new GUIContent("Road Materials");
}
if(shaders1 == null){
shaders1 = new String[1];
shaders1[0] = "Diffuse";
shaders2 = new String[2];
shaders2[0] = "Diffuse";shaders2[1] = "Bumpmap Diffuse";
shaders3 = new String[3];
shaders3[0] = "Diffuse";shaders3[1] = "Bumpmap Diffuse";shaders3[2] = "Bumped Specular";
}
var r : Rect = this.position;
var cols : int = Mathf.Floor(r.width / 150f);
scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition);
GUILayout.Space(10);
var k : int = 0;
var l : int = 0;
for(i = 0; i < 5; i++){
EditorGUILayout.BeginHorizontal();
GUILayout.Space(10);
for(j= 0; j < cols; j++){
if(GUILayout.Button (roadTextures[k], GUILayout.Width(125), GUILayout.Height(125))){
SetMaterial(roadTextures[k], selInt[k], texturePaths[k], k);
}
GUILayout.Space(25);
k++;
if(k >= roadTextures.length) break;
}
EditorGUILayout.EndHorizontal();
GUILayout.Space(1);
EditorGUILayout.BeginHorizontal();
GUILayout.Space(10);
for(j= 0; j < cols; j++){
var oldItem : int = selInt[l];
if(shaderOptions[l] == 1) selInt[l]= EditorGUILayout.Popup (selInt[l], shaders1, EditorStyles.toolbarPopup , GUILayout.Width(125) );
else if(shaderOptions[l] == 2) selInt[l]= EditorGUILayout.Popup (selInt[l], shaders2, EditorStyles.toolbarPopup , GUILayout.Width(125) );
else if(shaderOptions[l] == 3) selInt[l]= EditorGUILayout.Popup (selInt[l], shaders3, EditorStyles.toolbarPopup , GUILayout.Width(125) );
if(oldItem != selInt[l] && selectedItem == l) SetMaterial(roadTextures[l], selInt[l], texturePaths[l], l);
GUILayout.Space(29);
l++;
if(l >= roadTextures.length) break;
}
EditorGUILayout.EndHorizontal();
GUILayout.Space(10);
if(k >= roadTextures.length) break;
}
EditorGUILayout.EndScrollView();
}
function GetFiles() {
var textures : List.<String> = new List.<String>();
var dir : DirectoryInfo= new DirectoryInfo(Directory.GetCurrentDirectory() + ODQQDOOOOO.extensionPath + "Textures/Road Textures/");
assetPath = ODQQDOOOOO.extensionPath.Substring(1, ODQQDOOOOO.extensionPath.Length - 1);
var extStrings : String[] = new String[1];
extStrings[0] = "*.*";
for(var ext : String in extStrings){
for(var f : FileInfo in dir.GetFiles(ext)) {
var name : String = f. Name;
if(InArray(f.Extension)){
textures.Add(name);
}
}
}
dtextures.Clear();
btextures.Clear();
stextures.Clear();
for(file in textures){
if(file.IndexOf("_d.") >= 0 ) dtextures.Add(file);
else if(file.IndexOf("_b.") >= 0 ) btextures.Add(file);
else if(file.IndexOf("_s.") >= 0 ) stextures.Add(file);
else dtextures.Add(file);
}
roadTextures = new Texture2D[dtextures.Count];
texturePaths = new String[dtextures.Count];
shaderOptions = new int[dtextures.Count];
selInt = new int[dtextures.Count];
var i : int = 0;
for(file in dtextures){
// Debug.Log("/Assets/EasyRoads3D/Textures/Road Textures/" + file);
roadTextures[i] = AssetDatabase.LoadAssetAtPath(assetPath + "Textures/Road Textures/" + file, typeof(Texture2D));
var arr = file.Split("_"[0]);
var extr : String = "";
if(arr.length > 2){
for(l = 0; l < arr.length - 1;l++) extr += arr[l] + "_";
extr = extr.Substring(0, extr.length - 1);
}else{
extr = arr[0];
}
var option : int = 1;
for(fb in btextures){
if(fb.IndexOf(extr ) >= 0){
option++;
option++;
for(fs in stextures){
if(fs.IndexOf(extr ) >= 0){
break;
}
}
break;
}
}
shaderOptions[i] = option;
texturePaths[i] = file;
i++;
}
}
function InArray(file){
var flag = false;
for(i = 0; i < ext.Length; i++){
if(ext[i] == file.ToUpper()){
flag = true;
break;
}
}
return flag;
}
function SetMaterial(tex, shader, file, item){
// Debug.Log(shader +" "+file);
selectedItem = item;
var arr = file.Split("_"[0]);
var extr : String = "";
if(arr.length > 2){
for(l = 0; l < arr.length - 1;l++) extr += arr[l] + "_";
extr = extr.Substring(0, extr.length - 1);
}else{
extr = arr[0];
}
mat = Resources.Load("roadMaterial", typeof(Material));
matEdit = Resources.Load("roadMaterialEdit", typeof(Material));
if(shader == 0) mat.shader = Shader.Find ("EasyRoads3D/Diffuse");
else if(shader == 1){
mat.shader = Shader.Find ("EasyRoads3D/Bumped Diffuse");
var btex : String = "";
for(fb in btextures){
if(fb.IndexOf(extr ) >= 0){
btex = fb;
break;
}
}
mat.SetTexture("_BumpMap",AssetDatabase.LoadAssetAtPath(assetPath + "Textures/Road Textures/" + btex, typeof(Texture2D)));
}else if(shader == 2){
mat.shader = Shader.Find ("EasyRoads3D/Bumped Specular");
btex = "";
for(fb in btextures){
if(fb.IndexOf(extr ) >= 0){
btex = fb;
break;
}
}
}
roadscript.roadTexture = tex;
mat.mainTexture = tex;
matEdit.mainTexture = tex;
var road : GameObject = roadscript.OOOOODODCQ.road;
if(road != null){
if(road.transform.childCount > 0){
for(child in road.transform){
child.gameObject.renderer.material = mat;
}
}else{
road.GetComponent.<Renderer>().material = mat;
}
}
}
}