69 lines
4.2 KiB
C++
69 lines
4.2 KiB
C++
#pragma once
|
|
#include "element.h"
|
|
#include <SDL3/SDL.h>
|
|
#include "graphics.h"
|
|
|
|
class Rotate : public Element {
|
|
public:
|
|
int dir;
|
|
Rotate(int px, int py, int facing) : Element(px, py), dir{ facing } {
|
|
type = 923;
|
|
}
|
|
|
|
void draw(int posX, int posY, Logic0_RenderContext::RenderCtx* ctx) override {
|
|
SDL_SetRenderDrawColor(ctx->renderer, 0, 255, 255, 255);
|
|
|
|
if (dir == 1) { // Up
|
|
// Curved Loop
|
|
Graphics::RenderLine(ctx->renderer, posX + 20, posY + 10, posX + 16, posY + 10, 3);
|
|
Graphics::RenderLine(ctx->renderer, posX + 16, posY + 10, posX + 12, posY + 14, 3);
|
|
Graphics::RenderLine(ctx->renderer, posX + 12, posY + 14, posX + 12, posY + 26, 3);
|
|
Graphics::RenderLine(ctx->renderer, posX + 12, posY + 26, posX + 16, posY + 30, 3);
|
|
Graphics::RenderLine(ctx->renderer, posX + 16, posY + 30, posX + 24, posY + 30, 3);
|
|
Graphics::RenderLine(ctx->renderer, posX + 24, posY + 30, posX + 28, posY + 26, 3);
|
|
Graphics::RenderLine(ctx->renderer, posX + 28, posY + 26, posX + 28, posY + 10, 3);
|
|
// Arrowhead (pointing Up)
|
|
Graphics::RenderLine(ctx->renderer, posX + 23, posY + 15, posX + 28, posY + 10, 3);
|
|
Graphics::RenderLine(ctx->renderer, posX + 33, posY + 15, posX + 28, posY + 10, 3);
|
|
}
|
|
else if (dir == 2) { // Right
|
|
// Curved Loop
|
|
Graphics::RenderLine(ctx->renderer, posX + 30, posY + 20, posX + 30, posY + 16, 3);
|
|
Graphics::RenderLine(ctx->renderer, posX + 30, posY + 16, posX + 26, posY + 12, 3);
|
|
Graphics::RenderLine(ctx->renderer, posX + 26, posY + 12, posX + 14, posY + 12, 3);
|
|
Graphics::RenderLine(ctx->renderer, posX + 14, posY + 12, posX + 10, posY + 16, 3);
|
|
Graphics::RenderLine(ctx->renderer, posX + 10, posY + 16, posX + 10, posY + 24, 3);
|
|
Graphics::RenderLine(ctx->renderer, posX + 10, posY + 24, posX + 14, posY + 28, 3);
|
|
Graphics::RenderLine(ctx->renderer, posX + 14, posY + 28, posX + 30, posY + 28, 3);
|
|
// Arrowhead (pointing Right)
|
|
Graphics::RenderLine(ctx->renderer, posX + 25, posY + 23, posX + 30, posY + 28, 3);
|
|
Graphics::RenderLine(ctx->renderer, posX + 25, posY + 33, posX + 30, posY + 28, 3);
|
|
}
|
|
else if (dir == 3) { // Down
|
|
// Curved Loop
|
|
Graphics::RenderLine(ctx->renderer, posX + 20, posY + 30, posX + 24, posY + 30, 3);
|
|
Graphics::RenderLine(ctx->renderer, posX + 24, posY + 30, posX + 28, posY + 26, 3);
|
|
Graphics::RenderLine(ctx->renderer, posX + 28, posY + 26, posX + 28, posY + 14, 3);
|
|
Graphics::RenderLine(ctx->renderer, posX + 28, posY + 14, posX + 24, posY + 10, 3);
|
|
Graphics::RenderLine(ctx->renderer, posX + 24, posY + 10, posX + 16, posY + 10, 3);
|
|
Graphics::RenderLine(ctx->renderer, posX + 16, posY + 10, posX + 12, posY + 14, 3);
|
|
Graphics::RenderLine(ctx->renderer, posX + 12, posY + 14, posX + 12, posY + 30, 3);
|
|
// Arrowhead (pointing Down)
|
|
Graphics::RenderLine(ctx->renderer, posX + 17, posY + 25, posX + 12, posY + 30, 3);
|
|
Graphics::RenderLine(ctx->renderer, posX + 7, posY + 25, posX + 12, posY + 30, 3);
|
|
}
|
|
else if (dir == 4) { // Left
|
|
// Curved Loop
|
|
Graphics::RenderLine(ctx->renderer, posX + 10, posY + 20, posX + 10, posY + 24, 3);
|
|
Graphics::RenderLine(ctx->renderer, posX + 10, posY + 24, posX + 14, posY + 28, 3);
|
|
Graphics::RenderLine(ctx->renderer, posX + 14, posY + 28, posX + 26, posY + 28, 3);
|
|
Graphics::RenderLine(ctx->renderer, posX + 26, posY + 28, posX + 30, posY + 24, 3);
|
|
Graphics::RenderLine(ctx->renderer, posX + 30, posY + 24, posX + 30, posY + 16, 3);
|
|
Graphics::RenderLine(ctx->renderer, posX + 30, posY + 16, posX + 26, posY + 12, 3);
|
|
Graphics::RenderLine(ctx->renderer, posX + 26, posY + 12, posX + 10, posY + 12, 3);
|
|
// Arrowhead (pointing Left)
|
|
Graphics::RenderLine(ctx->renderer, posX + 15, posY + 17, posX + 10, posY + 12, 3);
|
|
Graphics::RenderLine(ctx->renderer, posX + 15, posY + 7, posX + 10, posY + 12, 3);
|
|
}
|
|
}
|
|
}; |