QoL improvments to editor
This commit is contained in:
parent
7fa8ddf0b2
commit
996347d70a
|
@ -1 +1,8 @@
|
||||||
Ever wished you could make your own mario party board ?
|
Ever wished you could make your own mario party board ?
|
||||||
|
---| Editor commands |---
|
||||||
|
> 1, 2, 3, 4 : go to next cell
|
||||||
|
> 0, 9, 8, 7 : go to previous cell
|
||||||
|
> p : add new cell
|
||||||
|
> l : link cells
|
||||||
|
> r (press twice) : remove cell
|
||||||
|
> TAB : exit current menu / close window
|
BIN
bin/mamaker
BIN
bin/mamaker
Binary file not shown.
121
src/edit.c
121
src/edit.c
|
@ -74,6 +74,22 @@ void unlink_cells(cell* parent, cell* child) {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cell* redirect_cell(cell* cl) {
|
||||||
|
if(cl != NULL) {
|
||||||
|
if(cl->prev_1 != NULL) {
|
||||||
|
return cl->prev_1;
|
||||||
|
} else if(cl->prev_2 != NULL) {
|
||||||
|
return cl->prev_2;
|
||||||
|
} else if(cl->prev_3 != NULL) {
|
||||||
|
return cl->prev_3;
|
||||||
|
} else if(cl->prev_4 != NULL) {
|
||||||
|
return cl->prev_4;
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "Unable to redirect cell : no parent.\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void append_cell(int cell_type, int X, int Y, cell* parent) {
|
void append_cell(int cell_type, int X, int Y, cell* parent) {
|
||||||
cell* new = malloc(sizeof(cell));
|
cell* new = malloc(sizeof(cell));
|
||||||
new->id = parent->id; // mostly for parkour
|
new->id = parent->id; // mostly for parkour
|
||||||
|
@ -109,20 +125,24 @@ void append_cell_orthogonal(int cell_type, char dir, cell* parent) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void destroy_cell(cell* cl) {
|
void destroy_cell() {
|
||||||
unlink_cells(cl, cl->next_1);
|
cell* new_current = redirect_cell(current);
|
||||||
unlink_cells(cl, cl->next_2);
|
|
||||||
unlink_cells(cl, cl->next_3);
|
|
||||||
unlink_cells(cl, cl->next_4);
|
|
||||||
|
|
||||||
unlink_cells(cl->prev_1, cl);
|
unlink_cells(current, current->next_1);
|
||||||
unlink_cells(cl->prev_2, cl);
|
unlink_cells(current, current->next_2);
|
||||||
unlink_cells(cl->prev_3, cl);
|
unlink_cells(current, current->next_3);
|
||||||
unlink_cells(cl->prev_4, cl);
|
unlink_cells(current, current->next_4);
|
||||||
|
|
||||||
cell_count[(int)cl->type] -= 1;
|
unlink_cells(current->prev_1, current);
|
||||||
|
unlink_cells(current->prev_2, current);
|
||||||
|
unlink_cells(current->prev_3, current);
|
||||||
|
unlink_cells(current->prev_4, current);
|
||||||
|
|
||||||
free(cl);
|
cell_count[(int)current->type] -= 1;
|
||||||
|
|
||||||
|
free(current);
|
||||||
|
|
||||||
|
current = new_current ;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isAdding = false ;
|
bool isAdding = false ;
|
||||||
|
@ -132,6 +152,17 @@ int phase = 0 ;
|
||||||
int editCellType = 0 ;
|
int editCellType = 0 ;
|
||||||
int editDirection = 0 ;
|
int editDirection = 0 ;
|
||||||
|
|
||||||
|
// -------------------------------- //
|
||||||
|
|
||||||
|
bool isLinking = false ;
|
||||||
|
cell* par ;
|
||||||
|
cell* chd ;
|
||||||
|
|
||||||
|
// -------------------------------- //
|
||||||
|
|
||||||
|
bool confirmRemove = false ;
|
||||||
|
bool cooldownRemove = false ;
|
||||||
|
|
||||||
void playerEditActions(bool* finished) {
|
void playerEditActions(bool* finished) {
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
while(SDL_PollEvent(&event)) {
|
while(SDL_PollEvent(&event)) {
|
||||||
|
@ -139,6 +170,11 @@ void playerEditActions(bool* finished) {
|
||||||
case SDL_QUIT:
|
case SDL_QUIT:
|
||||||
break;
|
break;
|
||||||
case SDL_KEYDOWN:
|
case SDL_KEYDOWN:
|
||||||
|
if(cooldownRemove) {
|
||||||
|
cooldownRemove = false;
|
||||||
|
} else {
|
||||||
|
confirmRemove = false ;
|
||||||
|
};
|
||||||
switch (event.key.keysym.sym) {
|
switch (event.key.keysym.sym) {
|
||||||
case SDLK_1:
|
case SDLK_1:
|
||||||
if(!isAdding && current->next_1 != NULL) {
|
if(!isAdding && current->next_1 != NULL) {
|
||||||
|
@ -215,7 +251,7 @@ void playerEditActions(bool* finished) {
|
||||||
editBuffer += 5;
|
editBuffer += 5;
|
||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
case SDLK_MINUS:
|
case SDLK_BACKSPACE:
|
||||||
if (isAdding) {
|
if (isAdding) {
|
||||||
editBuffer = editBuffer / 10;
|
editBuffer = editBuffer / 10;
|
||||||
};
|
};
|
||||||
|
@ -239,19 +275,59 @@ void playerEditActions(bool* finished) {
|
||||||
dir = 'w';
|
dir = 'w';
|
||||||
};
|
};
|
||||||
append_cell_orthogonal(editCellType, dir, current);
|
append_cell_orthogonal(editCellType, dir, current);
|
||||||
printf("exit adding...\n");
|
|
||||||
};
|
};
|
||||||
phase += 1;
|
phase += 1;
|
||||||
editBuffer = 0;
|
editBuffer = 0;
|
||||||
|
}
|
||||||
|
else if(isLinking) {
|
||||||
|
if(phase == 0) {
|
||||||
|
par = current ;
|
||||||
|
} else if(phase == 1) {
|
||||||
|
if(current != par) {
|
||||||
|
chd = current;
|
||||||
|
link_cells(par, chd);
|
||||||
|
phase = -1;
|
||||||
|
isLinking = false;
|
||||||
|
} else {
|
||||||
|
phase -= 1;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
phase += 1;
|
||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
case SDLK_p:
|
case SDLK_p:
|
||||||
isAdding = true ;
|
if(!isLinking) {
|
||||||
phase = 0 ;
|
isAdding = true ;
|
||||||
printf("now adding...\n");
|
phase = 0 ;
|
||||||
|
printf("now adding...\n");
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case SDLK_l:
|
||||||
|
if(!isAdding) {
|
||||||
|
isLinking = true;
|
||||||
|
phase = 0 ;
|
||||||
|
printf("now linking...\n");
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case SDLK_r:
|
||||||
|
if(!confirmRemove) {
|
||||||
|
confirmRemove = true ;
|
||||||
|
cooldownRemove = true ;
|
||||||
|
} else {
|
||||||
|
destroy_cell();
|
||||||
|
confirmRemove = false ;
|
||||||
|
cooldownRemove = false ;
|
||||||
|
};
|
||||||
break;
|
break;
|
||||||
case SDLK_TAB:
|
case SDLK_TAB:
|
||||||
*finished = true;
|
if(isAdding || isLinking || confirmRemove) {
|
||||||
|
isAdding = false;
|
||||||
|
isLinking = false;
|
||||||
|
confirmRemove = false;
|
||||||
|
cooldownRemove = false ;
|
||||||
|
} else {
|
||||||
|
*finished = true;
|
||||||
|
};
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -284,6 +360,7 @@ void edit_main(SDL_Renderer* renderer) {
|
||||||
resetRenderer(renderer);
|
resetRenderer(renderer);
|
||||||
draw_board(renderer, current->coord_x - tile_size * 7, current->coord_x + tile_size * 7, current->coord_y - tile_size * 7, current->coord_y + tile_size * 7, current);
|
draw_board(renderer, current->coord_x - tile_size * 7, current->coord_x + tile_size * 7, current->coord_y - tile_size * 7, current->coord_y + tile_size * 7, current);
|
||||||
if(isAdding) {
|
if(isAdding) {
|
||||||
|
drawStringToRenderer(renderer, letters, "add cell", 50, __height__ - 50, 75/2, 105/2);
|
||||||
if(phase == 0) {
|
if(phase == 0) {
|
||||||
drawStringToRenderer(renderer, letters, "choose type", 50, 50, 75/2, 105/2);
|
drawStringToRenderer(renderer, letters, "choose type", 50, 50, 75/2, 105/2);
|
||||||
draw_types(renderer);
|
draw_types(renderer);
|
||||||
|
@ -292,6 +369,16 @@ void edit_main(SDL_Renderer* renderer) {
|
||||||
draw_directions(renderer);
|
draw_directions(renderer);
|
||||||
};
|
};
|
||||||
drawNumberToRenderer(renderer, digits, editBuffer, 50, 150, 75/2, 105/2, 0);
|
drawNumberToRenderer(renderer, digits, editBuffer, 50, 150, 75/2, 105/2, 0);
|
||||||
|
}
|
||||||
|
else if(isLinking) {
|
||||||
|
drawStringToRenderer(renderer, letters, "link cells", 50, __height__ - 50, 75/2, 105/2);
|
||||||
|
if(phase == 0) {
|
||||||
|
drawStringToRenderer(renderer, letters, "choose parent", 50, 50, 75/2, 105/2);
|
||||||
|
} else {
|
||||||
|
drawStringToRenderer(renderer, letters, "choose child", 50, 50, 75/2, 105/2);
|
||||||
|
}
|
||||||
|
} else if(confirmRemove) {
|
||||||
|
drawStringToRenderer(renderer, letters, "press r again to remove", 50, __height__ - 50, 75/2, 105/2);
|
||||||
};
|
};
|
||||||
updateRenderer(renderer);
|
updateRenderer(renderer);
|
||||||
playerEditActions(&finished);
|
playerEditActions(&finished);
|
||||||
|
|
|
@ -5,9 +5,11 @@ void link_cells(cell* parent, cell* child);
|
||||||
|
|
||||||
void unlink_cells(cell* parent, cell* child);
|
void unlink_cells(cell* parent, cell* child);
|
||||||
|
|
||||||
|
cell* redirect_cell(cell* cl);
|
||||||
|
|
||||||
void append_cell(int cell_type, int X, int Y, cell* parent);
|
void append_cell(int cell_type, int X, int Y, cell* parent);
|
||||||
|
|
||||||
void destroy_cell(cell* cl);
|
void destroy_cell();
|
||||||
|
|
||||||
void playerEditActions(bool* finished);
|
void playerEditActions(bool* finished);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue