feat: shapes
This commit is contained in:
parent
36e341d0b4
commit
2803a05571
|
@ -9,7 +9,7 @@
|
||||||
#include "sww/util.h"
|
#include "sww/util.h"
|
||||||
#include "sww/window.h"
|
#include "sww/window.h"
|
||||||
|
|
||||||
#define MAX_SCENE 10
|
#define MAX_SCENE 11
|
||||||
|
|
||||||
#define TITLE "SWW Shapes"
|
#define TITLE "SWW Shapes"
|
||||||
|
|
||||||
|
@ -128,6 +128,68 @@ void HideSphere(swwRenderer* o, int cx, int cy, float r, int alpha, int beta, in
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const uint32_t kDim = 512;
|
||||||
|
const uint32_t kFrames = 48;
|
||||||
|
|
||||||
|
static void Animation(swwRenderer* o)
|
||||||
|
{
|
||||||
|
static uint32_t i = 0;
|
||||||
|
const uint32_t size = kDim * kDim * 4;
|
||||||
|
|
||||||
|
// A fading sphere
|
||||||
|
uint8_t alpha = 255;
|
||||||
|
if (i < kFrames / 2) {
|
||||||
|
alpha = (uint8_t)(255 * (i / ((float)kFrames / 2)));
|
||||||
|
} else {
|
||||||
|
alpha = (uint8_t)(255 * (((kFrames / 2) - (i - kFrames / 2)) / ((float)kFrames / 2)));
|
||||||
|
}
|
||||||
|
|
||||||
|
const int spherew = 60;
|
||||||
|
const int spherex = (kDim - spherew) / 2;
|
||||||
|
const int maxdist = (spherew / 2) * (spherew / 2);
|
||||||
|
for (int x = spherex; x < spherex + spherew; x++) {
|
||||||
|
for (int y = 20; y < 20 + spherew; y++) {
|
||||||
|
float distx = x - (spherex + (float)spherew / 2);
|
||||||
|
float disty = y - (20 + (float)spherew / 2);
|
||||||
|
float dist = distx * distx + disty * disty;
|
||||||
|
|
||||||
|
if (dist > maxdist)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
const float fill = dist / maxdist;
|
||||||
|
const uint8_t grey = (uint8_t)(fill * 255);
|
||||||
|
|
||||||
|
uint8_t myalpha = alpha;
|
||||||
|
if (fill > 0.9)
|
||||||
|
myalpha *= (uint8_t)((1.0f - fill) * 10);
|
||||||
|
|
||||||
|
swwRenderer_DrawPixel(o, (Point2i){x, y}, Color_RGBA(grey, grey, grey, myalpha));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// A moving blob
|
||||||
|
const float pos = (i / (float)kFrames) * 2 - 0.5f;
|
||||||
|
|
||||||
|
const int xoffset = (int)(pos * kDim);
|
||||||
|
const int yoffset = 2 * kDim / 3;
|
||||||
|
const int w = kDim / 4;
|
||||||
|
|
||||||
|
for (int x = -w; x < w; x++) {
|
||||||
|
if (x + xoffset < 0 || x + xoffset >= (int)dim)
|
||||||
|
continue;
|
||||||
|
for (int y = yoffset - w; y < yoffset + w; y++) {
|
||||||
|
const uint8_t grey = abs(y - yoffset);
|
||||||
|
swwRenderer_DrawPixel(o, (Point2i){x + xoffset, y}, Color_RGBA(grey, grey, grey, 127));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i < kFrames) {
|
||||||
|
++i;
|
||||||
|
} else {
|
||||||
|
i = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
int w = 512, h = 512;
|
int w = 512, h = 512;
|
||||||
|
@ -220,7 +282,10 @@ int main()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
case 9:
|
case 9: {
|
||||||
|
Animation(ud.renderer);
|
||||||
|
} break;
|
||||||
|
case 10:
|
||||||
default: {
|
default: {
|
||||||
swwRenderer_DrawArc(ud.renderer, (Point2i){cw, ch}, 150, 30.f, 90.f,
|
swwRenderer_DrawArc(ud.renderer, (Point2i){cw, ch}, 150, 30.f, 90.f,
|
||||||
Color_RGB(0x00, 0x00, 0xff), 0);
|
Color_RGB(0x00, 0x00, 0xff), 0);
|
||||||
|
|
Loading…
Reference in New Issue