Funcionalitat basica acabada
This commit is contained in:
52
main.cpp
52
main.cpp
@@ -121,17 +121,16 @@ void Init() {
|
|||||||
int r = 0, g = 0, b = 0;
|
int r = 0, g = 0, b = 0;
|
||||||
for (int ty = 0; ty < tile_width; ty++) {
|
for (int ty = 0; ty < tile_width; ty++) {
|
||||||
for (int tx = 0; tx < tile_height; tx++) {
|
for (int tx = 0; tx < tile_height; tx++) {
|
||||||
const Uint32 color = buffer[(bx + tx) + (by + ty)*tilemap_width];
|
const Uint32 offset = (bx + tx) * 4 + (by + ty)*(tilemap_width * 4);
|
||||||
r += color & 0xff;
|
r += buffer[offset];
|
||||||
g += (color >> 8) & 0xff;
|
g += buffer[offset+1];
|
||||||
b += (color >> 16) & 0xff;
|
b += buffer[offset+2];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
r /= tile_width*tile_height;
|
r /= (tile_width*tile_height);
|
||||||
g /= tile_width*tile_height;
|
g /= (tile_width*tile_height);
|
||||||
b /= tile_width*tile_height;
|
b /= (tile_width*tile_height);
|
||||||
minitiles[tmx + tmy*tmtw] = 0xff000000 + r + (b << 8) + (g << 16);
|
minitiles[tmx + tmy*tmtw] = 0xFF000000 + b + (g << 8) + (r << 16);
|
||||||
//minitiles[tmx + tmy*tmtw] = 0xff + (r << 24) + (b << 8) + (g << 16);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stbi_image_free(buffer);
|
stbi_image_free(buffer);
|
||||||
@@ -145,7 +144,7 @@ void Init() {
|
|||||||
fread(map, map_width*map_height, 1, f);
|
fread(map, map_width*map_height, 1, f);
|
||||||
fclose(f);
|
fclose(f);
|
||||||
|
|
||||||
sdlMinimapTexture = SDL_CreateTexture(sdlRenderer, SDL_PIXELFORMAT_ABGR8888, SDL_TEXTUREACCESS_STATIC, map_width, map_height);
|
sdlMinimapTexture = SDL_CreateTexture(sdlRenderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STATIC, map_width, map_height);
|
||||||
pixels = (Uint32*)malloc(map_width * map_height*sizeof(Uint32));
|
pixels = (Uint32*)malloc(map_width * map_height*sizeof(Uint32));
|
||||||
for (int y = 0; y < map_height; y++) {
|
for (int y = 0; y < map_height; y++) {
|
||||||
for (int x = 0; x < map_width; x++) {
|
for (int x = 0; x < map_width; x++) {
|
||||||
@@ -294,6 +293,7 @@ void DoTileMap() {
|
|||||||
const int cur_y = mouse.y / tile_height;
|
const int cur_y = mouse.y / tile_height;
|
||||||
DrawRect(cur_x*tile_width-1, cur_y*tile_height-1, tile_width + 2, tile_height + 2, 255, 255, 255, 128);
|
DrawRect(cur_x*tile_width-1, cur_y*tile_height-1, tile_width + 2, tile_height + 2, 255, 255, 255, 128);
|
||||||
if (keyJustPressed == SDL_SCANCODE_Q) state = STATE_TILEPAL;
|
if (keyJustPressed == SDL_SCANCODE_Q) state = STATE_TILEPAL;
|
||||||
|
if (keyJustPressed == SDL_SCANCODE_E) state = STATE_MINIMAP;
|
||||||
if (keyJustPressed == SDL_SCANCODE_RIGHT || keyJustPressed == SDL_SCANCODE_D) if (map_x < map_width - width_in_tiles) map_x += width_in_tiles;
|
if (keyJustPressed == SDL_SCANCODE_RIGHT || keyJustPressed == SDL_SCANCODE_D) if (map_x < map_width - width_in_tiles) map_x += width_in_tiles;
|
||||||
if (keyJustPressed == SDL_SCANCODE_LEFT || keyJustPressed == SDL_SCANCODE_A) if (map_x > 0) map_x -= width_in_tiles;
|
if (keyJustPressed == SDL_SCANCODE_LEFT || keyJustPressed == SDL_SCANCODE_A) if (map_x > 0) map_x -= width_in_tiles;
|
||||||
if (keyJustPressed == SDL_SCANCODE_DOWN || keyJustPressed == SDL_SCANCODE_S) if (map_y < map_height - height_in_tiles) map_y += height_in_tiles;
|
if (keyJustPressed == SDL_SCANCODE_DOWN || keyJustPressed == SDL_SCANCODE_S) if (map_y < map_height - height_in_tiles) map_y += height_in_tiles;
|
||||||
@@ -305,7 +305,37 @@ void DoTileMap() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void DoMiniMap() {
|
void DoMiniMap() {
|
||||||
Draw(sdlMinimapTexture, 0, 0, 0, 0, map_width, map_height);
|
int ox = 0, oy = 0;
|
||||||
|
if (map_width <= screen_width) {
|
||||||
|
ox = (screen_width - map_width) / 2;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
const int max_offset = map_width - screen_width;
|
||||||
|
const float mouse_ratio = float(mouse.x) / float(screen_width);
|
||||||
|
ox = -(mouse_ratio * max_offset);
|
||||||
|
}
|
||||||
|
if (map_height <= screen_height) {
|
||||||
|
oy = (screen_height - map_height) / 2;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
const int max_offset = map_height - screen_height;
|
||||||
|
const float mouse_ratio = float(mouse.y) / float(screen_height);
|
||||||
|
oy = -(mouse_ratio * max_offset);
|
||||||
|
}
|
||||||
|
Draw(sdlMinimapTexture, ox, oy, 0, 0, map_width, map_height);
|
||||||
|
|
||||||
|
const int screen_width_in_tiles = screen_width / tile_width;
|
||||||
|
const int screen_height_in_tiles = screen_height / tile_height;
|
||||||
|
DrawRect((ox + map_x) - 1, (oy + map_y) - 1, screen_width_in_tiles + 2, screen_height_in_tiles + 2, 255, 255, 255);
|
||||||
|
//DrawRect(ox + (tile_sel % tiles_per_row)*tile_width - 1, oy + (tile_sel / tiles_per_row)*tile_height - 1, tile_width + 2, tile_height + 2, 255, 255, 255);
|
||||||
|
if (mouse.buttons[0]) {
|
||||||
|
map_x = int((mouse.x-ox) / screen_width_in_tiles) * screen_width_in_tiles;
|
||||||
|
map_y = int((mouse.y - oy) / screen_height_in_tiles) * screen_height_in_tiles;
|
||||||
|
state = STATE_TILEMAP;
|
||||||
|
ignoreMouse = true;
|
||||||
|
}
|
||||||
|
if (keyJustPressed == SDL_SCANCODE_E) state = STATE_TILEMAP;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char* argv[]) {
|
int main(int argc, char* argv[]) {
|
||||||
|
|||||||
Reference in New Issue
Block a user