Add spawning urchin in editor
parent
8a731637f7
commit
b275caf795
|
@ -1,3 +1,4 @@
|
||||||
|
#include "EC.h"
|
||||||
#include "scene_impl.h"
|
#include "scene_impl.h"
|
||||||
#include "game_systems.h"
|
#include "game_systems.h"
|
||||||
#include "water_flow.h"
|
#include "water_flow.h"
|
||||||
|
@ -28,13 +29,20 @@ enum EntitySpawnSelection {
|
||||||
SPAWN_BOULDER,
|
SPAWN_BOULDER,
|
||||||
SPAWN_WATER_RUNNER,
|
SPAWN_WATER_RUNNER,
|
||||||
SPAWN_LEVEL_END,
|
SPAWN_LEVEL_END,
|
||||||
|
SPAWN_URCHIN,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define MAX_SPAWN_TYPE 16
|
#define MAX_SPAWN_TYPE 17
|
||||||
static unsigned int current_spawn_selection = 0;
|
static unsigned int current_spawn_selection = 0;
|
||||||
static bool metal_toggle = false;
|
static bool metal_toggle = false;
|
||||||
static bool crate_activation = false;
|
static bool crate_activation = false;
|
||||||
|
|
||||||
|
#define MAX_URCHIN_SPAWN_SPD 20
|
||||||
|
#define URCHIN_SPAWN_UI_RADIUS 40
|
||||||
|
#define URCHIN_VELOCITY_SCALE 10
|
||||||
|
static Vector2 urchin_spawn_vec = {0,0};
|
||||||
|
|
||||||
|
|
||||||
#define SELECTION_TILE_SIZE 32
|
#define SELECTION_TILE_SIZE 32
|
||||||
#define SELECTION_TILE_HALFSIZE (SELECTION_TILE_SIZE >> 1)
|
#define SELECTION_TILE_HALFSIZE (SELECTION_TILE_SIZE >> 1)
|
||||||
#define SELECTION_GAP 5
|
#define SELECTION_GAP 5
|
||||||
|
@ -77,6 +85,7 @@ static char* get_spawn_selection_string(enum EntitySpawnSelection sel)
|
||||||
case SPAWN_BOULDER: return "boulder";
|
case SPAWN_BOULDER: return "boulder";
|
||||||
case SPAWN_WATER_RUNNER: return "water runner";
|
case SPAWN_WATER_RUNNER: return "water runner";
|
||||||
case SPAWN_LEVEL_END: return "level end";
|
case SPAWN_LEVEL_END: return "level end";
|
||||||
|
case SPAWN_URCHIN: return "urchin";
|
||||||
default: return "unknown";
|
default: return "unknown";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -134,6 +143,31 @@ static void level_scene_render_func(Scene_t* scene)
|
||||||
sprintf(buffer, "Camera mode: %s", data->camera.mode == CAMERA_FOLLOW_PLAYER ? "FOLLOW" : "FREE");
|
sprintf(buffer, "Camera mode: %s", data->camera.mode == CAMERA_FOLLOW_PLAYER ? "FOLLOW" : "FREE");
|
||||||
DrawText(buffer, draw_pos.x, draw_pos.y, 20, BLACK);
|
DrawText(buffer, draw_pos.x, draw_pos.y, 20, BLACK);
|
||||||
|
|
||||||
|
draw_pos.x = game_rec.x + game_rec.width - 50 - URCHIN_SPAWN_UI_RADIUS;
|
||||||
|
draw_pos.y = game_rec.y + game_rec.height + SELECTION_GAP + URCHIN_SPAWN_UI_RADIUS;
|
||||||
|
|
||||||
|
// Draw Urchin spawn info
|
||||||
|
DrawCircleV(draw_pos, 40, RED);
|
||||||
|
// HACK: because this ui is not stored, need to perform the mouse check here
|
||||||
|
if (IsMouseButtonDown(MOUSE_BUTTON_LEFT))
|
||||||
|
{
|
||||||
|
Vector2 click_pos = Vector2Subtract(
|
||||||
|
scene->mouse_pos, draw_pos
|
||||||
|
);
|
||||||
|
float mag = Vector2Length(click_pos);
|
||||||
|
if (mag <= URCHIN_SPAWN_UI_RADIUS)
|
||||||
|
{
|
||||||
|
urchin_spawn_vec = Vector2Scale(
|
||||||
|
Vector2Normalize(click_pos),
|
||||||
|
mag
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DrawCircleV(
|
||||||
|
Vector2Add(urchin_spawn_vec, draw_pos),
|
||||||
|
4, BLUE
|
||||||
|
);
|
||||||
|
|
||||||
// For DEBUG
|
// For DEBUG
|
||||||
const int gui_x = game_rec.x + game_rec.width + 10;
|
const int gui_x = game_rec.x + game_rec.width + 10;
|
||||||
int gui_y = 15;
|
int gui_y = 15;
|
||||||
|
@ -746,7 +780,19 @@ static void toggle_block_system(Scene_t* scene, ActionType_t action, bool presse
|
||||||
if (p_ent != NULL)
|
if (p_ent != NULL)
|
||||||
{
|
{
|
||||||
p_ent->position.x = (tile_idx % tilemap.width) * tilemap.tile_size + (tilemap.tile_size >> 1);
|
p_ent->position.x = (tile_idx % tilemap.width) * tilemap.tile_size + (tilemap.tile_size >> 1);
|
||||||
p_ent->position.y = (tile_idx / tilemap.width) * tilemap.tile_size + (tilemap.tile_size >> 1);;
|
p_ent->position.y = (tile_idx / tilemap.width) * tilemap.tile_size + (tilemap.tile_size >> 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SPAWN_URCHIN:
|
||||||
|
{
|
||||||
|
Entity_t* p_ent = create_urchin(&scene->ent_manager);
|
||||||
|
if (p_ent != NULL)
|
||||||
|
{
|
||||||
|
p_ent->position.x = (tile_idx % tilemap.width) * tilemap.tile_size + (tilemap.tile_size >> 1);
|
||||||
|
p_ent->position.y = (tile_idx / tilemap.width) * tilemap.tile_size + (tilemap.tile_size >> 1);
|
||||||
|
CTransform_t* p_ct = get_component(p_ent, CTRANSFORM_COMP_T);
|
||||||
|
p_ct->velocity = Vector2Scale(urchin_spawn_vec, URCHIN_VELOCITY_SCALE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1392,6 +1438,9 @@ void init_sandbox_scene(LevelScene_t* scene)
|
||||||
case SPAWN_LEVEL_END:
|
case SPAWN_LEVEL_END:
|
||||||
DrawCircleV(Vector2Add(draw_pos, half_size), half_size.x, GREEN);
|
DrawCircleV(Vector2Add(draw_pos, half_size), half_size.x, GREEN);
|
||||||
break;
|
break;
|
||||||
|
case SPAWN_URCHIN:
|
||||||
|
DrawCircleV(Vector2Add(draw_pos, half_size), half_size.x, RED);
|
||||||
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
draw_pos.x += SELECTION_TILE_SIZE;
|
draw_pos.x += SELECTION_TILE_SIZE;
|
||||||
|
|
|
@ -267,7 +267,7 @@ Entity_t* create_urchin(EntityManager_t* ent_manager)
|
||||||
CHitBoxes_t* p_hitbox = add_component(p_urchin, CHITBOXES_T);
|
CHitBoxes_t* p_hitbox = add_component(p_urchin, CHITBOXES_T);
|
||||||
p_hitbox->n_boxes = 1;
|
p_hitbox->n_boxes = 1;
|
||||||
p_hitbox->boxes[0] = (Rectangle){3, 3, 26, 26};
|
p_hitbox->boxes[0] = (Rectangle){3, 3, 26, 26};
|
||||||
p_hitbox->atk = 3;
|
p_hitbox->atk = 2;
|
||||||
|
|
||||||
CSprite_t* p_cspr = add_component(p_urchin, CSPRITE_T);
|
CSprite_t* p_cspr = add_component(p_urchin, CSPRITE_T);
|
||||||
p_cspr->sprites = item_sprite_map;
|
p_cspr->sprites = item_sprite_map;
|
||||||
|
|
Loading…
Reference in New Issue