summaryrefslogtreecommitdiff
path: root/src/display.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/display.py')
-rw-r--r--src/display.py160
1 files changed, 139 insertions, 21 deletions
diff --git a/src/display.py b/src/display.py
index 4ba3c24..536b2f3 100644
--- a/src/display.py
+++ b/src/display.py
@@ -2,10 +2,22 @@ import pygame
import helper
import pause
+import picker as picker_ui
+import time
+import save
opacity = 0
-def draw(canvas, screen, need_update_world, world, mouse, blocks, zoom, offset, block_coordinates, paused, screen_blocks):
+def draw(canvas, screen, need_update_world, world, mouse, loaded_chunks, zoom, offset, block_coordinates, paused, screen_blocks, selected_block, picker, save_data):
+ global v1
+ global v2
+ global last_v1
+ global last_v2
+
+ blocks = [] # TODO: Figure out what chunks to get and how to get them
+
+ start = time.time()
+ timings = {}
global opacity
canvas.fill("red")
@@ -17,33 +29,108 @@ def draw(canvas, screen, need_update_world, world, mouse, blocks, zoom, offset,
width = height * (16/9)
world_display = pygame.Surface((1280, 720))
+ needed_update_world = need_update_world
if need_update_world:
screen_blocks = []
world.fill("gray")
- for layer in range(len(blocks)):
- for height in range(len(blocks[layer]) - 1, -1, -1):
- for width in range(len(blocks[layer][height]) - 1, -1, -1):
- if blocks[layer][height][width] != "air":
- x = offset[0] + 500 + (21 * width) - (21 * height)
- y = offset[1] + 500 - (13 * layer) - (14 * width) - (12 * height)
- world.blit(helper.draw_texture(helper.get_block_texture(blocks[layer][height][width])), (x, y))
-
- for layer in range(len(blocks) - 1, -1, -1):
- for height in range(len(blocks[layer]) - 1, -1, -1):
- for width in range(len(blocks[layer][height]) - 1, -1, -1):
- if blocks[layer][height][width] != "air":
- x = offset[0] + 500 + (21 * width) - (21 * height)
- y = offset[1] + 500 - (13 * layer) - (14 * width) - (12 * height)
- screen_blocks.append((x, y, blocks[layer][height][width], layer, height, width))
-
+ tstart = time.time()
+
+ chunks_to_display = []
+ print(chunks_to_display)
+
+ for x in range(len(loaded_chunks)):
+ for y in range(len(loaded_chunks[x])):
+ if loaded_chunks[x][y] is not None:
+ if (x, y) not in chunks_to_display:
+ save.save_chunk(save_data, str(x) + "," + str(y) + ".bcr", loaded_chunks[x][y])
+ loaded_chunks[x][y] = None
+
+ chunk_x = 0
+
+ for _ in range(8):
+ chunk_y = 0
+ display_status = []
+
+ for _ in range(8):
+ displayed = False
+ coords = []
+
+ for layer in range(1):
+ for height in range(15, -1, -1):
+ for width in range(15, -1, -1):
+ coords.append((offset[0] + (chunk_x * 336) - (chunk_y * 333) + 500 + (21 * width) - (21 * height), offset[1] + (chunk_x * 193) + (chunk_y * 222) + 500 - (13 * layer) - (14 * width) - (12 * height)))
+
+ for coord in coords:
+ if 0 < coord[0] < 1280 and 0 < coord[1] < 720:
+ displayed = True
+
+ display_status.append(displayed)
+ if displayed:
+ chunks_to_display.append((chunk_x, chunk_y))
+ chunk_y += 1
+ chunk_x += 1
+
+ print(chunks_to_display)
+
+ for chunk_coords in chunks_to_display:
+ chunk_x = chunk_coords[0]
+ chunk_y = chunk_coords[1]
+
+ chunk_is_loaded = False
+
+ if len(loaded_chunks) - 1 >= chunk_x:
+ if len(loaded_chunks[chunk_x]) - 1 >= chunk_y:
+ if loaded_chunks[chunk_x][chunk_y] is not None:
+ chunk_is_loaded = True
+
+ if chunk_is_loaded:
+ blocks = loaded_chunks[chunk_x][chunk_y]
+ else:
+ blocks = save.get_chunk(save_data, (chunk_x, chunk_y))
+
+ while len(loaded_chunks) - 1 <= chunk_x:
+ loaded_chunks.append([])
+
+ while len(loaded_chunks[chunk_x]) - 1 <= chunk_y:
+ loaded_chunks[chunk_x].append(None)
+
+ loaded_chunks[chunk_x][chunk_y] = blocks
+
+ for layer in range(len(blocks)):
+ for height in range(len(blocks[layer]) - 1, -1, -1):
+ if len(blocks[layer][height]) == len(list(filter(lambda i: i == "air", blocks[layer][height]))):
+ continue
+
+ for width in range(len(blocks[layer][height]) - 1, -1, -1):
+ if blocks[layer][height][width] != "air":
+ x = offset[0] + (chunk_x * 336) - (chunk_y * 333) + 500 + (21 * width) - (21 * height)
+ y = offset[1] + (chunk_x * 193) + (chunk_y * 222) + 500 - (13 * layer) - (14 * width) - (12 * height)
+ world.blit(helper.draw_texture(helper.get_block_texture(blocks[layer][height][width])), (x, y))
+
+ for layer in range(len(blocks) - 1, -1, -1):
+ for height in range(len(blocks[layer]) - 1, -1, -1):
+ if len(blocks[layer][height]) == len(list(filter(lambda i: i == "air", blocks[layer][height]))):
+ continue
+
+ for width in range(len(blocks[layer][height]) - 1, -1, -1):
+ if blocks[layer][height][width] != "air":
+ x = offset[0] + (chunk_x * 336) - (chunk_y * 333) + 500 + (21 * width) - (21 * height)
+ y = offset[1] + (chunk_x * 193) + (chunk_y * 222) + 500 - (13 * layer) - (14 * width) - (12 * height)
+ screen_blocks.append((x, y, blocks[layer][height][width], layer, height + (chunk_x * 16), width + (chunk_y * 16), height, width))
+
+ timings['draw_map'] = (time.time() - tstart) * 1000
+ tstart = time.time()
need_update_world = False
- print(offset)
+ tstart = time.time()
world_display.blit(world, (0, 0))
+ timings['screen_display_world'] = (time.time() - tstart) * 1000
- if mouse[0] > -1 and mouse[1] > -1 and pygame.mouse.get_focused() and not paused:
+ tstart = time.time()
+
+ if mouse[0] > -1 and mouse[1] > -1 and pygame.mouse.get_focused() and not paused and not picker:
cursor_x = original_cursor_x = mouse[0] - 42 / 2
cursor_y = original_cursor_y = mouse[1] - 42 / 2
cursor_changed = False
@@ -63,6 +150,9 @@ def draw(canvas, screen, need_update_world, world, mouse, blocks, zoom, offset,
world_display.blit(helper.draw_texture(2), (original_cursor_x + 42 / 2, original_cursor_y + 42 / 2))
+ timings['process_mouse'] = (time.time() - tstart) * 1000
+ tstart = time.time()
+
x = 1280 / 2 - zoom[0] / 2
y = 720 / 2 - zoom[1] / 2
@@ -79,9 +169,29 @@ def draw(canvas, screen, need_update_world, world, mouse, blocks, zoom, offset,
y = 0
canvas.blit(pygame.transform.scale(world_display.subsurface(x, y, zoom[0], zoom[1]), (1280, 720)), (0, 0))
+ timings['screen_display_world_zoomed'] = (time.time() - tstart) * 1000
+ tstart = time.time()
+
+ canvas.blit(pygame.transform.scale(helper.draw_control(79), (34, 34)), (10, 10))
+ canvas.blit(helper.text("Pause", 20, (255, 255, 255)), (54, 20))
+ canvas.blit(pygame.transform.scale(pygame.Surface.convert_alpha(helper.draw_texture(0)), (84, 84)), (1191, 631))
+ timings['hud_static'] = (time.time() - tstart) * 1000
+ tstart = time.time()
+
+ canvas.blit(pygame.Surface.convert_alpha(helper.draw_texture(helper.get_block_texture(selected_block))), (1228, 10))
+ canvas.blit(pygame.transform.scale(helper.draw_control(4), (34, 34)), (1184, 15))
+
+ timings['hud_picker'] = (time.time() - tstart) * 1000
+ tstart = time.time()
if paused:
- canvas.blit(pygame.Surface.convert_alpha(pause.show()), (0, 0))
+ canvas.blit(pause.show(), (0, 0))
+
+ if picker:
+ canvas.blit(picker_ui.show(mouse), (0, 0))
+
+ timings['hud_gui'] = (time.time() - tstart) * 1000
+ tstart = time.time()
scaled_win = pygame.transform.scale(canvas, (width, height))
@@ -91,8 +201,11 @@ def draw(canvas, screen, need_update_world, world, mouse, blocks, zoom, offset,
result = helper.transparent(scaled_win, opacity)
screen.blit(result, (screen.get_size()[0] / 2 - width / 2, screen.get_size()[1] / 2 - height / 2))
+ timings['screen_display_final'] = (time.time() - tstart) * 1000
+ tstart = time.time()
pygame.display.flip()
+ timings['screen_display_flip'] = (time.time() - tstart) * 1000
if opacity < 1:
opacity += 1/30
@@ -100,4 +213,9 @@ def draw(canvas, screen, need_update_world, world, mouse, blocks, zoom, offset,
if opacity >= 1:
opacity = 1
- return canvas, screen, need_update_world, world, mouse, blocks, zoom, offset, block_coordinates, paused, screen_blocks
+ if needed_update_world:
+ print((time.time() - start) * 1000)
+ print(timings)
+ print("-----------------------")
+
+ return canvas, screen, need_update_world, world, mouse, loaded_chunks, zoom, offset, block_coordinates, paused, screen_blocks, selected_block, picker, blocks, save_data