mirror of
https://github.com/Relintai/programming_tutorials.git
synced 2025-05-07 22:41:40 +02:00
123 lines
2.1 KiB
Plaintext
123 lines
2.1 KiB
Plaintext
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;
|
|
}
|