소스 검색

Editor: Added material.normalScale support.

Mr.doob 6 년 전
부모
커밋
8d7c7ae794
4개의 변경된 파일94개의 추가작업 그리고 2개의 파일을 삭제
  1. 2 1
      editor/index.html
  2. 18 0
      editor/js/Sidebar.Material.js
  3. 72 0
      editor/js/commands/SetMaterialVectorCommand.js
  4. 2 1
      editor/sw.js

+ 2 - 1
editor/index.html

@@ -170,9 +170,10 @@
 		<script src="js/commands/RemoveScriptCommand.js"></script>
 		<script src="js/commands/SetScriptValueCommand.js"></script>
 		<script src="js/commands/SetMaterialCommand.js"></script>
-		<script src="js/commands/SetMaterialValueCommand.js"></script>
 		<script src="js/commands/SetMaterialColorCommand.js"></script>
 		<script src="js/commands/SetMaterialMapCommand.js"></script>
+		<script src="js/commands/SetMaterialValueCommand.js"></script>
+		<script src="js/commands/SetMaterialVectorCommand.js"></script>
 		<script src="js/commands/SetSceneCommand.js"></script>
 
 		<script>

+ 18 - 0
editor/js/Sidebar.Material.js

@@ -340,10 +340,14 @@ Sidebar.Material = function ( editor ) {
 	var materialNormalMapRow = new UI.Row();
 	var materialNormalMapEnabled = new UI.Checkbox( false ).onChange( update );
 	var materialNormalMap = new UI.Texture().onChange( update );
+	var materialNormalScaleX = new UI.Number( 1 ).setWidth( '30px' ).onChange( update );
+	var materialNormalScaleY = new UI.Number( 1 ).setWidth( '30px' ).onChange( update );
 
 	materialNormalMapRow.add( new UI.Text( strings.getKey( 'sidebar/material/normalmap' ) ).setWidth( '90px' ) );
 	materialNormalMapRow.add( materialNormalMapEnabled );
 	materialNormalMapRow.add( materialNormalMap );
+	materialNormalMapRow.add( materialNormalScaleX );
+	materialNormalMapRow.add( materialNormalScaleY );
 
 	container.add( materialNormalMapRow );
 
@@ -778,6 +782,17 @@ Sidebar.Material = function ( editor ) {
 
 					}
 
+					if ( material.normalScale.x !== materialNormalScaleX.getValue() ||
+						material.normalScale.y !== materialNormalScaleY.getValue() ) {
+
+						var value = [
+							materialNormalScaleX.getValue(),
+							materialNormalScaleY.getValue()
+						];
+						editor.execute( new SetMaterialVectorCommand( editor, currentObject, 'normalScale', value, currentMaterialSlot ) );
+
+					}
+
 				} else {
 
 					if ( normalMapEnabled ) textureWarning = true;
@@ -1313,6 +1328,9 @@ Sidebar.Material = function ( editor ) {
 
 			}
 
+			materialNormalScaleX.setValue( material.normalScale.x );
+			materialNormalScaleY.setValue( material.normalScale.y );
+
 		}
 
 		if ( material.displacementMap !== undefined ) {

+ 72 - 0
editor/js/commands/SetMaterialVectorCommand.js

@@ -0,0 +1,72 @@
+/**
+ * @author dforrer / https://github.com/dforrer
+ * Developed as part of a project at University of Applied Sciences and Arts Northwestern Switzerland (www.fhnw.ch)
+ */
+
+var SetMaterialVectorCommand = function ( editor, object, attributeName, newValue, materialSlot ) {
+
+	Command.call( this, editor );
+
+	this.type = 'SetMaterialColorCommand';
+	this.name = 'Set Material.' + attributeName;
+	this.updatable = true;
+
+	this.object = object;
+	this.material = this.editor.getObjectMaterial( object, materialSlot );
+
+	this.oldValue = ( this.material !== undefined ) ? this.material[ attributeName ].toArray() : undefined;
+	this.newValue = newValue;
+
+	this.attributeName = attributeName;
+
+};
+
+SetMaterialVectorCommand.prototype = {
+
+	execute: function () {
+
+		this.material[ this.attributeName ].fromArray( this.newValue );
+
+		this.editor.signals.materialChanged.dispatch( this.material );
+
+	},
+
+	undo: function () {
+
+		this.material[ this.attributeName ].fromArray( this.oldValue );
+
+		this.editor.signals.materialChanged.dispatch( this.material );
+
+	},
+
+	update: function ( cmd ) {
+
+		this.newValue = cmd.newValue;
+
+	},
+
+	toJSON: function () {
+
+		var output = Command.prototype.toJSON.call( this );
+
+		output.objectUuid = this.object.uuid;
+		output.attributeName = this.attributeName;
+		output.oldValue = this.oldValue;
+		output.newValue = this.newValue;
+
+		return output;
+
+	},
+
+	fromJSON: function ( json ) {
+
+		Command.prototype.fromJSON.call( this, json );
+
+		this.object = this.editor.objectByUuid( json.objectUuid );
+		this.attributeName = json.attributeName;
+		this.oldValue = json.oldValue;
+		this.newValue = json.newValue;
+
+	}
+
+};

+ 2 - 1
editor/sw.js

@@ -169,9 +169,10 @@ const staticAssets = [
 	'./js/commands/RemoveScriptCommand.js',
 	'./js/commands/SetScriptValueCommand.js',
 	'./js/commands/SetMaterialCommand.js',
-	'./js/commands/SetMaterialValueCommand.js',
 	'./js/commands/SetMaterialColorCommand.js',
 	'./js/commands/SetMaterialMapCommand.js',
+	'./js/commands/SetMaterialValueCommand.js',
+	'./js/commands/SetMaterialVectorCommand.js',
 	'./js/commands/SetSceneCommand.js',
 
 	//