Ver Fonte

Horizontal looping supper for Perlin noise, image pasting, a couple of simple blending operations, added textured default material to default pak

Ivan Safrin há 13 anos atrás
pai
commit
449bbd1cf1

BIN
Assets/Default asset pack/default.pak


+ 6 - 0
Assets/Default asset pack/default/default.mat

@@ -89,5 +89,11 @@
 			<shader name="DefaultShaderNoTexture">
 			</shader>
 		</material>			
+		<material name="DefaultTextured">
+			<shader name="DefaultShader">
+				<textures>
+				</textures>				
+			</shader>
+		</material>					
 	</materials>
 </polycode>

+ 24 - 0
Core/Contents/Include/PolyColor.h

@@ -79,6 +79,17 @@ namespace Polycode {
 				Number na = a * v2.a;				
 				return Color(nr, ng, nb, na);
 			}	
+
+			/** 
+			* Multiplies the color with a number
+			*/
+			inline Color operator * ( const Number val) const {
+				Number nr = r * val;
+				Number ng = g * val;
+				Number nb = b * val;
+				Number na = a * val;				
+				return Color(nr, ng, nb, na);
+			}	
 			
 			/** 
 			* Adds the color to another color.
@@ -153,6 +164,14 @@ namespace Polycode {
 			*/															
 			void setColor(const Color *color);
 			
+			/**
+			* Returns a new color after blending the second color with specified blending mode. 
+			* @param c2 Color to blend with
+			* @param mode Blending mode to use. Currently possible values are Color::BLEND_NORMAL, Color::BLEND_COLOR
+			* @param amount Amount to blend.
+			*/
+			Color blendColor(Color c2, int mode, Number amount, Color c3 = Color());
+			
 			/**
 			* Sets the color to a random color. This does not affect alpha.
 			*/
@@ -210,6 +229,11 @@ namespace Polycode {
 			* Alpha value.
 			*/			
 			Number a;
+			
+
+			const static int BLEND_NORMAL = 0;
+			const static int BLEND_REPLACE_COLOR = 1;
+						
 		protected:
 	
 	};

+ 8 - 0
Core/Contents/Include/PolyImage.h

@@ -81,6 +81,14 @@ namespace Polycode {
 			bool saveImage(const String &fileName);
 			bool savePNG(const String &fileName);
 			
+			/**
+			* Pastes another image into the image using a blending mode
+			* @param image Image to paste
+			* @param x X position of new image within the image 
+			* @param y Y position of new image within the image 			
+			* @param blendingMode Blending mode to use. Currently not used.
+			*/
+			void pasteImage(Image *image, int x, int y, int blendingMode = 0, Number blendAmount = 1.0, Color blendColor = Color());
 			
 			/**
 			* Recreate the image as an empty image of specified size. The image type stays the same.

+ 21 - 2
Core/Contents/Include/PolyPerlin.h

@@ -44,6 +44,11 @@ public:
 	*/
 	Perlin(int octaves,Number freq,Number amp,int seed);
 
+
+	Number Get2DTiledX(Number x, Number y, Number t) {
+		return ( (t - x) * Get2D(x, y) + (x) * Get2D(x - t, y) ) / (t);
+	}	
+
 	/**
 	* Returns noise value at the specified coordinate.
 	* @param x Horizontal coordinate.
@@ -51,16 +56,30 @@ public:
 	*/ 
 
 	Number Get(Number x,Number y) {
+		return Get2D(x,y);
+	};
+	
+	Number Get2D(Number x,Number y) {
 		Number vec[2];
 		vec[0] = x;
 		vec[1] = y;
 		return perlin_noise_2D(vec);
-	};
+	};	
+
+	Number Get3D(Number x,Number y, Number z) {
+		Number vec[3];
+		vec[0] = x;
+		vec[1] = y;
+		vec[2] = z;		
+		return perlin_noise_3D(vec);
+	};	
+
 
 protected:
   void init_perlin(int n,Number p);
   Number perlin_noise_2D(Number vec[2]);
-
+  Number perlin_noise_3D(Number vec[2]);
+  
   Number noise1(Number arg);
   Number noise2(Number vec[2]);
   Number noise3(Number vec[3]);

+ 23 - 0
Core/Contents/Source/PolyColor.cpp

@@ -59,6 +59,29 @@ void Color::setColorHexRGB(unsigned int hex) {
 	
 }
 
