Compare commits
2 Commits
36e341d0b4
...
033e6df50b
Author | SHA1 | Date |
---|---|---|
![]() |
033e6df50b | |
![]() |
2803a05571 |
|
@ -9,7 +9,7 @@
|
|||
#include "sww/util.h"
|
||||
#include "sww/window.h"
|
||||
|
||||
#define MAX_SCENE 10
|
||||
#define MAX_SCENE 11
|
||||
|
||||
#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)kDim)
|
||||
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 w = 512, h = 512;
|
||||
|
@ -220,7 +282,10 @@ int main()
|
|||
}
|
||||
}
|
||||
} break;
|
||||
case 9:
|
||||
case 9: {
|
||||
Animation(ud.renderer);
|
||||
} break;
|
||||
case 10:
|
||||
default: {
|
||||
swwRenderer_DrawArc(ud.renderer, (Point2i){cw, ch}, 150, 30.f, 90.f,
|
||||
Color_RGB(0x00, 0x00, 0xff), 0);
|
||||
|
|
Loading…
Reference in New Issue