Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/MapEditor.py
blob: 27570fb37e6aea06816085c7e9915091077e2f9a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
import pygame
import os
import sys
import random
import math


def draw_grid(grid,screen):
    for yi in range(18):
        for xi in range(24):
            if grid[yi+1][xi+1] == 1:
                pygame.draw.rect(screen,(100,100,100),(xi*50,yi*50,50,50),2)

def render_tiles(tiles, tile_size, screen, scale):
    i = 0
    for tile in tiles:
        screen.blit(pygame.transform.scale(tile, 
                                           (int(tile_size[0]*scale), 
                                            int(tile_size[1]*scale))),
                    (i*int(tile_size[0]*scale), 0))
        i += 1

def render_map(grid, tiles, tile_size, screen, scale):
    for i in range(len(grid)):
        for j in range(len(grid[i])):
            screen.blit(pygame.transform.scale(tiles[grid[i][j]],
                                               (int(tile_size[0]*scale), 
                                                int(tile_size[1]*scale))),
                        (j*int(tile_size[0]*scale),
                         (i+2)*int(tile_size[1]*scale)))

def render_selected_tile(sel_tile, tile_size, screen, scale):
    pygame.draw.rect(screen,(200,0,0),
                     (sel_tile*int(tile_size[0]*scale),0,
                      int(tile_size[0]*scale),int(tile_size[0]*scale)),1)
    
def render_click(coord, sel_tile, grid, tile_size, screen, scale):
    
    screen.blit(pygame.transform.scale(tiles[grid[i][j]],
                                       (int(tile_size[0]*scale), 
                                        int(tile_size[1]*scale))),
                (j*int(tile_size[0]*scale),
                 (i+2)*int(tile_size[1]*scale)))

def save_grid(grid):
    print(grid)

if __name__ == "__main__":

    # initializations
    pygame.init()
    screen = pygame.display.set_mode((1024,768))
    clock = pygame.time.Clock()
    # tile parameters
    tileset_file = os.path.join('images', 'derechos-tileset-fondos.png')
    tile_default = 0 # tile # that will be used as default
    tile_border = 30 # tile # for the border (outside the screen)
    tile_size = (50, 50) # (x, y) in pixels
    tileset_size = (8, 4) # (x, y) in tiles
    screen_size = (1200, 900) # (x, y) in pixels
    # scale
    scale = 0.5
    # selected tile
    sel_tile = 0
    # check for consistency
    if screen_size[0] % tile_size[0] != 0 \
            or screen_size[0] % tile_size[0] != 0:
        print("Dimensions of the screen are not multiples of the tile size.")
        sys.exit()
    map_size = (screen_size[0]/tile_size[0], screen_size[1]/tile_size[1])
    # load tileset
    tiles = []
    tileset_image = pygame.image.load(tileset_file).convert_alpha()
    w, h = tileset_image.get_size()
    if tile_size[0]*tileset_size[0] != w \
            or tile_size[1]*tileset_size[1] != h:
        print("Dimensions of the tileset_file don't agree with size.")
        sys.exit()
    for i in xrange(tileset_size[1]):
        for j in xrange(tileset_size[0]):
            tiles.append(tileset_image.subsurface((j*tile_size[0],
                                                   i*tile_size[1],
                                                   tile_size[0],
                                                   tile_size[1])))
    # create initial grid
    grid = [ [tile_default]*(map_size[0]+2) for i in xrange(map_size[1]+2)]
    grid[0] = [tile_border]*(map_size[0]+2)
    grid[map_size[1]+1] = [tile_border]*(map_size[0]+2)
    for i in xrange(map_size[1]):
        grid[i+1][0] = tile_border
        grid[i+1][map_size[0]+1] = tile_border
    # render initial screen
    render_tiles(tiles, tile_size, screen, scale) 
    render_map(grid, tiles, tile_size, screen, scale) 
    render_selected_tile(sel_tile, tile_size, screen, scale)
    pygame.display.flip()

    font24 = pygame.font.Font(None, 24)

    playing = True
    
    while playing:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                playing = False
            elif event.type == pygame.MOUSEBUTTONDOWN:
                coord = pygame.mouse.get_pos()
                if coord[1] < tile_size[1]*scale \
                        and coord[0] < len(tiles)*tile_size[0]*scale:
                    sel_tile = int(coord[0]/(tile_size[0]*scale))
                elif coord[0] < (map_size[0]+2)*tile_size[0]*scale \
                        and coord[1] < ((map_size[1]+4)*tile_size[1])*scale \
                        and coord[1] > 2*tile_size[1]*scale:
                    grid[int(coord[1]-2*tile_size[1]*scale)/int(tile_size[1]*scale)]\
                        [coord[0]/int(tile_size[0]*scale)] = sel_tile
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_UP:
                    pass
                elif event.key == pygame.K_DOWN:
                    pass
                elif event.key == pygame.K_LEFT:
                    if sel_tile > 0:
                        sel_tile -= 1
                elif event.key == pygame.K_RIGHT:
                    if sel_tile < len(tiles)-1:
                        sel_tile += 1
                elif event.key == pygame.K_s:
                    save_grid(grid)
                elif event.key == pygame.K_ESCAPE \
                        or event.key == pygame.K_q:
                    playing = False

        time_passed = clock.tick(20)

        render_tiles(tiles, tile_size, screen, scale) 
        render_map(grid, tiles, tile_size, screen, scale) 
        render_selected_tile(sel_tile, tile_size, screen, scale)
        pygame.display.flip()