Merge branch 'master' of ssh://kettek.exoss.net:4422/srv/eureka/timesynk
commit
543e714c86
37
engine/map.c
37
engine/map.c
|
|
@ -133,3 +133,40 @@ int moveTile(struct Map *map, struct Tile *tile, float x, float y, float z) {
|
||||||
tile->z = target_z;
|
tile->z = target_z;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int addTileToMap(struct Map *map, struct Tile *tile, float x, float y, float z) {
|
||||||
|
if (map == NULL)
|
||||||
|
return -1;
|
||||||
|
if (tile == NULL)
|
||||||
|
return -2;
|
||||||
|
int tile_x = (int)x;
|
||||||
|
int tile_y = (int)y;
|
||||||
|
int tile_z = (int)z;
|
||||||
|
// if out of bounds, add to nearest cell
|
||||||
|
if (tile_x >= map->width) {
|
||||||
|
tile_x = map->width-1;
|
||||||
|
} else if (tile_x < 0) {
|
||||||
|
tile_x = 0;
|
||||||
|
}
|
||||||
|
if (tile_y >= map->height) {
|
||||||
|
tile_y = map->height-1;
|
||||||
|
} else if (tile_y < 0) {
|
||||||
|
tile_y = 0;
|
||||||
|
}
|
||||||
|
if (tile_z >= map->depth) {
|
||||||
|
tile_z = map->depth-1;
|
||||||
|
} else if (tile_z < 0) {
|
||||||
|
tile_z = 0;
|
||||||
|
}
|
||||||
|
// set tile's x, y, and z params
|
||||||
|
tile->x = tile_x;
|
||||||
|
tile->y = tile_y;
|
||||||
|
tile->z = tile_z;
|
||||||
|
if (map->tiles[tile_x][tile_y][tile_z] == NULL) {
|
||||||
|
map->tiles[tile_x][tile_y][tile_z] = tile;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
// if existing, append to tile linked list there
|
||||||
|
appendTile(map->tiles[tile_x][tile_y][tile_z], tile);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,6 @@ struct Map *newMap(int width, int height, int depth);
|
||||||
int nullMap(struct Map *map);
|
int nullMap(struct Map *map);
|
||||||
void freeMap(struct Map *map, int flags);
|
void freeMap(struct Map *map, int flags);
|
||||||
|
|
||||||
|
|
||||||
int moveTile(struct Map *map, struct Tile *tile, float x, float y, float z);
|
int moveTile(struct Map *map, struct Tile *tile, float x, float y, float z);
|
||||||
|
int addTileToMap(struct Map *map, struct Tile *tile, float x, float y, float z);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ Called once when switching to this state. Used to load whatever data used during
|
||||||
================================
|
================================
|
||||||
*/
|
*/
|
||||||
void initTestState() {
|
void initTestState() {
|
||||||
if ((test_map = newMap(32, 32, 2)) == NULL) {
|
if ((test_map = newMap(32, 32, 4)) == NULL) {
|
||||||
printf("ERROR: failed to allocate map!\n");
|
printf("ERROR: failed to allocate map!\n");
|
||||||
stopRunning();
|
stopRunning();
|
||||||
return;
|
return;
|
||||||
|
|
@ -22,17 +22,29 @@ void initTestState() {
|
||||||
int x,y,z;
|
int x,y,z;
|
||||||
for (x=0;x < test_map->width;x++) {
|
for (x=0;x < test_map->width;x++) {
|
||||||
for (y=0;y < test_map->height;y++) {
|
for (y=0;y < test_map->height;y++) {
|
||||||
test_map->tiles[x][y][0] = newTile(x, y, 0, getTileDataById(g_tile_data, 2, 0));
|
addTileToMap(test_map, newTile(getTileDataById(g_tile_data, 2, 0)), x, y, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (x=8;x < 9;x++) {
|
for (x=8;x < 9;x++) {
|
||||||
for (y=0;y < test_map->height;y++) {
|
for (y=0;y < test_map->height;y++) {
|
||||||
test_map->tiles[x][y][1] = newTile(x, y, 1, getTileDataById(g_tile_data, 3, 0));
|
addTileToMap(test_map, newTile(getTileDataById(g_tile_data, 3, 0)), x, y, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
test_player_tile = newTile(2, 2, 1, getTileDataById(g_tile_data, 0, 0));
|
int i = 0;
|
||||||
|
z = 0;
|
||||||
|
x = 0;
|
||||||
|
for (i=0;i < 3;i++) {
|
||||||
|
for (z = 0; z < 8;z++) {
|
||||||
|
//for(x = 12;x < 16;x++) {
|
||||||
|
//test_map->tiles[x][9][0]->next = newTile(getTileDataById(g_tile_data, 7, i));
|
||||||
|
addTileToMap(test_map, newTile(getTileDataById(g_tile_data, 8, i)), x+i, 9, z);
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
test_player_tile = newTile(getTileDataById(g_tile_data, 0, 0));
|
||||||
test_map->tiles[2][2][1] = test_player_tile;
|
test_map->tiles[2][2][1] = test_player_tile;
|
||||||
|
|
||||||
key_press[0] = 0;
|
key_press[0] = 0;
|
||||||
|
|
@ -72,22 +84,22 @@ void processTestState(int delta) {
|
||||||
while(s_accumulator >= g_tick_time.n) {
|
while(s_accumulator >= g_tick_time.n) {
|
||||||
if (key_press[0] == 1) {
|
if (key_press[0] == 1) {
|
||||||
test_player_tile->set = 4;
|
test_player_tile->set = 4;
|
||||||
moveTile(test_map, test_player_tile, -0.1f, 0.0f, 0.0f);
|
moveTile(test_map, test_player_tile, -0.5f, 0.0f, 0.0f);
|
||||||
//moveTile(test_map, test_player_tile, -1.0f, 0.0f, 0.0f);
|
//moveTile(test_map, test_player_tile, -1.0f, 0.0f, 0.0f);
|
||||||
}
|
}
|
||||||
if (key_press[1] == 1) {
|
if (key_press[1] == 1) {
|
||||||
test_player_tile->set = 5;
|
test_player_tile->set = 5;
|
||||||
moveTile(test_map, test_player_tile, 0.0f, 0.1f, 0.0f);
|
moveTile(test_map, test_player_tile, 0.0f, 0.5f, 0.0f);
|
||||||
//moveTile(test_map, test_player_tile, 0.0f, 1.0f, 0.0f);
|
//moveTile(test_map, test_player_tile, 0.0f, 1.0f, 0.0f);
|
||||||
}
|
}
|
||||||
if (key_press[2] == 1) {
|
if (key_press[2] == 1) {
|
||||||
test_player_tile->set = 6;
|
test_player_tile->set = 6;
|
||||||
moveTile(test_map, test_player_tile, 0.1f, 0.0f, 0.0f);
|
moveTile(test_map, test_player_tile, 0.5f, 0.0f, 0.0f);
|
||||||
//moveTile(test_map, test_player_tile, 1.0f, 0.0f, 0.0f);
|
//moveTile(test_map, test_player_tile, 1.0f, 0.0f, 0.0f);
|
||||||
}
|
}
|
||||||
if (key_press[3] == 1) {
|
if (key_press[3] == 1) {
|
||||||
test_player_tile->set = 7;
|
test_player_tile->set = 7;
|
||||||
moveTile(test_map, test_player_tile, 0.0f, -0.1f, 0.0f);
|
moveTile(test_map, test_player_tile, 0.0f, -0.5f, 0.0f);
|
||||||
//moveTile(test_map, test_player_tile, 0.0f, -1.0f, 0.0f);
|
//moveTile(test_map, test_player_tile, 0.0f, -1.0f, 0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -123,6 +135,7 @@ void renderTestState() {
|
||||||
int id = tile->data->id;
|
int id = tile->data->id;
|
||||||
int pix_x = tile->x * g_module_spritesheets[tile->data->tid]->s_width;
|
int pix_x = tile->x * g_module_spritesheets[tile->data->tid]->s_width;
|
||||||
int pix_y = (tile->y * g_module_spritesheets[tile->data->tid]->s_height)/2;
|
int pix_y = (tile->y * g_module_spritesheets[tile->data->tid]->s_height)/2;
|
||||||
|
pix_y -= (tile->z * (g_module_spritesheets[tile->data->tid]->s_height/4));
|
||||||
g_renderSprite(g_module_spritesheets[tile->data->tid], g_screen, id, pix_x, pix_y);
|
g_renderSprite(g_module_spritesheets[tile->data->tid], g_screen, id, pix_x, pix_y);
|
||||||
|
|
||||||
tile = tile->next;
|
tile = tile->next;
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,11 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "tile.h"
|
#include "tile.h"
|
||||||
|
|
||||||
struct Tile *newTile(float x, float y, float z, struct TileData *data) {
|
struct Tile *newTile(struct TileData *data) {
|
||||||
struct Tile *tile = malloc(sizeof(struct Tile));
|
struct Tile *tile = malloc(sizeof(struct Tile));
|
||||||
//printf("%fx%fx%f\n", x, y, z);
|
tile->x = 0.0f;
|
||||||
tile->x = x;
|
tile->y = 0.0f;
|
||||||
tile->y = y;
|
tile->z = 0.0f;
|
||||||
tile->z = z;
|
|
||||||
tile->set = 0;
|
tile->set = 0;
|
||||||
tile->frame = 0;
|
tile->frame = 0;
|
||||||
tile->data = duplicateTileData(data);
|
tile->data = duplicateTileData(data);
|
||||||
|
|
@ -23,7 +22,10 @@ void freeTile(struct Tile *tile) {
|
||||||
free(tile);
|
free(tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: return non-VOID and check for NULL tile_target and new_tile
|
||||||
void appendTile(struct Tile *tile_target, struct Tile *new_tile) {
|
void appendTile(struct Tile *tile_target, struct Tile *new_tile) {
|
||||||
|
if (tile_target == NULL)
|
||||||
|
return;
|
||||||
if (new_tile == tile_target)
|
if (new_tile == tile_target)
|
||||||
return;
|
return;
|
||||||
struct Tile *current_tile = tile_target;
|
struct Tile *current_tile = tile_target;
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ struct Tile {
|
||||||
struct Tile *prev;
|
struct Tile *prev;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Tile *newTile(float x, float y, float z, struct TileData *data);
|
struct Tile *newTile(struct TileData *data);
|
||||||
void freeTile(struct Tile *tile);
|
void freeTile(struct Tile *tile);
|
||||||
|
|
||||||
void appendTile(struct Tile *tile_target, struct Tile *new_tile);
|
void appendTile(struct Tile *tile_target, struct Tile *new_tile);
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ sprites {
|
||||||
5 items
|
5 items
|
||||||
6 materials
|
6 materials
|
||||||
7 spells
|
7 spells
|
||||||
|
8 shapes
|
||||||
}
|
}
|
||||||
; list of playable characters for character creation
|
; list of playable characters for character creation
|
||||||
chars {
|
chars {
|
||||||
|
|
|
||||||
|
|
@ -85,3 +85,11 @@ spells {
|
||||||
set 1
|
set 1
|
||||||
frame 1
|
frame 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
shapes {
|
||||||
|
width 16
|
||||||
|
height 32
|
||||||
|
columns 4
|
||||||
|
set 1
|
||||||
|
frame 1
|
||||||
|
}
|
||||||
|
|
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 362 B |
|
|
@ -118,3 +118,14 @@ name stone wall
|
||||||
name wood wall
|
name wood wall
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
8 {
|
||||||
|
0 {
|
||||||
|
name box
|
||||||
|
}
|
||||||
|
1 {
|
||||||
|
name sphere
|
||||||
|
}
|
||||||
|
2 {
|
||||||
|
name pyramid
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue