tilemaps now have a rigidbody, tile instances refer to their containing tilemap
This commit is contained in:
parent
6df816e778
commit
6bb5fe7837
|
@ -12,6 +12,8 @@
|
|||
struct TileInstance {
|
||||
Transform transform;
|
||||
TileDef* tiledef;
|
||||
|
||||
Tilemap* parent_map;
|
||||
};
|
||||
|
||||
struct Tilemap {
|
||||
|
@ -22,6 +24,8 @@ struct Tilemap {
|
|||
TileInstance* map;
|
||||
size_t map_num;
|
||||
IVector map_size;
|
||||
|
||||
RigidBody* rigidbody;
|
||||
};
|
||||
|
||||
Tilemap* tilemap_from_autolayer(cJSON* json) {
|
||||
|
@ -69,13 +73,7 @@ Tilemap* tilemap_from_autolayer(cJSON* json) {
|
|||
writer->transform = IdentityTransform;
|
||||
cJSON* px = cJSON_GetObjectItem(tile, "px");
|
||||
writer->transform.position = vmulff(json_array_to_vector(px), px_to_ws);
|
||||
// sprite_get_spritesheet(tiledef_get_sprite(writer->tiledef));
|
||||
|
||||
// LOG_INFO("Loading tile");
|
||||
// LOG_INFO("tid = %d", t->valueint);
|
||||
// LOG_INFO("transform =");
|
||||
// LOG_INFO(".position = %f %f", writer->transform.position.x, writer->transform.position.y);
|
||||
// LOG_INFO(".scale = %f %f", writer->transform.scale.x, writer->transform.scale.y);
|
||||
writer->parent_map = self;
|
||||
++writer;
|
||||
}
|
||||
|
||||
|
@ -90,12 +88,42 @@ void tilemap_draw(Tilemap* self, Transform transform) {
|
|||
tile = self->map + i;
|
||||
tiletrans = transform_apply(self->transform, tile->transform);
|
||||
Sprite* sprite = tiledef_get_sprite(tile->tiledef);
|
||||
// LOG_INFO("sprite: %p", sprite);
|
||||
// LOG_INFO("trans: %f %f ; %f %f ; %f",
|
||||
// tiletrans.position.x, tiletrans.position.y, tiletrans.scale.x, tiletrans.scale.y, tiletrans.rotation);
|
||||
// LOG_INFO("self->transform: %f %f ; %f %f ; %f",
|
||||
// self->transform.position.x, self->transform.position.y, self->transform.scale.x, self->transform.scale.y, self->transform.rotation);
|
||||
|
||||
if(sprite != NULL)
|
||||
sprite_draw(sprite, tiletrans);
|
||||
}
|
||||
}
|
||||
|
||||
size_t tilemap_get_tile_count(Tilemap* self) {
|
||||
return self->map_num;
|
||||
}
|
||||
|
||||
TileInstance* tilemap_get_tile(Tilemap* self, size_t at) {
|
||||
return &self->map[at];
|
||||
}
|
||||
|
||||
RigidBody* tile_instance_get_rigidbody(TileInstance* self) {
|
||||
return self->parent_map->rigidbody;
|
||||
}
|
||||
|
||||
Transform* tile_instance_get_transform(TileInstance* self) {
|
||||
return &self->transform;
|
||||
}
|
||||
|
||||
Shape* tile_instance_get_shape(TileInstance* self) {
|
||||
return tiledef_get_shape(self->tiledef);
|
||||
}
|
||||
|
||||
void tile_instance_on_collision(TileInstance* self, Collision collision) {}
|
||||
|
||||
Vector* tile_instance_get_position(TileInstance* self) {
|
||||
return &self->transform.position;
|
||||
}
|
||||
|
||||
Vector* tile_instance_get_scale(TileInstance* self) {
|
||||
return &self->transform.scale;
|
||||
}
|
||||
|
||||
float* tile_instance_get_rotation(TileInstance* self) {
|
||||
return &self->transform.rotation;
|
||||
}
|
||||
|
|
|
@ -1,9 +1,12 @@
|
|||
#ifndef _fencer_tilemap_h
|
||||
#define _fencer_tilemap_h
|
||||
|
||||
#include "physics_entity.h"
|
||||
#include "spritesheet.h"
|
||||
#include "tileset.h"
|
||||
#include "rigidbody.h"
|
||||
#include "level.h"
|
||||
#include "collision.h"
|
||||
|
||||
typedef struct TileInstance TileInstance;
|
||||
typedef struct Tilemap Tilemap;
|
||||
|
@ -14,6 +17,30 @@ extern void tilemap_destroy(Tilemap* self);
|
|||
|
||||
extern void tilemap_set_tileset(Tilemap* self, Tileset* set);
|
||||
|
||||
extern void tilemap_draw(Tilemap* tilemap, Transform transform);
|
||||
extern void tilemap_draw(Tilemap* self, Transform transform);
|
||||
|
||||
extern size_t tilemap_get_tile_count(Tilemap* self);
|
||||
extern TileInstance* tilemap_get_tile(Tilemap* self, size_t at);
|
||||
|
||||
extern RigidBody* tile_instance_get_rigidbody(TileInstance* self);
|
||||
extern Transform* tile_instance_get_transform(TileInstance* self);
|
||||
extern Shape* tile_instance_get_shape(TileInstance* self);
|
||||
extern void tile_instance_on_collision(TileInstance* self, Collision collision);
|
||||
|
||||
extern Vector* tile_instance_get_position(TileInstance* self);
|
||||
extern Vector* tile_instance_get_scale(TileInstance* self);
|
||||
extern float* tile_instance_get_rotation(TileInstance* self);
|
||||
|
||||
impl_Transformable_for(TileInstance,
|
||||
tile_instance_get_transform,
|
||||
tile_instance_get_position,
|
||||
tile_instance_get_scale,
|
||||
tile_instance_get_rotation
|
||||
)
|
||||
impl_PhysicsEntity_for(TileInstance,
|
||||
tile_instance_get_rigidbody,
|
||||
tile_instance_get_shape,
|
||||
tile_instance_on_collision
|
||||
)
|
||||
|
||||
#endif // !_fencer_tilemap_h
|
||||
|
|
Loading…
Reference in a new issue