mirror of
https://github.com/Relintai/programming_tutorials.git
synced 2025-04-21 21:51:22 +02:00
Created more txts. They still need to be cleaned up.
This commit is contained in:
parent
aad056d9b1
commit
c7869b4d35
@ -12,17 +12,16 @@ void MainScene::update(float delta) {
|
||||
void MainScene::render() {
|
||||
Renderer::get_singleton()->clear();
|
||||
|
||||
_camera->viewport.x -= 1;
|
||||
_camera->viewport.x += _dir;
|
||||
|
||||
if (_camera->viewport.x >= 300)
|
||||
_camera->viewport.x = 0;
|
||||
if (_camera->viewport.x <= -100)
|
||||
_dir = 1;
|
||||
else if (_camera->viewport.x >= 100)
|
||||
_dir = -1;
|
||||
|
||||
_camera->bind();
|
||||
|
||||
_sprite->set_x(30);
|
||||
_sprite->set_y(30);
|
||||
|
||||
Renderer::get_singleton()->draw_sprite(_sprite);
|
||||
_sprite->draw();
|
||||
}
|
||||
|
||||
MainScene::MainScene() {
|
||||
@ -30,6 +29,11 @@ MainScene::MainScene() {
|
||||
_image = new Image("ti.bmp");
|
||||
_texture = new Texture(_image);
|
||||
_sprite = new Sprite(_texture);
|
||||
|
||||
_sprite->set_x(30);
|
||||
_sprite->set_y(30);
|
||||
|
||||
_dir = 1;
|
||||
}
|
||||
|
||||
MainScene::~MainScene() {
|
||||
|
@ -21,6 +21,7 @@ public:
|
||||
Image *_image;
|
||||
Texture *_texture;
|
||||
Sprite *_sprite;
|
||||
int _dir;
|
||||
};
|
||||
|
||||
#endif
|
10
21_sdl_scene.txt
Normal file
10
21_sdl_scene.txt
Normal file
@ -0,0 +1,10 @@
|
||||
|
||||
class Scene {
|
||||
public:
|
||||
virtual void event(const SDL_Event &ev) = 0;
|
||||
virtual void update(float delta) = 0;
|
||||
virtual void render() = 0;
|
||||
|
||||
Scene();
|
||||
virtual ~Scene();
|
||||
};
|
95
22_sdl_application.txt
Normal file
95
22_sdl_application.txt
Normal file
@ -0,0 +1,95 @@
|
||||
|
||||
class Application {
|
||||
public:
|
||||
bool running;
|
||||
int target_fps;
|
||||
|
||||
virtual void event(const SDL_Event ¤t_event);
|
||||
virtual void update(float delta);
|
||||
virtual void render();
|
||||
|
||||
void main_loop();
|
||||
|
||||
Application();
|
||||
virtual ~Application();
|
||||
|
||||
Scene *scene;
|
||||
|
||||
static Application* get_singleton();
|
||||
|
||||
double frame_delta = 0;
|
||||
|
||||
protected:
|
||||
static Application* _instance;
|
||||
};
|
||||
|
||||
|
||||
|
||||
Application* Application::_instance = nullptr;
|
||||
|
||||
#include <chrono>
|
||||
|
||||
void Application::event(const SDL_Event ¤t_event) {
|
||||
switch (current_event.type) {
|
||||
case SDL_QUIT:
|
||||
running = false;
|
||||
break;
|
||||
}
|
||||
|
||||
scene->event(current_event);
|
||||
}
|
||||
|
||||
void Application::update(float delta) {
|
||||
scene->update(delta);
|
||||
}
|
||||
void Application::render() {
|
||||
scene->render();
|
||||
|
||||
Renderer::get_singleton()->present();
|
||||
}
|
||||
|
||||
void Application::main_loop() {
|
||||
std::chrono::high_resolution_clock::time_point start = std::chrono::high_resolution_clock::now();
|
||||
|
||||
//handle input
|
||||
SDL_Event current_event;
|
||||
while (SDL_PollEvent(¤t_event)) {
|
||||
event(current_event);
|
||||
}
|
||||
|
||||
update(frame_delta);
|
||||
render();
|
||||
|
||||
std::chrono::high_resolution_clock::time_point end = std::chrono::high_resolution_clock::now();
|
||||
std::chrono::duration<double> elapsed_seconds = end - start;
|
||||
double t = elapsed_seconds.count();
|
||||
|
||||
double tfps = 1.0 / static_cast<double>(target_fps);
|
||||
|
||||
double remaining = tfps - t;
|
||||
|
||||
if (remaining > 0) {
|
||||
Uint32 fms = static_cast<Uint32>(remaining * 1000.0);
|
||||
|
||||
frame_delta = tfps;
|
||||
|
||||
SDL_Delay(fms);
|
||||
} else {
|
||||
frame_delta = t;
|
||||
}
|
||||
}
|
||||
|
||||
Application::Application() {
|
||||
running = true;
|
||||
target_fps = 60;
|
||||
|
||||
scene = nullptr;
|
||||
_instance = this;
|
||||
}
|
||||
Application::~Application() {
|
||||
_instance = nullptr;
|
||||
}
|
||||
|
||||
Application* Application::get_singleton() {
|
||||
return _instance;
|
||||
}
|
63
23_sdl_main.txt
Normal file
63
23_sdl_main.txt
Normal file
@ -0,0 +1,63 @@
|
||||
|
||||
|
||||
#include "application.h"
|
||||
#include "renderer.h"
|
||||
|
||||
#include "impl_application.h"
|
||||
|
||||
Renderer *renderer = nullptr;
|
||||
Application *application = nullptr;
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
renderer = new Renderer();
|
||||
application = new ImplApplication();
|
||||
|
||||
while (application->running) {
|
||||
application->main_loop();
|
||||
}
|
||||
|
||||
delete application;
|
||||
delete renderer;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef __EMSCRIPTEN__
|
||||
#include <emscripten.h>
|
||||
#endif
|
||||
|
||||
#include "application.h"
|
||||
#include "renderer.h"
|
||||
|
||||
#include "impl_application.h"
|
||||
#define APPLICATION_CLASS ImplApplication
|
||||
|
||||
Renderer *renderer = nullptr;
|
||||
Application *application = nullptr;
|
||||
|
||||
void handle_frame() {
|
||||
application->main_loop();
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
renderer = new Renderer();
|
||||
application = new APPLICATION_CLASS();
|
||||
|
||||
#ifdef __EMSCRIPTEN__
|
||||
emscripten_set_main_loop(handle_frame, 0, 1);
|
||||
#else
|
||||
while (application->running) {
|
||||
application->main_loop();
|
||||
}
|
||||
#endif
|
||||
|
||||
delete application;
|
||||
delete renderer;
|
||||
|
||||
return 0;
|
||||
}
|
90
24_sdl_main_scene.txt
Normal file
90
24_sdl_main_scene.txt
Normal file
@ -0,0 +1,90 @@
|
||||
|
||||
|
||||
class MainScene : public Scene {
|
||||
public:
|
||||
void event(const SDL_Event &ev);
|
||||
void update(float delta);
|
||||
void render();
|
||||
|
||||
MainScene();
|
||||
~MainScene();
|
||||
|
||||
Camera *_camera;
|
||||
Image *_image;
|
||||
Texture *_texture;
|
||||
Sprite *_sprite;
|
||||
int _dir;
|
||||
};
|
||||
|
||||
|
||||
#include "main_scene.h"
|
||||
|
||||
#include "renderer.h"
|
||||
|
||||
|
||||
void MainScene::event(const SDL_Event &ev) {
|
||||
}
|
||||
|
||||
void MainScene::update(float delta) {
|
||||
}
|
||||
|
||||
void MainScene::render() {
|
||||
Renderer::get_singleton()->clear();
|
||||
|
||||
_camera->viewport.x += _dir;
|
||||
|
||||
if (_camera->viewport.x <= -100)
|
||||
_dir = 1;
|
||||
else if (_camera->viewport.x >= 100)
|
||||
_dir = -1;
|
||||
|
||||
_camera->bind();
|
||||
|
||||
_sprite->draw();
|
||||
}
|
||||
|
||||
MainScene::MainScene() {
|
||||
_camera = new Camera();
|
||||
_image = new Image("ti.bmp");
|
||||
_texture = new Texture(_image);
|
||||
_sprite = new Sprite(_texture);
|
||||
|
||||
_sprite->set_x(30);
|
||||
_sprite->set_y(30);
|
||||
|
||||
_dir = 1;
|
||||
}
|
||||
|
||||
MainScene::~MainScene() {
|
||||
_texture->free();
|
||||
_image->free();
|
||||
|
||||
delete _sprite;
|
||||
delete _texture;
|
||||
delete _image;
|
||||
delete _camera;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#ifndef IMPL_APPLICATION_H
|
||||
#define IMPL_APPLICATION_H
|
||||
|
||||
#include "application.h"
|
||||
|
||||
#include "main_scene.h"
|
||||
|
||||
class ImplApplication : public Application {
|
||||
public:
|
||||
ImplApplication() : Application() {
|
||||
scene = new MainScene();
|
||||
}
|
||||
~ImplApplication() {
|
||||
delete scene;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
122
25_sdl_input_app.txt
Normal file
122
25_sdl_input_app.txt
Normal file
@ -0,0 +1,122 @@
|
||||
class MainScene : public Scene {
|
||||
public:
|
||||
void event(const SDL_Event &ev);
|
||||
void update(float delta);
|
||||
void render();
|
||||
|
||||
MainScene();
|
||||
~MainScene();
|
||||
|
||||
Camera *_camera;
|
||||
Image *_image;
|
||||
Texture *_texture;
|
||||
Sprite *_sprite;
|
||||
|
||||
bool _up;
|
||||
bool _down;
|
||||
bool _left;
|
||||
bool _right;
|
||||
};
|
||||
|
||||
|
||||
#include "main_scene.h"
|
||||
|
||||
#include "renderer.h"
|
||||
#include "rect2.h"
|
||||
|
||||
#include <SDL.h>
|
||||
|
||||
void MainScene::event(const SDL_Event &ev) {
|
||||
switch (ev.type) {
|
||||
case SDL_WINDOWEVENT: {
|
||||
switch (ev.window.event) {
|
||||
case SDL_WINDOWEVENT_SIZE_CHANGED: {
|
||||
int width = ev.window.data1;
|
||||
int height = ev.window.data2;
|
||||
|
||||
_camera->viewport = Rect2(0, 0, width, height);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case SDL_KEYDOWN: {
|
||||
|
||||
if (ev.key.keysym.scancode == SDL_SCANCODE_A) {
|
||||
_left = true;
|
||||
} else if (ev.key.keysym.scancode == SDL_SCANCODE_W) {
|
||||
_up = true;
|
||||
} else if (ev.key.keysym.scancode == SDL_SCANCODE_S) {
|
||||
_down = true;
|
||||
} else if (ev.key.keysym.scancode == SDL_SCANCODE_D) {
|
||||
_right = true;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case SDL_KEYUP: {
|
||||
|
||||
if (ev.key.keysym.scancode == SDL_SCANCODE_A) {
|
||||
_left = false;
|
||||
} else if (ev.key.keysym.scancode == SDL_SCANCODE_W) {
|
||||
_up = false;
|
||||
} else if (ev.key.keysym.scancode == SDL_SCANCODE_S) {
|
||||
_down = false;
|
||||
} else if (ev.key.keysym.scancode == SDL_SCANCODE_D) {
|
||||
_right = false;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MainScene::update(float delta) {
|
||||
if (_up) {
|
||||
_sprite->set_y(_sprite->get_y() - 50 * delta);
|
||||
}
|
||||
|
||||
if (_down) {
|
||||
_sprite->set_y(_sprite->get_y() + 50 * delta);
|
||||
}
|
||||
|
||||
if (_left) {
|
||||
_sprite->set_x(_sprite->get_x() - 50 * delta);
|
||||
}
|
||||
|
||||
if (_right) {
|
||||
_sprite->set_x(_sprite->get_x() + 50 * delta);
|
||||
}
|
||||
}
|
||||
|
||||
void MainScene::render() {
|
||||
Renderer::get_singleton()->clear();
|
||||
|
||||
_camera->bind();
|
||||
|
||||
Renderer::get_singleton()->draw_sprite(_sprite);
|
||||
}
|
||||
|
||||
MainScene::MainScene() {
|
||||
_camera = new Camera();
|
||||
_image = new Image("ti.bmp");
|
||||
_texture = new Texture(_image);
|
||||
_sprite = new Sprite(_texture);
|
||||
|
||||
_up = false;
|
||||
_down = false;
|
||||
_left = false;
|
||||
_right = false;
|
||||
}
|
||||
|
||||
MainScene::~MainScene() {
|
||||
_texture->free();
|
||||
_image->free();
|
||||
|
||||
delete _sprite;
|
||||
delete _texture;
|
||||
delete _image;
|
||||
delete _camera;
|
||||
}
|
134
26_sdl_button.txt
Normal file
134
26_sdl_button.txt
Normal file
@ -0,0 +1,134 @@
|
||||
|
||||
|
||||
#include <functional>
|
||||
|
||||
class Button {
|
||||
public:
|
||||
enum ButtonState {
|
||||
BUTTON_STATE_UP,
|
||||
BUTTON_STATE_HOVER,
|
||||
BUTTON_STATE_DOWN,
|
||||
BUTTON_STATE_OFF,
|
||||
};
|
||||
|
||||
void event(const SDL_Event &ev);
|
||||
void update(float delta);
|
||||
void render();
|
||||
|
||||
//ver a: (Csak statikus fv állítható be rá)
|
||||
std::function<void(void)> on_click;
|
||||
|
||||
//ver b: (Képes osztályok függvényeit is meghívni)
|
||||
//Meg lehet oldani sokféleképp, egyik sem annyira szép sajnos
|
||||
//mindneképp érdemes lenne setter mögé rejteni ezeket
|
||||
void* cls;
|
||||
std::function<void(void*)> on_click_member;
|
||||
|
||||
Button();
|
||||
virtual ~Button();
|
||||
|
||||
ButtonState state;
|
||||
|
||||
Rect2 transform;
|
||||
|
||||
Sprite *up;
|
||||
Sprite *down;
|
||||
Sprite *hover;
|
||||
Sprite *off;
|
||||
};
|
||||
|
||||
|
||||
#include "button.h"
|
||||
|
||||
#include "math.h"
|
||||
|
||||
void Button::event(const SDL_Event &ev) {
|
||||
if (state == BUTTON_STATE_OFF) {
|
||||
return;
|
||||
}
|
||||
|
||||
switch (ev.type) {
|
||||
case SDL_MOUSEMOTION: {
|
||||
int x = ev.motion.x;
|
||||
int y = ev.motion.y;
|
||||
|
||||
if (transform.x < x && transform.x + transform.w > x && transform.y < y && transform.y + transform.w > y) {
|
||||
state = BUTTON_STATE_HOVER;
|
||||
} else {
|
||||
state = BUTTON_STATE_UP;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case SDL_MOUSEBUTTONDOWN: {
|
||||
int x = ev.motion.x;
|
||||
int y = ev.motion.y;
|
||||
|
||||
if (transform.x < x && transform.x + transform.w > x && transform.y < y && transform.y + transform.w > y) {
|
||||
state = BUTTON_STATE_DOWN;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case SDL_MOUSEBUTTONUP: {
|
||||
int x = ev.motion.x;
|
||||
int y = ev.motion.y;
|
||||
|
||||
if (transform.x < x && transform.x + transform.w > x && transform.y < y && transform.y + transform.w > y) {
|
||||
state = BUTTON_STATE_HOVER;
|
||||
|
||||
if (on_click) {
|
||||
on_click();
|
||||
}
|
||||
|
||||
if (on_click_member) {
|
||||
on_click_member(cls);
|
||||
}
|
||||
} else {
|
||||
state = BUTTON_STATE_UP;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Button::update(float delta) {
|
||||
}
|
||||
|
||||
void Button::render() {
|
||||
if (state == BUTTON_STATE_UP) {
|
||||
if (up) {
|
||||
up->set_transform(transform);
|
||||
up->draw();
|
||||
}
|
||||
} else if (state == BUTTON_STATE_HOVER) {
|
||||
if (hover) {
|
||||
hover->set_transform(transform);
|
||||
hover->draw();
|
||||
}
|
||||
} else if (state == BUTTON_STATE_DOWN) {
|
||||
if (down) {
|
||||
down->set_transform(transform);
|
||||
down->draw();
|
||||
}
|
||||
} else if (state == BUTTON_STATE_OFF) {
|
||||
if (off) {
|
||||
off->set_transform(transform);
|
||||
off->draw();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Button::Button() {
|
||||
state = BUTTON_STATE_UP;
|
||||
|
||||
up = nullptr;
|
||||
down = nullptr;
|
||||
hover = nullptr;
|
||||
off = nullptr;
|
||||
}
|
||||
|
||||
Button::~Button() {
|
||||
}
|
||||
|
117
27_sdl_button_app.txt
Normal file
117
27_sdl_button_app.txt
Normal file
@ -0,0 +1,117 @@
|
||||
|
||||
class MainScene : public Scene {
|
||||
public:
|
||||
void event(const SDL_Event &ev);
|
||||
void update(float delta);
|
||||
void render();
|
||||
|
||||
//ver a
|
||||
static void on_first_button_clicked();
|
||||
|
||||
//ver b
|
||||
static void on_first_button_clicked_member(void* cls);
|
||||
void member_print();
|
||||
|
||||
MainScene();
|
||||
~MainScene();
|
||||
|
||||
Camera *_camera;
|
||||
Image *_image;
|
||||
Texture *_texture;
|
||||
|
||||
Button *b1;
|
||||
Button *b2;
|
||||
Button *b3;
|
||||
};
|
||||
|
||||
|
||||
#include "main_scene.h"
|
||||
|
||||
#include "rect2.h"
|
||||
#include "renderer.h"
|
||||
|
||||
#include <SDL.h>
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
void MainScene::event(const SDL_Event &ev) {
|
||||
b1->event(ev);
|
||||
b2->event(ev);
|
||||
b3->event(ev);
|
||||
}
|
||||
|
||||
void MainScene::update(float delta) {
|
||||
}
|
||||
|
||||
void MainScene::render() {
|
||||
Renderer::get_singleton()->clear();
|
||||
|
||||
_camera->bind();
|
||||
|
||||
b1->render();
|
||||
b2->render();
|
||||
b3->render();
|
||||
}
|
||||
|
||||
void MainScene::on_first_button_clicked() {
|
||||
printf("Click!\n");
|
||||
}
|
||||
|
||||
void MainScene::on_first_button_clicked_member(void* cls) {
|
||||
if (cls) {
|
||||
reinterpret_cast<MainScene*>(cls)->member_print();
|
||||
}
|
||||
}
|
||||
void MainScene::member_print() {
|
||||
printf("Click Member!\n");
|
||||
}
|
||||
|
||||
MainScene::MainScene() {
|
||||
_camera = new Camera();
|
||||
_image = new Image("ti.bmp");
|
||||
_texture = new Texture(_image);
|
||||
|
||||
b1 = new Button();
|
||||
b1->transform = Rect2(0, 0, 100, 100);
|
||||
b1->up = new Sprite(_texture);
|
||||
b1->down = new Sprite(_texture, Color(100, 100, 100));
|
||||
b1->hover = new Sprite(_texture, Color(200, 200, 200));
|
||||
b1->on_click = MainScene::on_first_button_clicked;
|
||||
|
||||
b2 = new Button();
|
||||
b2->transform = Rect2(0, 110, 100, 100);
|
||||
b2->off = new Sprite(_texture, Color(50, 50, 50));
|
||||
b2->state = Button::BUTTON_STATE_OFF;
|
||||
|
||||
b3 = new Button();
|
||||
b3->transform = Rect2(0, 220, 100, 100);
|
||||
b3->up = new Sprite(_texture);
|
||||
b3->down = new Sprite(_texture, Color(100, 100, 100));
|
||||
b3->hover = new Sprite(_texture, Color(200, 200, 200));
|
||||
b3->cls = this;
|
||||
b3->on_click_member = MainScene::on_first_button_clicked_member;
|
||||
}
|
||||
|
||||
MainScene::~MainScene() {
|
||||
_texture->free();
|
||||
_image->free();
|
||||
|
||||
delete b1->up;
|
||||
delete b1->down;
|
||||
delete b1->hover;
|
||||
delete b1;
|
||||
|
||||
delete b2->off;
|
||||
delete b2;
|
||||
|
||||
delete b3->up;
|
||||
delete b3->down;
|
||||
delete b3->hover;
|
||||
delete b3;
|
||||
|
||||
delete _texture;
|
||||
delete _image;
|
||||
delete _camera;
|
||||
}
|
||||
|
||||
|
@ -341,6 +341,8 @@ https://www.youtube.com/watch?v=gYRrGTC7GtA
|
||||
https://www.youtube.com/watch?v=PC1RaETIx3Y
|
||||
https://www.youtube.com/watch?v=eOCQfxRQ2pY
|
||||
|
||||
vagy ./wip/raycaster/main.cpp
|
||||
|
||||
etc...
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user