252 lines
8.1 KiB
C++
Raw Normal View History

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
#include <math.h>
#include <3ds.h>
#include <functional>
#include <memory>
#include "starlight/InputManager.h"
#include "starlight/datatypes/Vector2.h"
#include "starlight/ThemeManager.h"
#include "starlight/gfx/ThemeRef.h"
#include "starlight/ui/TouchScreenCanvas.h"
#include "starlight/ui/ScrollField.h"
#include "starlight/ui/Button.h"
#include "starlight/gfx/DrawableTest.h"
#include "starlight/gfx/DrawContextTouchscreen.h"
#include "starlight/gfx/DrawContextCanvas.h"
#include "starlight/GFXManager.h"
#include "starlight/gfx/RenderCore.h"
#define CONFIG_3D_SLIDERSTATE (*(float *)0x1FF81080)
#include "Core.h"
using starlight::Vector2;
using starlight::VRect;
using starlight::Color;
using starlight::InputManager;
using starlight::GFXManager;
using starlight::ThemeManager;
using starlight::gfx::RenderCore;
/*Handle *signalEvent = NULL;
Handle *resumeEvent = NULL;
Handle *nssHandle = NULL;//*/
//aptMessageCb callback = {NULL, APPID_HOMEMENU, "boop", sizeof("boop")};
/*void __appInit() {
srvInit();
hidInit();
fsInit();
sdmcInit();
gfxInitDefault();
consoleInit(GFX_TOP, NULL);
}//*/
float fRand() {
return static_cast <float> (rand()) / static_cast <float> (RAND_MAX);
}
bool quit = false;
int main()
{
Core().Run();
return 0;
/*printf("does this draw\n");
APT_Initialize(APPID_HOMEMENU, aptMakeAppletAttr(APTPOS_SYS, true, true), signalEvent, resumeEvent);
while (aptMainLoop()) {
hidScanInput();
u32 k = hidKeysDown();
if (k & KEY_A) printf("this is a test\n");
if (k & KEY_START) return 0;
gfxFlushBuffers();
gfxSwapBuffers();
gspWaitForVBlank();
}*/
// Set the random seed based on the time
srand(time(NULL));
romfsInit();
RenderCore::Open();
float offset3d = 0.0f;
float rad = 0.0f;
u16 touch_x = 320/2;
u16 touch_y = 240/2;
touchPosition touch;
circlePosition circle;
u32 held;
Vector2 circpos (16.0f, 16.0f);
char sbuf[100];
// stuff!
auto touchscreen = std::make_shared<starlight::ui::TouchScreenCanvas>();
//auto container = std::make_shared<starlight::ui::UIContainer>(VRect(32,32,320-32,240-32));
//auto container = std::make_shared<starlight::ui::UICanvas>(VRect(32,32,320-32,240-32));
auto container = std::make_shared<starlight::ui::ScrollField>(VRect(0,0,320-0,240-0));
auto button = std::make_shared<starlight::ui::Button>(VRect(4,80,128,32));
//auto button = std::make_shared<starlight::ui::Button>(VRect(0,0,320-32,240-32));
touchscreen->Add(container);
container->Add(button);
button->label = "I'm a button.";
button->eOnTap = [](auto& btn){
btn.label = "I was pressed!";
btn.eOnTap = [](auto& btn){
btn.label = "Event swap!";
btn.eOnTap = [](auto& btn){
//quit = true;
btn.label = "Clicked again!\nBunch of lines!\nNow testing scrollarea fling with some extra size!\n\n\nPotato.";
btn.rect.size.y = 573;
};
};
};
Color bgColor = Color(0,0,0);
consoleInit(GFX_TOP, consoleGetDefault());
while (aptMainLoop()) {
if (quit) break;
InputManager::Update();
held = hidKeysHeld();
Vector2 cpad = InputManager::CirclePad();
if (held & (KEY_Y | KEY_START)) {
break;
} else if (held & KEY_TOUCH) {
hidTouchRead(&touch);
touch_x = touch.px;
touch_y = touch.py;
} else if (held & (KEY_L | KEY_R)) {
//sf2d_set_clear_color(RGBA8(rand()%255, rand()%255, rand()%255, 255));
bgColor = Color(fRand(), fRand(), fRand());
} else if (held & KEY_Y) rad = 0;
//if (InputManager::Held(KEY_TOUCH))
circpos = circpos + InputManager::TouchDelta();
offset3d = CONFIG_3D_SLIDERSTATE * 30.0f;
/*sf2d_start_frame(GFX_TOP, GFX_LEFT);
sf2d_draw_fill_circle(offset3d + 60, 100, 35, RGBA8(0x00, 0xFF, 0x00, 0xFF));
sf2d_draw_fill_circle(circpos.x + cpad.x * 20.0f, circpos.y + cpad.y * 20.0f, 55, RGBA8(0xFF, 0xFF, 0x00, (int)(0xFF * (0.75f * cpad.Length() + 0.25f))));
sf2d_draw_rectangle_rotate(offset3d + 260, 20, 40, 40, RGBA8(0xFF, 0xFF, 0x00, 0xFF), -2.0f*rad);
sf2d_draw_rectangle(offset3d + 20, 60, 40, 40, RGBA8(0xFF, 0x00, 0x00, 0xFF));
sf2d_draw_rectangle(offset3d + 5, 5, 30, 30, RGBA8(0x00, 0xFF, 0xFF, 0xFF));
//sf2d_draw_texture_rotate(tex1, offset3d + 400/2 + circle.dx, 240/2 - circle.dy, rad);
sf2d_end_frame();//*/
/*static int ct = 0;
static u32 c1 = starlight::Color(1,0,0);
static u32 c2 = starlight::Color(0,0,1);
ct = ++ct % 3;
if (ct == 0) {
//std::swap(c1, c2);
c1 = RGBA8(rand()%255, rand()%255, rand()%255, 255);
c2 = RGBA8(rand()%255, rand()%255, rand()%255, 255);
if (offset3d == 0) c1 = 0;
}
sf2d_start_frame(GFX_TOP, GFX_LEFT);
sf2d_draw_rectangle(0,0,400,240,c1);
sf2d_end_frame();
sf2d_start_frame(GFX_TOP, GFX_RIGHT);
sf2d_draw_rectangle(0,0,400,240,c2);
//sftd_draw_text(font, 3, 1, RGBA8(255,255,255,255), 16, "THEY'RE MOULDY YOU PILLOCK\nWelcome to the secret text~");
sf2d_end_frame();*/
/*sf2d_start_frame(GFX_BOTTOM, GFX_LEFT); {
const int tileSize = 48;
const int tileSpace = 3;
for (int iy = 0; iy < 4; iy++) {
for (int ix = 0; ix < 5; ix++) {
sf2d_draw_rectangle(34 + ix * (tileSize+tileSpace), 3 + iy * (tileSize+tileSpace), tileSize, tileSize, RGBA8(0x7F, 0xBF, 0xFF, 0xFF));
}
}
Vector2 test (circle.dx, circle.dy);
test = test * .5f;
Vector2 tdrag = InputManager::TouchDelta();
sprintf(sbuf, "Circle pad: %f, %f\nTouch: %f, %f\nVec: %f", cpad.x, cpad.y, tdrag.x, tdrag.y, test.x);
sftd_draw_text(font, 3, 3, RGBA8(0xff, 0xff, 0xff, 0xff), 16, sbuf);
} sf2d_end_frame();*/
/*using starlight::GFXManager;
static auto drw = starlight::ThemeManager::GetAsset("whatever");
static auto tgt = std::make_shared<starlight::gfx::DrawContextCanvas>(starlight::VRect(0,0,32*3,32*3));
GFXManager::PushContext(con.get());
tgt->Clear(starlight::Color(1,0,0,0.5f));
GFXManager::PushContext(static_cast<starlight::gfx::DrawContext*>(tgt.get()));
drw->Draw(Vector2(0, 0));
drw->Draw(Vector2(24, 8));
drw->Draw(Vector2(0, 63));
drw->Draw(Vector2(48, 63));
drw->Draw(Vector2(63, 48));
GFXManager::PopContext();
tgt->Draw(Vector2(200, 50), nullptr, nullptr, nullptr, rad*0.1f);
drw->Draw(Vector2(0, 0));
drw->Draw(Vector2(24, 8));
auto rect = starlight::VRect(32, 32, 64, 32);
for (int q = 0; q < 5; q++) {
drw->Draw(rect, nullptr, starlight::Color(1,1,1));
drw->Draw(rect.Expand(Vector2::one * -0.5f, Vector2::one), nullptr, starlight::Color(0.5f,0.5f,0.5f));
drw->Draw(rect.Expand(Vector2::one * -1), nullptr, starlight::Color(0.75f,0.75f,0.75f));
rect.pos.y += 34;
}
GFXManager::PopContext();*/
RenderCore::BeginFrame();
//RenderCore::targetTopLeft->Clear(Color(0,0,0));
//RenderCore::targetTopLeft->BindTarget();
RenderCore::targetBottom->Clear(bgColor);
//container->rect += InputManager::TouchDelta();
button->rect += InputManager::CirclePad() * 5.0f;
touchscreen->Update();
touchscreen->PreDraw();
touchscreen->Draw();
rad += 0.2f;
RenderCore::EndFrame();
ThemeManager::LoadProc();
}
RenderCore::Close();//sf2d_fini();
return 0;
}