summaryrefslogtreecommitdiffhomepage
path: root/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'main.c')
-rw-r--r--main.c494
1 files changed, 459 insertions, 35 deletions
diff --git a/main.c b/main.c
index b4de147..fca3898 100644
--- a/main.c
+++ b/main.c
@@ -1,6 +1,8 @@
// Credit:
-// Raylib, Raygui, and the ray.png sprite are all made by Ramon Santamaria (@raysan5) (https://www.raylib.com)
+// Raylib and Raygui made by Ramon Santamaria (@raysan5) (https://www.raylib.com)
// kenney.png is made by Kenney (https://www.kenney.nl/assets/simplified-platformer-pack)
+// Font is "Liberation Sans"
+// Special thanks to Jae (@jdeokkim) for the initial concept
// Code is by _Tradam
#include "raylib.h"
@@ -24,35 +26,56 @@ const Rectangle elementSliders = {
const Rectangle elementCode = {
.x = 0 + elementMargin,
.y = (screenHeight / 3) + (elementMargin),
- .width = (screenWidth / 3) - elementMargin + 3,
+ .width = (screenWidth / 3) - (elementMargin),
.height = ((2 * screenHeight) / 3) - (elementMargin * 2)
};
const Rectangle elementPreRender = {
- .x = (screenWidth / 3) + elementMargin,
+ .x = (screenWidth / 3) + (elementMargin / 2),
.y = (screenHeight / 3) + elementMargin,
- .width = (screenWidth / 3) - elementMargin,
+ .width = (screenWidth / 3) - (elementMargin),
.height = ((2 * screenHeight) / 3) - (elementMargin * 2)
};
const Rectangle elementRender = {
- .x = ((2 * screenWidth) / 3) + elementMargin,
+ .x = ((2 * screenWidth) / 3),
.y = (screenHeight / 3) + elementMargin,
- .width = (screenWidth / 3) - (elementMargin * 2),
+ .width = (screenWidth / 3) - (elementMargin),
.height = ((2 * screenHeight) / 3) - (elementMargin * 2)
};
+Font sourceCodeFont;
+int fontSize = 14;
+int fontSpacing = 0;
+
+
+char codePreviewArray[21][66] = {
+ "DrawTexturePro(",
+ " texture,",
+ " (Rectangle) {",
+ "","","","", // 3-6 are filled out dynamically
+ " }, // in the texture space",
+ " (Rectangle) {",
+ "","","","", // 9-12 are filled out dynamically
+ " }, // in the screen space",
+ " (Vector2) {",
+ "","", // 15-16 are filled out dynamically
+ " }, // relative to 'dest' rectangle",
+ "", // 18 is filled out dynamically
+ " WHITE",
+ ");"
+};
// dtp mean draw texture pro
Rectangle dtpSource = {
.x = 0,
.y = 0,
- .width = 100,
- .height = 100
+ .width = 48,
+ .height = 48
};
Rectangle dtpDest = {
.x = 0,
.y = 0,
- .width = 100,
- .height = 100
+ .width = 96,
+ .height = 96
};
Vector2 dtpOrigin = {
.x = 0,
@@ -60,11 +83,13 @@ Vector2 dtpOrigin = {
};
int dtpRotation = 0;
-Texture2D raySprite;
-Texture2D kenneySprite;
-Texture2D* selectedTexture;
+const int gridSize = 20;
+const int gridCenter = 120;
-RenderTexture2D previewElement;
+Texture2D sampleSprite;
+
+RenderTexture2D previewElementPre;
+RenderTexture2D previewElementResult;
void DrawElementBorders();
void DrawUI();
@@ -77,10 +102,20 @@ int main()
SetTargetFPS(60);
GuiLoadStyle("assets/lavanda.rgs");
- raySprite = LoadTexture("assets/ray.png");
- kenneySprite = LoadTexture("assets/kenney.png");
+ sampleSprite = LoadTexture("assets/kenney.png");
+
+ sourceCodeFont = LoadFontEx("assets/LiberationMono-Regular.ttf", fontSize, 0, 250);
+ GuiSetFont(sourceCodeFont);
+
+ previewElementPre = LoadRenderTexture(
+ elementRender.width - 20,
+ elementRender.height - 20
+ );
+ previewElementResult = LoadRenderTexture(
+ elementRender.width - 20,
+ elementRender.height - 20
+ );
- selectedTexture = &raySprite;
while (!WindowShouldClose())
{
@@ -115,7 +150,7 @@ void DrawElementBorders() {
);
GuiGroupBox(
elementCode,
- "Equivalent Code"
+ "Corresponding Code"
);
DrawRectangle(
elementCode.x + 10,
@@ -126,7 +161,7 @@ void DrawElementBorders() {
);
GuiGroupBox(
elementPreRender,
- "Texture Being Read"
+ "Source Texture"
);
DrawRectangle(
elementPreRender.x + 10,
@@ -137,7 +172,7 @@ void DrawElementBorders() {
);
GuiGroupBox(
elementRender,
- "Texture Being Rendered"
+ "Rendered Texture"
);
DrawRectangle(
elementRender.x + 10,
@@ -151,16 +186,17 @@ void DrawElementBorders() {
void DrawUI() {
//elementSlider.x + elementBorderWidth
char buffer[10];
- int xOffset = 50;
+ int xOffset = 60;
int yOffset = 40;
const int sliderSpacing = 10;
const int sliderHeight = 20;
+ const int sliderWidth = 200;
GuiLabel(
(Rectangle) {
.x = elementSliders.x + xOffset - 25,
.y = elementSliders.y + yOffset - sliderHeight - (sliderSpacing / 2),
- .width = 200,
+ .width = sliderWidth,
.height = sliderHeight
},
"Source"
@@ -170,58 +206,446 @@ void DrawUI() {
(Rectangle) {
.x = elementSliders.x + xOffset,
.y = elementSliders.y + yOffset,
- .width = 200,
+ .width = sliderWidth,
.height = sliderHeight
},
"x",
buffer,
dtpSource.x,
- 0,
- 100
+ -192,
+ 192
);
sprintf(buffer, "%d", (int)dtpSource.y),
dtpSource.y = GuiSlider(
(Rectangle) {
.x = elementSliders.x + xOffset,
.y = elementSliders.y + yOffset + sliderHeight + sliderSpacing,
- .width = 200,
+ .width = sliderWidth,
.height = sliderHeight
},
"y",
buffer,
dtpSource.y,
- 0,
- 100
+ -192,
+ 192
);
sprintf(buffer, "%d", (int)dtpSource.width),
dtpSource.width = GuiSlider(
(Rectangle) {
.x = elementSliders.x + xOffset,
.y = elementSliders.y + yOffset + ((sliderHeight + sliderSpacing) * 2),
- .width = 200,
+ .width = sliderWidth,
.height = sliderHeight
},
"Width",
buffer,
dtpSource.width,
- 0,
- 100
+ -192,
+ 192
);
sprintf(buffer, "%d", (int)dtpSource.height),
dtpSource.height = GuiSlider(
(Rectangle) {
.x = elementSliders.x + xOffset,
.y = elementSliders.y + yOffset + ((sliderHeight + sliderSpacing) * 3),
- .width = 200,
+ .width = sliderWidth,
.height = sliderHeight
},
"Height",
buffer,
dtpSource.height,
- 0,
- 100
+ -192,
+ 192
+ );
+
+
+ xOffset = 150 + sliderWidth;
+ GuiLabel(
+ (Rectangle) {
+ .x = elementSliders.x + xOffset - 25,
+ .y = elementSliders.y + yOffset - sliderHeight - (sliderSpacing / 2),
+ .width = sliderWidth,
+ .height = sliderHeight
+ },
+ "Dest"
+ );
+ sprintf(buffer, "%d", (int)dtpDest.x),
+ dtpDest.x = GuiSlider(
+ (Rectangle) {
+ .x = elementSliders.x + xOffset,
+ .y = elementSliders.y + yOffset,
+ .width = sliderWidth,
+ .height = sliderHeight
+ },
+ "x",
+ buffer,
+ dtpDest.x,
+ -192,
+ 192
+ );
+ sprintf(buffer, "%d", (int)dtpDest.y),
+ dtpDest.y = GuiSlider(
+ (Rectangle) {
+ .x = elementSliders.x + xOffset,
+ .y = elementSliders.y + yOffset + sliderHeight + sliderSpacing,
+ .width = sliderWidth,
+ .height = sliderHeight
+ },
+ "y",
+ buffer,
+ dtpDest.y,
+ -192,
+ 192
+ );
+ sprintf(buffer, "%d", (int)dtpDest.width),
+ dtpDest.width = GuiSlider(
+ (Rectangle) {
+ .x = elementSliders.x + xOffset,
+ .y = elementSliders.y + yOffset + ((sliderHeight + sliderSpacing) * 2),
+ .width = sliderWidth,
+ .height = sliderHeight
+ },
+ "Width",
+ buffer,
+ dtpDest.width,
+ -192,
+ 192
+ );
+ sprintf(buffer, "%d", (int)dtpDest.height),
+ dtpDest.height = GuiSlider(
+ (Rectangle) {
+ .x = elementSliders.x + xOffset,
+ .y = elementSliders.y + yOffset + ((sliderHeight + sliderSpacing) * 3),
+ .width = sliderWidth,
+ .height = sliderHeight
+ },
+ "Height",
+ buffer,
+ dtpDest.height,
+ -192,
+ 192
+ );
+
+ xOffset = 425 + sliderWidth;
+ GuiLabel(
+ (Rectangle) {
+ .x = elementSliders.x + xOffset - 25,
+ .y = elementSliders.y + yOffset - sliderHeight - (sliderSpacing / 2),
+ .width = sliderWidth,
+ .height = sliderHeight
+ },
+ "Origin"
+ );
+ sprintf(buffer, "%d", (int)dtpOrigin.x),
+ dtpOrigin.x = GuiSlider(
+ (Rectangle) {
+ .x = elementSliders.x + xOffset,
+ .y = elementSliders.y + yOffset,
+ .width = sliderWidth,
+ .height = sliderHeight
+ },
+ "x",
+ buffer,
+ dtpOrigin.x,
+ -192,
+ 192
+ );
+ sprintf(buffer, "%d", (int)dtpOrigin.y),
+ dtpOrigin.y = GuiSlider(
+ (Rectangle) {
+ .x = elementSliders.x + xOffset,
+ .y = elementSliders.y + yOffset + sliderHeight + sliderSpacing,
+ .width = sliderWidth,
+ .height = sliderHeight
+ },
+ "y",
+ buffer,
+ dtpOrigin.y,
+ -192,
+ 192
+ );
+
+ yOffset = 40 + 15 + elementSliders.y + sliderHeight + sliderSpacing,
+ GuiLabel(
+ (Rectangle) {
+ .x = elementSliders.x + xOffset - 25,
+ .y = elementSliders.y + yOffset - sliderHeight - (sliderSpacing / 2),
+ .width = sliderWidth,
+ .height = sliderHeight
+ },
+ "Rotation"
+ );
+ sprintf(buffer, "%d", (int)dtpRotation),
+ dtpRotation = GuiSlider(
+ (Rectangle) {
+ .x = elementSliders.x + xOffset,
+ .y = elementSliders.y + yOffset,
+ .width = sliderWidth,
+ .height = sliderHeight
+ },
+ "",
+ buffer,
+ dtpRotation,
+ -360,
+ 360
);
};
void DrawCodeDisplay() {};
-void DrawOutput() {};
+void DrawOutput() {
+ BeginTextureMode(previewElementPre);
+ ClearBackground(RAYWHITE);
+ int a;
+ for( a = 0; a <= (int)previewElementPre.texture.width; a += gridSize){
+ int lineWidth = 1;
+ if (a == gridCenter) { lineWidth += 2; };
+ DrawLineEx(
+ (Vector2) {
+ .x = a,
+ .y = 0
+ },
+ (Vector2) {
+ .x = a,
+ .y = (int)previewElementPre.texture.height
+ },
+ lineWidth,
+ BLACK
+ );
+ }
+ for( a = 0; a <= (int)previewElementPre.texture.height; a += gridSize){
+ int lineWidth = 1;
+ if (a == gridCenter) { lineWidth += 2; };
+ DrawLineEx(
+ (Vector2) {
+ .x = 0,
+ .y = a
+ },
+ (Vector2) {
+ .x = (int)previewElementPre.texture.width,
+ .y = a
+ },
+ lineWidth,
+ BLACK
+ );
+ }
+ DrawTexturePro(
+ sampleSprite,
+ (Rectangle) {
+ .x = 0,
+ .y = 0,
+ .width = sampleSprite.width,
+ .height = sampleSprite.height,
+ },
+ (Rectangle) {
+ .x = 0 + gridCenter,
+ .y = 0 + gridCenter,
+ .width = sampleSprite.width,
+ .height = sampleSprite.height,
+ },
+ (Vector2){
+ .x = 0,
+ .y = 0
+ },
+ 0,
+ WHITE
+ );
+ Rectangle sourceRect = {
+ .x = dtpSource.x + gridCenter,
+ .y = dtpSource.y + gridCenter,
+ .width = dtpSource.width,
+ .height = dtpSource.height
+ };
+ if (sourceRect.width < 0) {
+ sourceRect.width *= -1;
+ }
+ if (sourceRect.height < 0) {
+ sourceRect.height *= -1;
+
+ }
+ DrawRectangleLinesEx(
+ (Rectangle) {
+ .x = sourceRect.x,
+ .y = sourceRect.y,
+ .width = sourceRect.width,
+ .height = sourceRect.height,
+ },
+ 2,
+ RED
+ );
+ DrawTextEx(
+ sourceCodeFont,
+ "Source",
+ (Vector2) {
+ .x = sourceRect.x,
+ .y = sourceRect.y - fontSize + 1
+ },
+ fontSize,
+ fontSpacing,
+ RED
+ );
+ EndTextureMode();
+ DrawTexturePro(
+ previewElementPre.texture,
+ (Rectangle) {
+ .x = 0,
+ .y = 0,
+ .width = previewElementPre.texture.width,
+ .height = -previewElementPre.texture.height
+ },
+ (Rectangle) {
+ .x = elementPreRender.x + 10,
+ .y = elementPreRender.y + 10,
+ .width = previewElementPre.texture.width,
+ .height = previewElementPre.texture.height
+ },
+ (Vector2) {
+ .x = 0,
+ .y = 0
+ },
+ 0,
+ WHITE
+ );
+ BeginTextureMode(previewElementResult);
+ ClearBackground(RAYWHITE);
+ for( a = 0; a <= (int)previewElementResult.texture.width; a += gridSize){
+ int lineWidth = 1;
+ if (a == gridCenter) { lineWidth += 2; };
+ DrawLineEx(
+ (Vector2) {
+ .x = a,
+ .y = 0
+ },
+ (Vector2) {
+ .x = a,
+ .y = (int)previewElementResult.texture.height
+ },
+ lineWidth,
+ BLACK
+ );
+ }
+ for( a = 0; a <= (int)previewElementResult.texture.height; a += gridSize){
+ int lineWidth = 1;
+ if (a == gridCenter) { lineWidth += 2; };
+ DrawLineEx(
+ (Vector2) {
+ .x = 0,
+ .y = a
+ },
+ (Vector2) {
+ .x = (int)previewElementResult.texture.width,
+ .y = a
+ },
+ lineWidth,
+ BLACK
+ );
+ }
+ DrawTexturePro(
+ sampleSprite,
+ (Rectangle) {
+ .x = dtpSource.x,
+ .y = dtpSource.y,
+ .width = dtpSource.width,
+ .height = dtpSource.height,
+ },
+ (Rectangle) {
+ .x = dtpDest.x + gridCenter,
+ .y = dtpDest.y + gridCenter,
+ .width = dtpDest.width,
+ .height = dtpDest.height,
+ },
+ (Vector2){
+ .x = dtpOrigin.x,
+ .y = dtpOrigin.y
+ },
+ dtpRotation,
+ WHITE
+ );
+ Rectangle destRect = {
+ .x = dtpDest.x + gridCenter,
+ .y = dtpDest.y + gridCenter,
+ .width = dtpDest.width,
+ .height = dtpDest.height
+ };
+ if (destRect.width < 0) {
+ destRect.width *= -1;
+ }
+ if (destRect.height < 0) {
+ destRect.height *= -1;
+
+ }
+ DrawRectangleLinesEx(
+ (Rectangle) {
+ .x = destRect.x,
+ .y = destRect.y,
+ .width = destRect.width,
+ .height = destRect.height,
+ },
+ 2,
+ DARKGREEN
+ );
+ DrawTextEx(
+ sourceCodeFont,
+ "Dest",
+ (Vector2) {
+ .x = destRect.x,
+ .y = destRect.y - fontSize + 1
+ },
+ fontSize,
+ fontSpacing,
+ DARKGREEN
+ );
+ EndTextureMode();
+ DrawTexturePro(
+ previewElementResult.texture,
+ (Rectangle) {
+ .x = 0,
+ .y = 0,
+ .width = previewElementResult.texture.width,
+ .height = -previewElementResult.texture.height
+ },
+ (Rectangle) {
+ .x = elementRender.x + 10,
+ .y = elementRender.y + 10,
+ .width = previewElementResult.texture.width,
+ .height = previewElementResult.texture.height
+ },
+ (Vector2) {
+ .x = 0,
+ .y = 0
+ },
+ 0,
+ WHITE
+ );
+ //elementCode
+
+ sprintf(codePreviewArray[3], " .x = %d.0f,", (int)dtpSource.x);
+ sprintf(codePreviewArray[4], " .y = %d.0f,", (int)dtpSource.y);
+ sprintf(codePreviewArray[5], " .width = %d.0f,", (int)dtpSource.width);
+ sprintf(codePreviewArray[6], " .height = %d.0f", (int)dtpSource.height);
+ sprintf(codePreviewArray[9], " .x = %d.0f,", (int)dtpDest.x);
+ sprintf(codePreviewArray[10], " .y = %d.0f,", (int)dtpDest.y);
+ sprintf(codePreviewArray[11], " .width = %d.0f,", (int)dtpDest.width);
+ sprintf(codePreviewArray[12], " .height = %d.0f", (int)dtpDest.height);
+ sprintf(codePreviewArray[15], " .x = %d.0f,", (int)dtpOrigin.x);
+ sprintf(codePreviewArray[16], " .y = %d.0f,", (int)dtpOrigin.y);
+ sprintf(codePreviewArray[18], " %d, // rotation", (int)dtpRotation);
+
+ for(int b = 0; b < 21; b += 1) {
+ Color tempColor = BLACK;
+ if((b > 1) && (b < 8)) { tempColor = RED; }
+ else if((b > 7) && (b < 14)) { tempColor = DARKGREEN; }
+ else if((b > 13) && (b < 18)) { tempColor = BLUE; }
+ else if(b == 18) { tempColor = DARKPURPLE; }
+ DrawTextEx(
+ sourceCodeFont,
+ codePreviewArray[b],
+ (Vector2) {
+ .x = elementCode.x + 15,
+ .y = elementCode.y + 15 + ((fontSize + 1) * b)
+ },
+ fontSize,
+ fontSpacing,
+ tempColor
+ );
+ }
+};