Remove Lt from PointLayer
parent
749edf20ea
commit
56e308932f
|
@ -94,7 +94,7 @@ Level *create_level_from_level_editor(const LevelEditor *level_editor)
|
|||
|
||||
level->goals = PUSH_LT(
|
||||
lt,
|
||||
create_goals_from_point_layer(level_editor->goals_layer),
|
||||
create_goals_from_point_layer(&level_editor->goals_layer),
|
||||
destroy_goals);
|
||||
if (level->goals == NULL) {
|
||||
RETURN_LT(lt, NULL);
|
||||
|
|
|
@ -9,7 +9,6 @@
|
|||
#include "config.h"
|
||||
|
||||
typedef struct Goals Goals;
|
||||
typedef struct PointLayer PointLayer;
|
||||
|
||||
Goals *create_goals_from_point_layer(const PointLayer *point_layer);
|
||||
void destroy_goals(Goals *goals);
|
||||
|
|
|
@ -51,20 +51,9 @@ LevelEditor *create_level_editor(Cursor *cursor)
|
|||
level_editor->edit_field_filename.font_color = LEVEL_EDITOR_EDIT_FIELD_COLOR;
|
||||
|
||||
level_editor->background_layer = create_background_layer(hexstr("fffda5"));
|
||||
|
||||
level_editor->player_layer =
|
||||
create_player_layer(vec(0.0f, 0.0f), hexstr("ff8080"));
|
||||
|
||||
level_editor->player_layer = create_player_layer(vec(0.0f, 0.0f), hexstr("ff8080"));
|
||||
level_editor->platforms_layer = create_rect_layer("platform", cursor);
|
||||
|
||||
level_editor->goals_layer = PUSH_LT(
|
||||
lt,
|
||||
create_point_layer("goal"),
|
||||
destroy_point_layer);
|
||||
if (level_editor->goals_layer == NULL) {
|
||||
RETURN_LT(lt, NULL);
|
||||
}
|
||||
|
||||
level_editor->goals_layer = create_point_layer("goal"),
|
||||
level_editor->lava_layer = create_rect_layer("lava", cursor);
|
||||
level_editor->back_platforms_layer = create_rect_layer("back_platform", cursor);
|
||||
level_editor->boxes_layer = create_rect_layer("box", cursor);
|
||||
|
@ -82,7 +71,7 @@ LevelEditor *create_level_editor(Cursor *cursor)
|
|||
level_editor->layers[LAYER_PICKER_BOXES] = rect_layer_as_layer(&level_editor->boxes_layer);
|
||||
level_editor->layers[LAYER_PICKER_PLATFORMS] = rect_layer_as_layer(&level_editor->platforms_layer);
|
||||
level_editor->layers[LAYER_PICKER_BACK_PLATFORMS] = rect_layer_as_layer(&level_editor->back_platforms_layer);
|
||||
level_editor->layers[LAYER_PICKER_GOALS] = point_layer_as_layer(level_editor->goals_layer);
|
||||
level_editor->layers[LAYER_PICKER_GOALS] = point_layer_as_layer(&level_editor->goals_layer);
|
||||
level_editor->layers[LAYER_PICKER_PLAYER] = player_layer_as_layer(&level_editor->player_layer);
|
||||
level_editor->layers[LAYER_PICKER_LAVA] = rect_layer_as_layer(&level_editor->lava_layer);
|
||||
level_editor->layers[LAYER_PICKER_REGIONS] = rect_layer_as_layer(&level_editor->regions_layer);
|
||||
|
@ -163,7 +152,7 @@ LevelEditor *create_level_editor_from_file(const char *file_name, Cursor *cursor
|
|||
level_editor->layers[LAYER_PICKER_BOXES] = rect_layer_as_layer(&level_editor->boxes_layer);
|
||||
level_editor->layers[LAYER_PICKER_PLATFORMS] = rect_layer_as_layer(&level_editor->platforms_layer);
|
||||
level_editor->layers[LAYER_PICKER_BACK_PLATFORMS] = rect_layer_as_layer(&level_editor->back_platforms_layer);
|
||||
level_editor->layers[LAYER_PICKER_GOALS] = point_layer_as_layer(level_editor->goals_layer);
|
||||
level_editor->layers[LAYER_PICKER_GOALS] = point_layer_as_layer(&level_editor->goals_layer);
|
||||
level_editor->layers[LAYER_PICKER_PLAYER] = player_layer_as_layer(&level_editor->player_layer);
|
||||
level_editor->layers[LAYER_PICKER_LAVA] = rect_layer_as_layer(&level_editor->lava_layer);
|
||||
level_editor->layers[LAYER_PICKER_REGIONS] = rect_layer_as_layer(&level_editor->regions_layer);
|
||||
|
|
|
@ -5,11 +5,11 @@
|
|||
#include "game/level/level_editor/layer_picker.h"
|
||||
#include "game/level/level_editor/undo_history.h"
|
||||
#include "game/level/level_editor/rect_layer.h"
|
||||
#include "game/level/level_editor/point_layer.h"
|
||||
#include "ui/wiggly_text.h"
|
||||
#include "ui/cursor.h"
|
||||
|
||||
typedef struct LevelEditor LevelEditor;
|
||||
typedef struct PointLayer PointLayer;
|
||||
typedef struct LabelLayer LabelLayer;
|
||||
typedef struct Sound_samples Sound_samples;
|
||||
|
||||
|
@ -31,7 +31,7 @@ struct LevelEditor
|
|||
RectLayer boxes_layer;
|
||||
RectLayer platforms_layer;
|
||||
RectLayer back_platforms_layer;
|
||||
PointLayer *goals_layer;
|
||||
PointLayer goals_layer;
|
||||
PlayerLayer player_layer;
|
||||
RectLayer lava_layer;
|
||||
RectLayer regions_layer;
|
||||
|
|
|
@ -25,31 +25,6 @@ static Color point_clipboard_color;
|
|||
|
||||
// TODO(#1140): PointLayer does not support snapping
|
||||
|
||||
typedef enum {
|
||||
POINT_LAYER_IDLE = 0,
|
||||
POINT_LAYER_EDIT_ID,
|
||||
POINT_LAYER_MOVE,
|
||||
POINT_LAYER_RECOLOR
|
||||
} PointLayerState;
|
||||
|
||||
struct PointLayer
|
||||
{
|
||||
Lt *lt;
|
||||
PointLayerState state;
|
||||
Dynarray/*<Vec2f>*/ positions;
|
||||
Dynarray/*<Color>*/ colors;
|
||||
Dynarray/*<char[ID_MAX_SIZE]>*/ ids;
|
||||
int selection;
|
||||
ColorPicker color_picker;
|
||||
|
||||
Vec2f inter_position;
|
||||
Color inter_color;
|
||||
Edit_field edit_field;
|
||||
|
||||
int id_name_counter;
|
||||
const char *id_name_prefix;
|
||||
};
|
||||
|
||||
typedef enum {
|
||||
POINT_UNDO_ADD,
|
||||
POINT_UNDO_DELETE,
|
||||
|
@ -165,39 +140,28 @@ LayerPtr point_layer_as_layer(PointLayer *point_layer)
|
|||
return layer;
|
||||
}
|
||||
|
||||
PointLayer *create_point_layer(const char *id_name_prefix)
|
||||
PointLayer create_point_layer(const char *id_name_prefix)
|
||||
{
|
||||
Lt *lt = create_lt();
|
||||
|
||||
PointLayer *point_layer = PUSH_LT(lt, nth_calloc(1, sizeof(PointLayer)), free);
|
||||
if (point_layer == NULL) {
|
||||
RETURN_LT(lt, NULL);
|
||||
}
|
||||
point_layer->lt = lt;
|
||||
|
||||
point_layer->state = POINT_LAYER_IDLE;
|
||||
|
||||
point_layer->positions = create_dynarray(sizeof(Vec2f));
|
||||
point_layer->colors = create_dynarray(sizeof(Color));
|
||||
point_layer->ids = create_dynarray(sizeof(char) * ID_MAX_SIZE);
|
||||
|
||||
point_layer->edit_field.font_size = POINT_LAYER_ID_TEXT_SIZE;
|
||||
point_layer->edit_field.font_color = POINT_LAYER_ID_TEXT_COLOR;
|
||||
|
||||
point_layer->id_name_prefix = id_name_prefix;
|
||||
|
||||
return point_layer;
|
||||
PointLayer result = {0};
|
||||
result.state = POINT_LAYER_IDLE;
|
||||
result.positions = create_dynarray(sizeof(Vec2f));
|
||||
result.colors = create_dynarray(sizeof(Color));
|
||||
result.ids = create_dynarray(sizeof(char) * ID_MAX_SIZE);
|
||||
result.edit_field.font_size = POINT_LAYER_ID_TEXT_SIZE;
|
||||
result.edit_field.font_color = POINT_LAYER_ID_TEXT_COLOR;
|
||||
result.id_name_prefix = id_name_prefix;
|
||||
return result;
|
||||
}
|
||||
|
||||
PointLayer *chop_point_layer(Memory *memory,
|
||||
String *input,
|
||||
const char *id_name_prefix)
|
||||
PointLayer chop_point_layer(Memory *memory,
|
||||
String *input,
|
||||
const char *id_name_prefix)
|
||||
{
|
||||
trace_assert(memory);
|
||||
trace_assert(input);
|
||||
trace_assert(id_name_prefix);
|
||||
|
||||
PointLayer *point_layer = create_point_layer(id_name_prefix);
|
||||
PointLayer result = create_point_layer(id_name_prefix);
|
||||
|
||||
int n = atoi(string_to_cstr(memory, trim(chop_by_delim(input, '\n'))));
|
||||
char id[ENTITY_MAX_ID_SIZE];
|
||||
|
@ -210,31 +174,17 @@ PointLayer *chop_point_layer(Memory *memory,
|
|||
Color color = hexs(trim(chop_word(&line)));
|
||||
|
||||
memset(id, 0, ENTITY_MAX_ID_SIZE);
|
||||
memcpy(
|
||||
id,
|
||||
string_id.data,
|
||||
min_size_t(ENTITY_MAX_ID_SIZE - 1, string_id.count));
|
||||
memcpy(id, string_id.data, min_size_t(ENTITY_MAX_ID_SIZE - 1, string_id.count));
|
||||
|
||||
dynarray_push(&point_layer->positions, &point);
|
||||
dynarray_push(&point_layer->colors, &color);
|
||||
dynarray_push(&point_layer->ids, id);
|
||||
dynarray_push(&result.positions, &point);
|
||||
dynarray_push(&result.colors, &color);
|
||||
dynarray_push(&result.ids, id);
|
||||
}
|
||||
|
||||
point_layer->selection = -1;
|
||||
point_layer->color_picker = create_color_picker_from_rgba(COLOR_RED);
|
||||
result.selection = -1;
|
||||
result.color_picker = create_color_picker_from_rgba(COLOR_RED);
|
||||
|
||||
return point_layer;
|
||||
}
|
||||
|
||||
void destroy_point_layer(PointLayer *point_layer)
|
||||
{
|
||||
trace_assert(point_layer);
|
||||
|
||||
free(point_layer->positions.data);
|
||||
free(point_layer->colors.data);
|
||||
free(point_layer->ids.data);
|
||||
|
||||
RETURN_LT0(point_layer->lt);
|
||||
return result;
|
||||
}
|
||||
|
||||
static inline
|
||||
|
|
|
@ -7,16 +7,46 @@
|
|||
|
||||
#define ID_MAX_SIZE 36
|
||||
|
||||
typedef struct PointLayer PointLayer;
|
||||
typedef enum {
|
||||
POINT_LAYER_IDLE = 0,
|
||||
POINT_LAYER_EDIT_ID,
|
||||
POINT_LAYER_MOVE,
|
||||
POINT_LAYER_RECOLOR
|
||||
} PointLayerState;
|
||||
|
||||
typedef struct {
|
||||
PointLayerState state;
|
||||
Dynarray/*<Vec2f>*/ positions;
|
||||
Dynarray/*<Color>*/ colors;
|
||||
Dynarray/*<char[ID_MAX_SIZE]>*/ ids;
|
||||
int selection;
|
||||
ColorPicker color_picker;
|
||||
|
||||
Vec2f inter_position;
|
||||
Color inter_color;
|
||||
Edit_field edit_field;
|
||||
|
||||
int id_name_counter;
|
||||
const char *id_name_prefix;
|
||||
} PointLayer;
|
||||
|
||||
|
||||
LayerPtr point_layer_as_layer(PointLayer *point_layer);
|
||||
// NOTE: create_point_layer and create_point_layer_from_line_stream do
|
||||
// not own id_name_prefix
|
||||
PointLayer *create_point_layer(const char *id_name_prefix);
|
||||
PointLayer *chop_point_layer(Memory *memory,
|
||||
PointLayer create_point_layer(const char *id_name_prefix);
|
||||
PointLayer chop_point_layer(Memory *memory,
|
||||
String *input,
|
||||
const char *id_name_prefix);
|
||||
void destroy_point_layer(PointLayer *point_layer);
|
||||
|
||||
static inline
|
||||
void destroy_point_layer(PointLayer point_layer)
|
||||
{
|
||||
free(point_layer.positions.data);
|
||||
free(point_layer.colors.data);
|
||||
free(point_layer.ids.data);
|
||||
}
|
||||
|
||||
|
||||
int point_layer_render(const PointLayer *point_layer,
|
||||
const Camera *camera,
|
||||
|
|
Loading…
Reference in New Issue