+Color Color::blendColor(Color c2, int mode, Number amount, Color c3) {
+	Color ret;
+	Number premul = c2.a * amount;
+	switch(mode) {
+		case Color::BLEND_NORMAL:
+			ret.r = (r * (1.0-premul)) + (c2.r * premul);
+			ret.g = (g * (1.0-premul)) + (c2.g * premul);
+			ret.b = (b * (1.0-premul)) + (c2.b * premul);
+			ret.a = a + premul;
+		break;
+		case Color::BLEND_REPLACE_COLOR:
+			ret.r = (r * (1.0-premul)) + (c3.r * premul);
+			ret.g = (g * (1.0-premul)) + (c3.g * premul);
+			ret.b = (b * (1.0-premul)) + (c3.b * premul);
+			ret.a = a + premul;
+		break;
+	}
+	
+	if(ret.a > 1.0)
+		ret.a = 1.0;	
+	return ret;
+}
+
 void Color::setColorHex(unsigned int hex) {
 	int ta = (hex >> 24) & 0xFF;
 	int tb = (hex >> 16) & 0xFF;

+ 11 - 0
Core/Contents/Source/PolyImage.cpp

@@ -89,6 +89,17 @@ Image::Image(char *data, int width, int height, int type) {
 	this->height = height;
 }
 
+void Image::pasteImage(Image *image, int x, int y, int blendingMode , Number blendAmount, Color blendColor ) {
+	for(int iy=0; iy<image->getHeight(); iy++) {	
+		for(int ix=0; ix<image->getWidth(); ix++) {
+			Color src = image->getPixel(ix,iy);
+			Color destColor = getPixel(x+ix, y+iy);
+			Color finalColor = destColor.blendColor(src, blendingMode, blendAmount, blendColor);
+			setPixel(x+ix, y+iy, finalColor);
+		}
+	}
+}
+
 Image::Image() {
 	imageData = NULL;
 }

+ 24 - 0
Core/Contents/Source/PolyPerlin.cpp

@@ -247,6 +247,30 @@ Number Perlin::perlin_noise_2D(Number vec[2])
 	return result;
 }
 
+Number Perlin::perlin_noise_3D(Number vec[3])
+{
+  int terms    = mOctaves;
+	Number freq   = mFrequency;
+	Number result = 0.0f;
+  Number amp = mAmplitude;
+
+  vec[0]*=mFrequency;
+  vec[1]*=mFrequency;
+  vec[2]*=mFrequency;
+  
+	for( int i=0; i<terms; i++ )
+	{
+		result += noise3(vec)*amp;
+		vec[0] *= 2.0f;
+		vec[1] *= 2.0f;
+		vec[2] *= 2.0f;		
+		amp*=0.5f;
+	}
+
+
+	return result;
+}
+
 
 
 Perlin::Perlin(int octaves,Number freq,Number amp,int seed)

+ 1 - 1
IDE/Contents/Resources/UIThemes/default/theme.xml

@@ -5,7 +5,7 @@
 	<uiTextInputFontNameMultiLine>mono</uiTextInputFontNameMultiLine>
 	<uiDefaultFontSize>11</uiDefaultFontSize>
 	<uiTextInputFontSize>11</uiTextInputFontSize>
-	<uiTextInputFontSizeMultiline>11</uiTextInputFontSizeMultiline>	
+	<uiTextInputFontSizeMultiline>12</uiTextInputFontSizeMultiline>	
 	<uiTreeArrowIconImage>arrowIcon.png</uiTreeArrowIconImage>
 	<uiTreeCellHeight>20</uiTreeCellHeight>
 	<uiTreeCellPadding>4</uiTreeCellPadding>

+ 3 - 3
Modules/Contents/UI/Source/PolyUITextInput.cpp

@@ -111,7 +111,7 @@ UITextInput::UITextInput(bool multiLine, Number width, Number height) : ScreenEn
 		
 	insertLine(true);	
 	
-	blinkerRect = new ScreenShape(ScreenShape::SHAPE_RECT, 1, fontSize,0,0);
+	blinkerRect = new ScreenShape(ScreenShape::SHAPE_RECT, 1, fontSize+4,0,0);
 	blinkerRect->setPositionMode(ScreenEntity::POSITION_TOPLEFT);
 	blinkerRect->setColor(0,0,0,1);
 	addChild(blinkerRect);
@@ -430,7 +430,7 @@ void UITextInput::dragSelectionTo(Number x, Number y) {
 int UITextInput::caretSkipWordBack(int caretLine, int caretPosition) {
 	for(int i=caretPosition; i > 0; i--) {
 		String bit = lines[caretLine]->getText().substr(i,1);
-		wchar_t chr = ((wchar_t*)bit.c_str())[0]; 
+		char chr = ((char*)bit.c_str())[0]; 		
 		if(((chr > 0 && chr < 48) || (chr > 57 && chr < 65) || (chr > 90 && chr < 97) || (chr > 122 && chr < 127)) && i < caretPosition-1) {
 			return i+1;
 		}
@@ -442,7 +442,7 @@ int UITextInput::caretSkipWordForward(int caretLine, int caretPosition) {
 	int len = lines[caretLine]->getText().length();
 	for(int i=caretPosition; i < len; i++) {
 		String bit = lines[caretLine]->getText().substr(i,1);
-		wchar_t chr = ((wchar_t*)bit.c_str())[0]; 
+		char chr = ((char*)bit.c_str())[0]; 
 		if(((chr > 0 && chr < 48) || (chr > 57 && chr < 65) || (chr > 90 && chr < 97) || (chr > 122 && chr < 127)) && i > caretPosition) {
 			return i;
 		}