diff options
| author | J08nY | 2017-04-23 16:31:27 +0200 |
|---|---|---|
| committer | J08nY | 2017-04-23 16:31:27 +0200 |
| commit | cfe4ce0fb4705a6c231528d60e4833c4dc2ec68f (patch) | |
| tree | 57111775c93b70ce1c8297efdb1f21161a055bec /scripts | |
| parent | 04a7806aafe210aeefcd80f74d78c8d4420c54e2 (diff) | |
| download | ld38-cfe4ce0fb4705a6c231528d60e4833c4dc2ec68f.tar.gz ld38-cfe4ce0fb4705a6c231528d60e4833c4dc2ec68f.tar.zst ld38-cfe4ce0fb4705a6c231528d60e4833c4dc2ec68f.zip | |
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/base.gd | 32 | ||||
| -rw-r--r-- | scripts/camera.gd | 4 | ||||
| -rw-r--r-- | scripts/combinator.gd | 11 | ||||
| -rw-r--r-- | scripts/combinator_panel.gd | 26 | ||||
| -rw-r--r-- | scripts/hud.gd | 31 | ||||
| -rw-r--r-- | scripts/incubator.gd | 25 | ||||
| -rw-r--r-- | scripts/items.gd | 17 | ||||
| -rw-r--r-- | scripts/multiverse_shop.gd | 19 | ||||
| -rw-r--r-- | scripts/player.gd | 28 | ||||
| -rw-r--r-- | scripts/storage.gd | 61 | ||||
| -rw-r--r-- | scripts/world.gd | 55 |
11 files changed, 250 insertions, 59 deletions
diff --git a/scripts/base.gd b/scripts/base.gd index f89eedc..3d138d9 100644 --- a/scripts/base.gd +++ b/scripts/base.gd @@ -35,7 +35,31 @@ func _input(event): self.cam.translate(Vector3(0,-0.1,0)) if event.scancode == KEY_W: self.cam.translate(Vector3(0,0.1,0)) - if event.scancode == KEY_H: - var s = self.cam.get_selected() - if s != null: - get_node("Incubator").push_world(s)
\ No newline at end of file + + if event.is_pressed(): + if event.scancode == KEY_H: + var s = self.cam.get_selected() + if s != null: + get_node("Incubator").push_world(s) + if event.scancode == KEY_N: + var w = Wrld.instance() + w.set_scale(Vector3(0.02, 0.02, 0.02)) + add_child(w) + get_node("Incubator").push_world(w) + if event.scancode == KEY_Q: + var w = get_node("World") + if w != null: + var pos = get_node("cmb2inc") + w.set_translation(Vector3(0,0,0)) + remove_child(w) + pos.add_child(w) + get_node("AnimationPlayer").play("cmb2inc") + + +func _on_AnimationPlayer_animation_finished( name ): + if name == "cmb2inc": + var w = get_node("cmb2inc/World") + var pos = get_node("cmb2inc") + pos.remove_child(w) + add_child(w) + w.set_translation(pos.get_translation()) diff --git a/scripts/camera.gd b/scripts/camera.gd index b099e16..090033f 100644 --- a/scripts/camera.gd +++ b/scripts/camera.gd @@ -6,13 +6,9 @@ func _ready(): reset() func select(what, new_target): - print("before set") set_target(new_target) - print("after set") if self.selected != what: - print("before interp") set_interpolation_enabled(true) - print("after interp") #set_translation(what.translation + Vector3(1,3,0)) self.selected = what diff --git a/scripts/combinator.gd b/scripts/combinator.gd index dc68b84..2bc7740 100644 --- a/scripts/combinator.gd +++ b/scripts/combinator.gd @@ -1,9 +1,11 @@ extends Spatial var prev_pos = null +var panel = null func _ready(): get_node("Area/Quad").get_material_override().set_texture(SpatialMaterial.DIFFUSE_LAMBERT, get_node("Viewport").get_texture()) + self.panel = get_node("Viewport/CombinatorPanel") set_process_input(true) func _on_Area_input_event( camera, event, click_pos, click_normal, shape_idx ): @@ -24,13 +26,14 @@ func _on_Area_input_event( camera, event, click_pos, click_normal, shape_idx ): get_node("Viewport").input(event) func _on_body_input_event( camera, event, click_pos, click_normal, shape_idx ): - if event.type == InputEvent.MOUSE_BUTTON and event.button_index == BUTTON_LEFT: + if event.type == InputEvent.MOUSE_BUTTON and event.button_index == BUTTON_LEFT and event.is_pressed(): print("body") var cam = get_tree().get_root().get_camera() cam.select(self, get_node("point")) func _on_panel_input_event( camera, event, click_pos, click_normal, shape_idx ): - if event.type == InputEvent.MOUSE_BUTTON and event.button_index == BUTTON_LEFT: + if event.type == InputEvent.MOUSE_BUTTON and event.button_index == BUTTON_LEFT and event.is_pressed(): print("panel") - var cam = get_tree().get_root().get_camera() - cam.select(self, get_node("point"))
\ No newline at end of file + get_node("animation").play("click") + +
\ No newline at end of file diff --git a/scripts/combinator_panel.gd b/scripts/combinator_panel.gd index 333187f..c4822e8 100644 --- a/scripts/combinator_panel.gd +++ b/scripts/combinator_panel.gd @@ -1,6 +1,10 @@ extends Panel +var Items = preload("res://scripts/items.gd") +var items = null + func _ready(): + self.items = Items.new() set_process_input(true) func _input(event): @@ -9,6 +13,24 @@ func _input(event): func _on_Tree_gui_input( ev ): #print(ev) pass + +func get_items(): + pass + +func _on_add_pressed(): + var player = get_tree().get_root().get_node("Game/Player") + var storage = get_tree().get_root().get_node("Game/HUD/storage") + + print(player.storage) + print(storage.get_selected()) + + if player.has_item(storage.get_selected()): + print("has") + player.remove_item(storage.get_selected(), 1) + +func _on_remove_pressed(): + pass # replace with function body + -func _on_Tree_mouse_entered(): - print("enter") +func _on_storage_pressed(): + get_tree().get_root().get_node("Game/HUD").popup_storage() diff --git a/scripts/hud.gd b/scripts/hud.gd index 4028192..80c58a0 100644 --- a/scripts/hud.gd +++ b/scripts/hud.gd @@ -5,12 +5,31 @@ func _ready(): func _on_ms_button_pressed(): var visible = get_node("ms").is_visible() - get_node("ms").set_visible(!visible) - if !visible: - get_node("storage").set_visible(false) + if visible: + get_node("ms").set_visible(false) + else: + popup_shop() func _on_storage_button_pressed(): var visible = get_node("storage").is_visible() - get_node("storage").set_visible(!visible) - if !visible: - get_node("ms").set_visible(false) + if visible: + get_node("storage").set_visible(false) + else: + popup_storage() + +func _popup(which): + var tabs = ["ms", "storage"] + for tab in tabs: + get_node(tab).set_visible(tab == which) + +func popup_storage(): + _popup("storage") + +func popup_shop(): + _popup("ms") + +func set_funds(cash): + get_node("funds/cash").set_text(str(cash)) + +func update_storage(storage): + get_node("storage").update_storage(storage) diff --git a/scripts/incubator.gd b/scripts/incubator.gd index 993f76a..7bf7593 100644 --- a/scripts/incubator.gd +++ b/scripts/incubator.gd @@ -1,6 +1,8 @@ extends Spatial var worlds = [] +var selected_pos = null +var selected = null func _enter_tree(): for x in range(4): @@ -19,19 +21,32 @@ func push_world(world): for y in range(2): if self.worlds[x][y] == null: set_world(x, y, world) - return + return true + return false func get_world(x, y): return self.worlds[x][y] func _on_body_input_event( camera, event, click_pos, click_normal, shape_idx ): - if event.type == InputEvent.MOUSE_BUTTON and event.button_index == BUTTON_LEFT: + if event.type == InputEvent.MOUSE_BUTTON and event.button_index == BUTTON_LEFT and event.is_pressed(): print("body") var cam = get_tree().get_root().get_camera() cam.select(self, get_node("point")) func _on_panel_input_event( camera, event, click_pos, click_normal, shape_idx ): - if event.type == InputEvent.MOUSE_BUTTON and event.button_index == BUTTON_LEFT: + if event.type == InputEvent.MOUSE_BUTTON and event.button_index == BUTTON_LEFT and event.is_pressed(): print("panel") - var cam = get_tree().get_root().get_camera() - cam.select(self, get_node("point")) + get_node("animation").play("click") + if self.selected_pos != null: + var w = get_world(self.selected_pos.x, self.selected_pos.y) + if w != null: + print(w) + +func _on_cylinder_input_event( camera, event, click_pos, click_normal, shape_idx, node, pos ): + if event.type == InputEvent.MOUSE_BUTTON and event.button_index == BUTTON_LEFT and event.is_pressed(): + print(node, pos, get_node(node)) + self.selected = get_node(node) + self.selected_pos = pos + self.selected.material_override.set_albedo(Color(0.8,0.3,0.3)) + + diff --git a/scripts/items.gd b/scripts/items.gd new file mode 100644 index 0000000..a6ca8be --- /dev/null +++ b/scripts/items.gd @@ -0,0 +1,17 @@ +extends Object + +var data = null + +func _init(): + var file = File.new() + file.open("res://assets/shop.json", File.READ) + var content = file.get_as_text() + file.close() + self.data = parse_json(content) + +func get(id): + for cat in self.data.keys(): + for item in self.data[cat]: + if item["id"] == id: + return item + return null
\ No newline at end of file diff --git a/scripts/multiverse_shop.gd b/scripts/multiverse_shop.gd index 177c874..494ccd5 100644 --- a/scripts/multiverse_shop.gd +++ b/scripts/multiverse_shop.gd @@ -1,18 +1,14 @@ extends Control -var data = null +var Items = preload("res://scripts/items.gd") func _ready(): var map = {"1": get_node("tabs/*/items"), "2": get_node("tabs/**/items"), "3": get_node("tabs/***/items"), "other": get_node("tabs/other/items")} - var file = File.new() - file.open("res://assets/shop.json", File.READ) - var content = file.get_as_text() - file.close() - self.data = parse_json(content) - for k in self.data.keys(): + var items = Items.new() + for k in items.data.keys(): var tree = map[k] var root = tree.create_item() tree.set_columns(2) @@ -23,8 +19,8 @@ func _ready(): tree.set_column_min_width(1,40) tree.set_hide_root(true) tree.set_select_mode(Tree.SELECT_ROW) - for i in range(self.data[k].size()): - var item = self.data[k][i] + for i in range(items.data[k].size()): + var item = items.data[k][i] var itm = tree.create_item(root) itm.set_text(0, item["name"]) itm.set_text(1, str(item["cost"])) @@ -44,10 +40,7 @@ func _on_buy_pressed(): var item = itm.get_metadata(0) var player = get_tree().get_root().get_node("Game/Player") if player.cash >= item["cost"]: - if player.storage.has(item["id"]): - player.storage[item["id"]] += 1 - else: - player.storage[item["id"]] = 1 + player.add_item(item["id"], item, 1) player.cash -= item["cost"] else: pass
\ No newline at end of file diff --git a/scripts/player.gd b/scripts/player.gd index 85c5f9e..c8c40eb 100644 --- a/scripts/player.gd +++ b/scripts/player.gd @@ -4,14 +4,34 @@ var cash = 1000 setget set_cash, get_cash var storage = {} func _ready(): - _update_hud() + _update_funds() + _update_storage() func get_cash(): return cash func set_cash(csh): cash = csh - _update_hud() + _update_funds() + +func add_item(id, item, amount): + if storage.has(id): + storage[id] += amount + else: + storage[id] = amount + _update_storage() + +func has_item(id, amount=1): + return storage.has(id) and storage[id] >= amount + +func remove_item(id, amount): + if storage.has(id) and storage[id] >= amount: + storage[id] -= amount + _update_storage() + +func _update_funds(): + get_tree().get_root().get_node("Game/HUD").set_funds(cash) -func _update_hud(): - get_tree().get_root().get_node("Game/HUD/funds/cash").set_text(str(cash))
\ No newline at end of file +func _update_storage(): + get_tree().get_root().get_node("Game/HUD").update_storage(storage) +
\ No newline at end of file diff --git a/scripts/storage.gd b/scripts/storage.gd new file mode 100644 index 0000000..bbac5e2 --- /dev/null +++ b/scripts/storage.gd @@ -0,0 +1,61 @@ +extends Control + +var Items = preload("res://scripts/items.gd") + +var items +var storage = {} +var tree + +func _ready(): + self.items = Items.new() + self.tree = get_node("panel/items") + self.tree.create_item() + self.tree.set_columns(2) + self.tree.set_column_title(0, "Item") + self.tree.set_column_title(1, "Amount") + self.tree.set_column_titles_visible(true) + self.tree.set_column_expand(1, false) + self.tree.set_column_min_width(1,50) + self.tree.set_hide_root(true) + self.tree.set_select_mode(Tree.SELECT_ROW) + +func _update_item(id, amount): + var child = self.tree.get_root().get_children() + while child != null: + var meta = child.get_metadata(0) + if meta == id: + if amount == 0: + self.tree.get_root().remove_child(child) + else: + child.set_text(1, str(amount)) + return + child = child.get_next() + + +func _add_item(id, amount): + var root = self.tree.get_root() + var item = self.tree.create_item(root) + item.set_text(0, self.items.get(id)["name"]) + item.set_text(1, str(amount)) + item.set_metadata(0, id) + +func update_storage(update): + for k in update.keys(): + print("key: ", k) + if self.storage.has(k): + if self.storage[k] != update[k]: + _update_item(k, update[k]) + if update[k] == 0: + self.storage.erase(k) + else: + self.storage[k] = update[k] + else: + self.storage[k] = update[k] + _add_item(k, update[k]) + + +func get_selected(): + var itm = self.tree.get_selected() + if itm != null and itm.is_selected(0): + return itm.get_metadata(0) + return null diff --git a/scripts/world.gd b/scripts/world.gd index 9117678..c871e81 100644 --- a/scripts/world.gd +++ b/scripts/world.gd @@ -2,11 +2,10 @@ extends Spatial const SIZE = 15 -var Cube = preload("res://cube.tscn") +var Cube = preload("res://mesh/cube.obj") var House = preload("res://house.tscn") var Pine = preload("res://tree_pine.tscn") var Oak = preload("res://tree_oak.tscn") -var cubes = Array() func _enter_tree(): var pn = Pine.instance() @@ -22,26 +21,48 @@ func _enter_tree(): _make_ball(SIZE, Vector3(0,0,0)) func _make_ball(size, center): - var blocks = Array() + var blocks = [] + var count = 0 for x in range(-size, size): - var line_x = Array() + var line_x = [] blocks.append(line_x) for y in range(0, -size, -1): - var line_y = Array() + var line_y = [] line_x.append(line_y) for z in range(-size, size): var relative = Vector3(x, y, z) - if floor(relative.length()) <= size/2: - var cube = Cube.instance() - cube.translate(relative + center) - cube.set_scale(Vector3(0.5, 0.5, 0.5)) - add_child(cube) - line_y.append(cube) + var len = relative.length() + if floor(len) <= size/2 and (ceil(len) > size/2 or y == 0): + line_y.append(relative*2 + center) + count += 1 else: line_y.append(null) - -func _on_click(): - print("click") - var cam = get_tree().get_root().get_camera() - cam.select(self, get_node("point")) - cam.reselect()
\ No newline at end of file + var multi = MultiMesh.new() + multi.set_transform_format(MultiMesh.TRANSFORM_3D) + multi.set_mesh(Cube) + multi.set_instance_count(count) + var i = 0 + for x in range(blocks.size()): + var line_x = blocks[x] + if line_x == null: + continue + for y in range(line_x.size()): + var line_y = line_x[y] + if line_y == null: + continue + for z in range(line_y.size()): + var pos = line_y[z] + if pos != null: + var trans = Transform() + trans = trans.translated(pos) + multi.set_instance_transform(i, trans) + i += 1 + var instance = MultiMeshInstance.new() + instance.set_multimesh(multi) + add_child(instance) + +func _on_Area_input_event( camera, event, click_pos, click_normal, shape_idx ): + if event.type == InputEvent.MOUSE_BUTTON and event.button_index == BUTTON_LEFT and event.is_pressed(): + var cam = get_tree().get_root().get_camera() + cam.select(self, get_node("point")) + cam.reselect() |
