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 {
|
struct TileInstance {
|
||||||
Transform transform;
|
Transform transform;
|
||||||
TileDef* tiledef;
|
TileDef* tiledef;
|
||||||
|
|
||||||
|
Tilemap* parent_map;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Tilemap {
|
struct Tilemap {
|
||||||
|
@ -22,6 +24,8 @@ struct Tilemap {
|
||||||
TileInstance* map;
|
TileInstance* map;
|
||||||
size_t map_num;
|
size_t map_num;
|
||||||
IVector map_size;
|
IVector map_size;
|
||||||
|
|
||||||
|
RigidBody* rigidbody;
|
||||||
};
|
};
|
||||||
|
|
||||||
Tilemap* tilemap_from_autolayer(cJSON* json) {
|
Tilemap* tilemap_from_autolayer(cJSON* json) {
|
||||||
|
@ -69,13 +73,7 @@ Tilemap* tilemap_from_autolayer(cJSON* json) {
|
||||||
writer->transform = IdentityTransform;
|
writer->transform = IdentityTransform;
|
||||||
cJSON* px = cJSON_GetObjectItem(tile, "px");
|
cJSON* px = cJSON_GetObjectItem(tile, "px");
|
||||||
writer->transform.position = vmulff(json_array_to_vector(px), px_to_ws);
|
writer->transform.position = vmulff(json_array_to_vector(px), px_to_ws);
|
||||||
// sprite_get_spritesheet(tiledef_get_sprite(writer->tiledef));
|
writer->parent_map = self;
|
||||||
|
|
||||||
// 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;
|
++writer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,12 +88,42 @@ void tilemap_draw(Tilemap* self, Transform transform) {
|
||||||
tile = self->map + i;
|
tile = self->map + i;
|
||||||
tiletrans = transform_apply(self->transform, tile->transform);
|
tiletrans = transform_apply(self->transform, tile->transform);
|
||||||
Sprite* sprite = tiledef_get_sprite(tile->tiledef);
|
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)
|
if(sprite != NULL)
|
||||||
sprite_draw(sprite, tiletrans);
|
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
|
#ifndef _fencer_tilemap_h
|
||||||
#define _fencer_tilemap_h
|
#define _fencer_tilemap_h
|
||||||
|
|
||||||
|
#include "physics_entity.h"
|
||||||
#include "spritesheet.h"
|
#include "spritesheet.h"
|
||||||
#include "tileset.h"
|
#include "tileset.h"
|
||||||
|
#include "rigidbody.h"
|
||||||
#include "level.h"
|
#include "level.h"
|
||||||
|
#include "collision.h"
|
||||||
|
|
||||||
typedef struct TileInstance TileInstance;
|
typedef struct TileInstance TileInstance;
|
||||||
typedef struct Tilemap Tilemap;
|
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_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
|
#endif // !_fencer_tilemap_h
|
||||||
|
|
Loading…
Reference in a new issue