~kikoodx/sle

a66aaf9bdc697db6e99a93fad7ccdaae98aa7231 — KikooDX 3 years ago 5d556f5
Flags for background color configuration
M CMakeLists.txt => CMakeLists.txt +1 -0
@@ 9,6 9,7 @@ set(SOURCES
	src/options.c
	src/mouse.c
	src/strtoint.c
	src/strtocolor.c
	src/editing_area/main.c
	src/editing_area/level.c
	src/editing_area/draw.c

M README => README +8 -2
@@ 59,7 59,7 @@ These flags are boolean toggles. They take no option.
-verbose : print debug informations to the standard output
-create : create an empty level instead of reading from the -level path

All these flags take integers as argument.
These flags take integers as argument.
-tile-width
-tile-height
-level-width : used by -create


@@ 72,6 72,11 @@ All these flags take integers as argument.
-picker-target-fps
-picker-padding

These flags take colors as argument.
Color format : #RRGGBB or RRGGBB
-editor-bg-color
-picker-bg-color

Example aliases
---------------
By using the flags, it's very easy to create specific configurations.


@@ 90,7 95,8 @@ alias sle-cg='sle -tile-width 16 -tile-height 16 -level-width 25 \
# fx-9860G configuration
alias sle-fx='sle -tile-width 8 -tile-height 8 -level-width 16 \
  -level-height 8 -editor-width 128 -editor-height 64 \
  -editor-off-x 0 -editor-off-y 0'
  -editor-off-x 0 -editor-off-y 0 -editor-bg-color #b0b0b0 \
  -picker-bg-color #b0b0b0'

DEFAULT CONFIGURATION
=====================

M include/options.h => include/options.h +4 -0
@@ 2,6 2,8 @@
/* Copyright (C) 2021 KikooDX */
#pragma once

#include <raylib.h>

#define BUFFER_SIZE 256

struct Options {


@@ 18,8 20,10 @@ struct Options {
	int editor_target_fps;
	int editor_draw_offset_x;
	int editor_draw_offset_y;
	Color editor_bg_color;
	int picker_target_fps;
	int picker_padding;
	Color picker_bg_color;
	/* determined after previous options */
	int tileset_width;
	int tileset_height;

A include/strtocolor.h => include/strtocolor.h +8 -0
@@ 0,0 1,8 @@
/* SPDX-License-Identifier: GPL-3.0-or-later */
/* Copyright (C) 2021 KikooDX */
#pragma once

#include <raylib.h>

/* Attempt to convert a string to a raylib Color. */
Color strtocolor(char *string);

M src/editing_area/main.c => src/editing_area/main.c +1 -1
@@ 61,7 61,7 @@ int editing_area_main(struct Options options,
		/* draw */
		BeginDrawing();

		ClearBackground(EDITOR_BACKGROUND_COLOR);
		ClearBackground(options.editor_bg_color);
		level_draw(level, options, tileset);
		editor_mouse_draw(options, mouse_x, mouse_y);


M src/main.c => src/main.c +9 -0
@@ 5,6 5,7 @@
#include "info.h"
#include "options.h"
#include "shared_data.h"
#include "strtocolor.h"
#include "strtoint.h"
#include "tile_picker/main.h"
#include <getopt.h>


@@ 105,8 106,10 @@ static void process_arguments(int argc, char **argv,
		    {"editor-fps", required_argument, 0, 'f'},
		    {"editor-off-x", required_argument, 0, 'o'},
		    {"editor-off-y", required_argument, 0, 'O'},
		    {"editor-bg-color", required_argument, 0, 'b'},
		    {"picker-fps", required_argument, 0, 'F'},
		    {"picker-padding", required_argument, 0, 'p'},
		    {"picker-bg-color", required_argument, 0, 'B'},
		    {0, 0, 0, 0},
		};
		/* getopt_long stores the option index here */


@@ 157,6 160,9 @@ static void process_arguments(int argc, char **argv,
			options->editor_draw_offset_y =
			    strtoint(optarg);
			break;
		case 'b': /* editor background color */
			options->editor_bg_color = strtocolor(optarg);
			break;
		case 'F': /* picker target FPS */
			options->picker_target_fps =
			    int_arg_min(opt, 1);


@@ 164,6 170,9 @@ static void process_arguments(int argc, char **argv,
		case 'p': /* picker padding */
			options->picker_padding = int_arg_min(opt, 0);
			break;
		case 'B': /* picker background color */
			options->picker_bg_color = strtocolor(optarg);
			break;
		case '?':
			/* getopt_long already printed an error message
			 */

M src/options.c => src/options.c +2 -0
@@ 17,10 17,12 @@ struct Options options_defaults(void)
	    .editor_target_fps = EDITOR_TARGET_FPS,
	    .editor_draw_offset_x = EDITOR_DRAW_OFFSET_X,
	    .editor_draw_offset_y = EDITOR_DRAW_OFFSET_Y,
	    .editor_bg_color = EDITOR_BACKGROUND_COLOR,
	    .picker_window_width = 0,
	    .picker_window_height = 0,
	    .picker_target_fps = PICKER_TARGET_FPS,
	    .picker_padding = PICKER_PADDING,
	    .picker_bg_color = PICKER_BACKGROUND_COLOR,
	    .level_create = 0,
	};
}

A src/strtocolor.c => src/strtocolor.c +59 -0
@@ 0,0 1,59 @@
/* SPDX-License-Identifier: GPL-3.0-or-later */
/* Copyright (C) 2021 KikooDX */

#include "strtocolor.h"
#include "info.h"
#include <raylib.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static const int hex_table_size = 16;
static const int hex_table[hex_table_size] = {
    '0', '1', '2', '3', '4', '5', '6', '7',
    '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
static const char *format_error =
    "ERROR: flag expected a color argument in the form #RRGGBB, got "
    "\"%s\"\n";

/* Attempt to convert a string to raylib Color. */
Color strtocolor(char *string)
{
	int rgb[3] = {0, 0, 0};
	char *character = string + (string[0] == '#');
	const size_t string_len = strlen(character);
	int i = 0;
	int sum = 0;

	if (string_len != 6) {
		fprintf(stderr, format_error, string);
		exit(EXIT_FAILURE);
	}

	while (*character != '\0') {
		int value = -1;
		int j;
		for (j = 0; j < hex_table_size; j += 1) {
			if (hex_table[j] == *character) {
				value = j;
				break;
			}
		}
		if (value == -1) {
			fprintf(stderr, format_error, string);
			exit(EXIT_FAILURE);
		}
		sum += value * (1 + 15 * (i % 2));
		INFO_VAR("%d", sum);
		if (i % 2) {
			rgb[i / 2] = sum;
			sum = 0;
		}
		i += 1;
		character += 1;
	}
	INFO_VAR("r=%d", rgb[0]);
	INFO_VAR("g=%d", rgb[1]);
	INFO_VAR("b=%d", rgb[2]);
	return (Color){rgb[0], rgb[1], rgb[2], 255};
}

M src/strtoint.c => src/strtoint.c +2 -2
@@ 9,9 9,9 @@
/* Attempt to convert a string to integer. */
int strtoint(char *string)
{
	char character;
	int i;
	const size_t string_len = strlen(string);
	int character;
	int i;
	int sum = 0;
	int multiplier = 1;
	int negative = string[0] == '-';

M src/tile_picker/main.c => src/tile_picker/main.c +1 -1
@@ 42,7 42,7 @@ int tile_picker_main(struct Options options,
			/* draw */
			BeginDrawing();

			ClearBackground(PICKER_BACKGROUND_COLOR);
			ClearBackground(options.picker_bg_color);
			tileset_draw(tileset, options,
			             shared_data->selected_tile);