Add basic terrain to map.
This commit is contained in:
parent
dd2864186e
commit
7fab78fa8a
52
main.py
52
main.py
|
@ -1,4 +1,5 @@
|
|||
import collections
|
||||
import random
|
||||
|
||||
from kivy import app, properties
|
||||
from kivy.logger import Logger
|
||||
|
@ -9,6 +10,43 @@ from kivy.vector import Vector
|
|||
import kivy.utils
|
||||
|
||||
MapCoords = collections.namedtuple('MapCoords', ['row', 'col'])
|
||||
Terrains = {
|
||||
'plain': {
|
||||
'color': '#71CD00'
|
||||
},
|
||||
'hill':{
|
||||
'color': '#505355'
|
||||
},
|
||||
'water':{
|
||||
'color': '#5D88F8'
|
||||
},
|
||||
'sand':{
|
||||
'color': '#F9CF29'
|
||||
},
|
||||
'forest':{
|
||||
'color': '#10A71E'
|
||||
},
|
||||
'city':{
|
||||
'color': '#A1A5AA'
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
def choose_random_terrain():
|
||||
random_terrain_seed = random.randint(0, 100)
|
||||
terrain = 'plain'
|
||||
if 0 < random_terrain_seed < 20:
|
||||
terrain = 'forest'
|
||||
elif 20 < random_terrain_seed < 25:
|
||||
terrain = 'hill'
|
||||
elif 50 < random_terrain_seed < 60:
|
||||
terrain = 'water'
|
||||
elif 70 < random_terrain_seed < 90:
|
||||
terrain = 'sand'
|
||||
elif 90 < random_terrain_seed < 100:
|
||||
terrain = 'city'
|
||||
return terrain
|
||||
|
||||
|
||||
class StrategyGame(FloatLayout):
|
||||
|
@ -27,10 +65,12 @@ class StrategyGame(FloatLayout):
|
|||
|
||||
# Add hex cells to make up the map.
|
||||
hex_cell = HexMapCell(row, col)
|
||||
hex_cell.disabled = True
|
||||
self.main_map.add_widget(hex_cell)
|
||||
|
||||
# Add overlay conditionally.
|
||||
if (row % 6 == 1 and col % 2 == 1) or (row % 6 == 4 and col % 2 == 0) and (col > 0):
|
||||
hex_cell.disabled = False
|
||||
hex_cell.visible_on_map = True
|
||||
|
||||
# Determine the location of the solid hexagon cell. Needs to be offset from the centre of the hex.
|
||||
|
@ -45,8 +85,11 @@ class StrategyGame(FloatLayout):
|
|||
Color(*kivy.utils.get_color_from_hex('#A1A5AA'))
|
||||
hex_cell.ell = Line(circle=(hex_cell.x, hex_cell.y, radius, 0, 360, 6), width=2)
|
||||
|
||||
# Pick a random terrain for each hex.
|
||||
hex_cell.terrain = choose_random_terrain()
|
||||
|
||||
# Create the solid background of the hexagon, from the bottom left coordinate of the hex.
|
||||
hex_cell.terrain_colour = kivy.utils.get_random_color(alpha=.5)
|
||||
hex_cell.terrain_colour = kivy.utils.get_color_from_hex(Terrains[hex_cell.terrain]['color'])
|
||||
Color(*hex_cell.terrain_colour)
|
||||
hex_cell.solid = Ellipse(pos=(solid_x, solid_y), size=solid_size, segments=6)
|
||||
|
||||
|
@ -74,13 +117,14 @@ class HexMapCell(Label):
|
|||
self.selected = False
|
||||
self.visible_on_map = False
|
||||
self.terrain_colour = Color(0, 0, 0, 1)
|
||||
self.terrain = ''
|
||||
|
||||
def map_coordinates(self):
|
||||
return self.coords.row / 3, self.coords.col / 2
|
||||
|
||||
def map_display_text(self):
|
||||
map_x, map_y = self.map_coordinates()
|
||||
return "({}, {})".format(map_x, map_y)
|
||||
return "({}, {}) \n {}".format(map_x, map_y, self.terrain)
|
||||
|
||||
def update_pos(self, instance, value):
|
||||
# Determine the location of the solid hexagon cell. Needs to be offset from the centre of the hex.
|
||||
|
@ -107,12 +151,12 @@ class HexMapCell(Label):
|
|||
if not self.visible_on_map:
|
||||
return False
|
||||
|
||||
Logger.debug("Visibly Touched! {}, {} at {}, {}".format(touch.x, touch.y, coord_x, coord_y))
|
||||
if not self.collide_with_bounding_circle(touch.x, touch.y):
|
||||
with self.canvas.after:
|
||||
Color(*kivy.utils.get_color_from_hex('#A1A5AA'))
|
||||
radius = 2 * self.height
|
||||
self.ell = Line(circle=(self.x, self.y, radius, 0, 360, 6), width=2)
|
||||
|
||||
if not self.collide_with_bounding_circle(touch.x, touch.y):
|
||||
return False
|
||||
|
||||
Logger.debug('Selected: ({}, {})'.format(coord_x, coord_y))
|
||||
|
|
Loading…
Reference in New Issue