1
0
Fork 0
mirror of https://git.sr.ht/~kikoodx/sle synced 2021-05-23 12:50:56 +02:00
sle/src/tile_picker/main.c

88 lines
2.2 KiB
C
Raw Normal View History

/* SPDX-License-Identifier: GPL-3.0-or-later */
/* Copyright (C) 2021 KikooDX */
#include "mouse.h"
#include "options.h"
#include "shared_data.h"
#include "tile_picker/draw.h"
#include <raylib.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
static void init_mouse(struct Options options);
static void update_mouse(int *mouse_x, int *mouse_y,
struct Options options,
struct SharedData *shared_data);
int tile_picker_main(struct Options options,
struct SharedData *shared_data)
{
int mouse_x;
int mouse_y;
Texture2D tileset;
/* initialize raylib */
InitWindow(options.picker_window_width,
options.picker_window_height,
"SLE secondary window");
SetTargetFPS(options.picker_target_fps);
init_mouse(options);
/* load textures */
tileset = LoadTexture(options.tileset_path);
/* only proceed if tileset is well loaded */
if (tileset.width > 0) {
while (!shared_data->end_child) {
/* update */
update_mouse(&mouse_x, &mouse_y, options,
shared_data);
/* draw */
BeginDrawing();
ClearBackground(BLACK);
tileset_draw(tileset, options,
shared_data->selected_tile);
EndDrawing();
}
}
/* unload textures */
UnloadTexture(tileset);
CloseWindow();
return EXIT_SUCCESS;
}
static void init_mouse(struct Options options)
{
SetMouseOffset(-options.picker_padding,
-options.picker_padding);
SetMouseScale(
1.0 / (options.tile_width + options.picker_padding),
1.0 / (options.tile_height + options.picker_padding));
}
static void update_mouse(int *mouse_x, int *mouse_y,
struct Options options,
struct SharedData *shared_data)
{
const bool left_click = IsMouseButtonDown(0);
const bool right_click = IsMouseButtonDown(1);
update_mouse_position(
mouse_x, mouse_y,
options.tileset_width *
(options.tileset_width + options.picker_padding),
options.tileset_height *
(options.tileset_height + options.picker_padding));
/* set left button tile */
if (left_click)
shared_data->selected_tile =
*mouse_x + *mouse_y * options.tileset_width;
}