Update editor rendering to use texture dimensions
parent
bef2ee2813
commit
21e37a328e
|
@ -6,6 +6,7 @@
|
||||||
#include "mempool.h"
|
#include "mempool.h"
|
||||||
#include "raylib.h"
|
#include "raylib.h"
|
||||||
#include "raymath.h"
|
#include "raymath.h"
|
||||||
|
#include "AABB.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
static Tile_t all_tiles[MAX_N_TILES] = {0};
|
static Tile_t all_tiles[MAX_N_TILES] = {0};
|
||||||
|
@ -91,15 +92,17 @@ static void level_scene_render_func(Scene_t* scene)
|
||||||
Entity_t* p_ent;
|
Entity_t* p_ent;
|
||||||
static char buffer[512];
|
static char buffer[512];
|
||||||
|
|
||||||
Vector2 draw_pos = {data->game_rec.x, data->game_rec.y + data->game_rec.height + SELECTION_GAP};
|
Rectangle selection_rec = scene->layers.render_layers[SELECTION_LAYER].render_area;
|
||||||
|
Rectangle game_rec = scene->layers.render_layers[GAME_LAYER].render_area;
|
||||||
|
Vector2 draw_pos = {game_rec.x, game_rec.y + game_rec.height + SELECTION_GAP};
|
||||||
BeginTextureMode(scene->layers.render_layers[CONTROL_LAYER].layer_tex);
|
BeginTextureMode(scene->layers.render_layers[CONTROL_LAYER].layer_tex);
|
||||||
ClearBackground(BLANK);
|
ClearBackground(BLANK);
|
||||||
DrawRectangleLines(
|
DrawRectangleLines(
|
||||||
data->game_rec.x + current_spawn_selection * SELECTION_TILE_SIZE, draw_pos.y,
|
selection_rec.x + current_spawn_selection * SELECTION_TILE_SIZE, selection_rec.y,
|
||||||
SELECTION_TILE_SIZE, SELECTION_TILE_SIZE, GREEN
|
SELECTION_TILE_SIZE, SELECTION_TILE_SIZE, GREEN
|
||||||
);
|
);
|
||||||
|
|
||||||
draw_pos.x = data->game_rec.x + (MAX_SPAWN_TYPE + 1) * SELECTION_TILE_SIZE;
|
draw_pos.x = game_rec.x + (MAX_SPAWN_TYPE + 1) * SELECTION_TILE_SIZE;
|
||||||
sprintf(buffer, "Selection: %s", get_spawn_selection_string(current_spawn_selection));
|
sprintf(buffer, "Selection: %s", get_spawn_selection_string(current_spawn_selection));
|
||||||
DrawText(buffer, draw_pos.x, draw_pos.y, 20, BLACK);
|
DrawText(buffer, draw_pos.x, draw_pos.y, 20, BLACK);
|
||||||
draw_pos.y += SELECTION_TILE_SIZE + 5;
|
draw_pos.y += SELECTION_TILE_SIZE + 5;
|
||||||
|
@ -110,7 +113,7 @@ static void level_scene_render_func(Scene_t* scene)
|
||||||
DrawText(buffer, draw_pos.x, draw_pos.y, 20, BLACK);
|
DrawText(buffer, draw_pos.x, draw_pos.y, 20, BLACK);
|
||||||
|
|
||||||
// For DEBUG
|
// For DEBUG
|
||||||
const int gui_x = data->game_rec.x + data->game_rec.width + 10;
|
const int gui_x = game_rec.x + game_rec.width + 10;
|
||||||
int gui_y = 15;
|
int gui_y = 15;
|
||||||
|
|
||||||
sc_map_foreach_value(&scene->ent_manager.entities_map[PLAYER_ENT_TAG], p_ent)
|
sc_map_foreach_value(&scene->ent_manager.entities_map[PLAYER_ENT_TAG], p_ent)
|
||||||
|
@ -143,7 +146,7 @@ static void level_scene_render_func(Scene_t* scene)
|
||||||
#endif
|
#endif
|
||||||
CAirTimer_t* p_air = get_component(p_ent, CAIRTIMER_T);
|
CAirTimer_t* p_air = get_component(p_ent, CAIRTIMER_T);
|
||||||
|
|
||||||
Vector2 air_pos = {data->game_rec.x + data->game_rec.width - 16, data->game_rec.y + data->game_rec.height - 16};
|
Vector2 air_pos = {game_rec.x + game_rec.width - 16, game_rec.y + game_rec.height - 16};
|
||||||
for (uint8_t i = 0; i < p_air->curr_count; i++)
|
for (uint8_t i = 0; i < p_air->curr_count; i++)
|
||||||
{
|
{
|
||||||
DrawCircleV(air_pos, 16, BLUE);
|
DrawCircleV(air_pos, 16, BLUE);
|
||||||
|
@ -176,14 +179,12 @@ static void render_editor_game_scene(Scene_t* scene)
|
||||||
{
|
{
|
||||||
LevelSceneData_t* data = &(CONTAINER_OF(scene, LevelScene_t, scene)->data);
|
LevelSceneData_t* data = &(CONTAINER_OF(scene, LevelScene_t, scene)->data);
|
||||||
TileGrid_t tilemap = data->tilemap;
|
TileGrid_t tilemap = data->tilemap;
|
||||||
|
Rectangle game_rec = scene->layers.render_layers[GAME_LAYER].render_area;
|
||||||
|
|
||||||
Entity_t* p_ent;
|
Entity_t* p_ent;
|
||||||
Vector2 min = GetScreenToWorld2D((Vector2){data->game_rec.x, data->game_rec.y}, data->camera.cam);
|
Vector2 min = GetScreenToWorld2D((Vector2){0, 0}, data->camera.cam);
|
||||||
Vector2 max = GetScreenToWorld2D(
|
Vector2 max = GetScreenToWorld2D(
|
||||||
(Vector2){
|
(Vector2){game_rec.width, game_rec.height},
|
||||||
data->game_rec.x + data->game_rec.width,
|
|
||||||
data->game_rec.y + data->game_rec.height
|
|
||||||
},
|
|
||||||
data->camera.cam
|
data->camera.cam
|
||||||
);
|
);
|
||||||
min = Vector2Scale(min, 1.0f/tilemap.tile_size);
|
min = Vector2Scale(min, 1.0f/tilemap.tile_size);
|
||||||
|
@ -536,18 +537,21 @@ static void toggle_block_system(Scene_t* scene, ActionType_t action, bool presse
|
||||||
static unsigned int last_tile_idx = MAX_N_TILES;
|
static unsigned int last_tile_idx = MAX_N_TILES;
|
||||||
LevelSceneData_t* data = &(CONTAINER_OF(scene, LevelScene_t, scene)->data);
|
LevelSceneData_t* data = &(CONTAINER_OF(scene, LevelScene_t, scene)->data);
|
||||||
TileGrid_t tilemap = data->tilemap;
|
TileGrid_t tilemap = data->tilemap;
|
||||||
Vector2 raw_mouse_pos = Vector2Subtract(scene->mouse_pos, (Vector2){data->game_rec.x, data->game_rec.y});
|
|
||||||
|
|
||||||
if (action == ACTION_SPAWN_TILE && !pressed)
|
if (action == ACTION_SPAWN_TILE && !pressed)
|
||||||
{
|
{
|
||||||
last_tile_idx = MAX_N_TILES;
|
last_tile_idx = MAX_N_TILES;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (
|
if (point_in_AABB(scene->mouse_pos, scene->layers.render_layers[GAME_LAYER].render_area))
|
||||||
raw_mouse_pos.x < data->game_rec.width
|
|
||||||
&& raw_mouse_pos.y < data->game_rec.height
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
|
Vector2 raw_mouse_pos = Vector2Subtract(scene->mouse_pos,
|
||||||
|
(Vector2){
|
||||||
|
scene->layers.render_layers[GAME_LAYER].render_area.x,
|
||||||
|
scene->layers.render_layers[GAME_LAYER].render_area.y
|
||||||
|
}
|
||||||
|
);
|
||||||
Vector2 mouse_pos = GetScreenToWorld2D(raw_mouse_pos, data->camera.cam);
|
Vector2 mouse_pos = GetScreenToWorld2D(raw_mouse_pos, data->camera.cam);
|
||||||
unsigned int tile_idx = get_tile_idx(mouse_pos.x, mouse_pos.y, &tilemap);
|
unsigned int tile_idx = get_tile_idx(mouse_pos.x, mouse_pos.y, &tilemap);
|
||||||
if (tile_idx >= (tilemap.n_tiles - tilemap.width)) return;
|
if (tile_idx >= (tilemap.n_tiles - tilemap.width)) return;
|
||||||
|
@ -702,12 +706,14 @@ static void toggle_block_system(Scene_t* scene, ActionType_t action, bool presse
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
raw_mouse_pos = Vector2Subtract(raw_mouse_pos, (Vector2){0, data->game_rec.height});
|
if (point_in_AABB(scene->mouse_pos, scene->layers.render_layers[SELECTION_LAYER].render_area))
|
||||||
if (
|
|
||||||
raw_mouse_pos.x < SELECTION_REGION_WIDTH
|
|
||||||
&& raw_mouse_pos.y < SELECTION_REGION_HEIGHT
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
|
Vector2 raw_mouse_pos = Vector2Subtract(scene->mouse_pos,
|
||||||
|
(Vector2){
|
||||||
|
scene->layers.render_layers[SELECTION_LAYER].render_area.x,
|
||||||
|
scene->layers.render_layers[SELECTION_LAYER].render_area.y
|
||||||
|
}
|
||||||
|
);
|
||||||
if (action == ACTION_SPAWN_TILE && !pressed)
|
if (action == ACTION_SPAWN_TILE && !pressed)
|
||||||
{
|
{
|
||||||
current_spawn_selection = ((int)raw_mouse_pos.x / SELECTION_TILE_SIZE);
|
current_spawn_selection = ((int)raw_mouse_pos.x / SELECTION_TILE_SIZE);
|
||||||
|
|
Loading…
Reference in New Issue