|
|
@@ -132,6 +132,69 @@ class NodeGameMap(gbe.nodes.Node2D): |
|
|
|
def cell_position(self): |
|
|
|
return (self._cellpos[0], self._cellpos[1]) |
|
|
|
|
|
|
|
|
|
|
|
def load_map(self, src, user=True): |
|
|
|
rtype = "maps" |
|
|
|
if user == True: |
|
|
|
rtype = "user_maps" |
|
|
|
rm = self.resource |
|
|
|
m = None |
|
|
|
try: |
|
|
|
m = rm.load(rtype, src) |
|
|
|
m = m.data |
|
|
|
except Exception as e: |
|
|
|
print ("Failed to load '{}': {}".format(src, e)) |
|
|
|
|
|
|
|
if "version" not in m: |
|
|
|
print("Invalid Map Data!") |
|
|
|
return |
|
|
|
if m["version"] != "0.0.1": |
|
|
|
print ("Invalid map version.") |
|
|
|
return |
|
|
|
if "count" not in m: |
|
|
|
print("Invalid Map Data!") |
|
|
|
return |
|
|
|
if not isinstance(m["count"], int): |
|
|
|
print("Invalid Map Data!") |
|
|
|
return |
|
|
|
if "layers" not in m: |
|
|
|
print ("Invalid Map Data!") |
|
|
|
return |
|
|
|
if len(m["layers"]) != m["count"]: |
|
|
|
print ("Map Layer count mismatch!") |
|
|
|
return |
|
|
|
if "player" not in m: |
|
|
|
print ("Invalid Map Data!") |
|
|
|
return |
|
|
|
# OK... these are weak tests, but we'll just accept it from here! |
|
|
|
self._layer = m["layers"] |
|
|
|
self._currentLayer = m["player"]["layer_name"] |
|
|
|
self._cellpos = m["player"]["pos"] |
|
|
|
self._orientation = m["player"]["orientation"] |
|
|
|
|
|
|
|
print("Map '{}' loaded!".format(src)) |
|
|
|
|
|
|
|
|
|
|
|
def save_map(self, dst): |
|
|
|
rm = self.resource |
|
|
|
m = { |
|
|
|
"version":"0.0.1", |
|
|
|
"count":self.layer_count, |
|
|
|
"layers":self._layer, |
|
|
|
"player":{ |
|
|
|
"layer_name":self._currentLayer, |
|
|
|
"pos":(self._cellpos[0], self._cellpos[1]), |
|
|
|
"orientation":self._orientation |
|
|
|
} |
|
|
|
} |
|
|
|
try: |
|
|
|
rm.save("user_maps", dst, m) |
|
|
|
except Exception as e: |
|
|
|
print("Failed to save '{}': {}".format(dst, e)) |
|
|
|
return |
|
|
|
print ("Map '{}' saved.".format(dst)) |
|
|
|
|
|
|
|
|
|
|
|
def set_resources(self, env_src, wall_src): |
|
|
|
res = self.resource |
|
|
|
if env_src != "" and env_src != self._res["env_src"]: |
|
|
@@ -672,8 +735,18 @@ class NodeMapEditor(gbe.nodes.Node2D): |
|
|
|
self._thickness = 1 |
|
|
|
self._color = pygame.Color(255,255,255) |
|
|
|
self._points = None |
|
|
|
self._filename = None |
|
|
|
self._fileiomode = 0 # 0 = Save | 1 = Load |
|
|
|
self.pointer_size = 4 |
|
|
|
|
|
|
|
self._fnnode = gbe.nodes.NodeText("FileText", self) |
|
|
|
self._fnnode.size = 4 |
|
|
|
self._fnnode.font_src = "IttyBitty.ttf" |
|
|
|
self._fnnode.antialias = False |
|
|
|
self._fnnode.set_color(255,255,255) |
|
|
|
self._fnnode.set_background(0,0,0,128) |
|
|
|
self._fnnode.visible = False |
|
|
|
|
|
|
|
def _getPoints(self, size): |
|
|
|
p = self.parent |
|
|
|
o = p.orientation |
|
|
@@ -734,26 +807,50 @@ class NodeMapEditor(gbe.nodes.Node2D): |
|
|
|
return |
|
|
|
|
|
|
|
if data["key_name"] == "escape": |
|
|
|
self.emit("SCENECHANGE", {"scene":"MAIN_MENU", "hold":False}) |
|
|
|
#self.emit("QUIT") |
|
|
|
if data["key_name"] == "tab": |
|
|
|
p.toggle_render_mode() |
|
|
|
elif data["key_name"] == "w": |
|
|
|
p.move_forward(True) |
|
|
|
elif data["key_name"] == "s": |
|
|
|
p.move_backward(True) |
|
|
|
elif data["key_name"] == "a": |
|
|
|
p.turn_left() |
|
|
|
elif data["key_name"] == "d": |
|
|
|
p.turn_right() |
|
|
|
elif data["key_name"] == "space": |
|
|
|
o = p.orientation |
|
|
|
cpos = p.cell_position |
|
|
|
p.set_cell_face(cpos[0], cpos[1], o) |
|
|
|
elif data["key_name"] == "e": |
|
|
|
p.next_wall() |
|
|
|
elif data["key_name"] == "q": |
|
|
|
p.prev_wall() |
|
|
|
if self._filename is None: |
|
|
|
self.emit("SCENECHANGE", {"scene":"MAIN_MENU", "hold":False}) |
|
|
|
else: |
|
|
|
self._filename = None |
|
|
|
self._fnnode.visible = False |
|
|
|
elif data["key_name"] in ["enter", "return"] and self._filename is not None: |
|
|
|
if len(self._filename) > 0: |
|
|
|
if self._fileiomode == 0: |
|
|
|
p.save_map(self._filename) |
|
|
|
else: |
|
|
|
p.load_map(self._filename) |
|
|
|
# Call SAVE on the game map. |
|
|
|
self._filename = None |
|
|
|
self._fnnode.visible = False |
|
|
|
|
|
|
|
if self._filename is None: |
|
|
|
if data["key_name"] == "tab": |
|
|
|
p.toggle_render_mode() |
|
|
|
elif data["key_name"] == "w": |
|
|
|
p.move_forward(True) |
|
|
|
elif data["key_name"] == "s": |
|
|
|
p.move_backward(True) |
|
|
|
elif data["key_name"] == "a": |
|
|
|
p.turn_left() |
|
|
|
elif data["key_name"] == "d": |
|
|
|
p.turn_right() |
|
|
|
elif data["key_name"] == "space": |
|
|
|
o = p.orientation |
|
|
|
cpos = p.cell_position |
|
|
|
p.set_cell_face(cpos[0], cpos[1], o) |
|
|
|
elif data["key_name"] == "e": |
|
|
|
p.next_wall() |
|
|
|
elif data["key_name"] == "q": |
|
|
|
p.prev_wall() |
|
|
|
elif data["key_name"] in ["o", "l"]: |
|
|
|
self._fileiomode = 0 |
|
|
|
if data["key_name"] == "l": |
|
|
|
self._fileiomode = 1 |
|
|
|
self._filename = "" |
|
|
|
self._fnnode.text = "" |
|
|
|
self._fnnode.visible = True |
|
|
|
elif len(data["key_name"]) == 1: |
|
|
|
self._filename = "{}{}".format(self._filename, data["key_name"]) |
|
|
|
self._fnnode.text = self._filename |
|
|
|
|
|
|
|
def on_render(self): |
|
|
|
size = self.resolution |