summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorJ08nY2017-04-23 16:31:27 +0200
committerJ08nY2017-04-23 16:31:27 +0200
commitcfe4ce0fb4705a6c231528d60e4833c4dc2ec68f (patch)
tree57111775c93b70ce1c8297efdb1f21161a055bec /scripts
parent04a7806aafe210aeefcd80f74d78c8d4420c54e2 (diff)
downloadld38-cfe4ce0fb4705a6c231528d60e4833c4dc2ec68f.tar.gz
ld38-cfe4ce0fb4705a6c231528d60e4833c4dc2ec68f.tar.zst
ld38-cfe4ce0fb4705a6c231528d60e4833c4dc2ec68f.zip
Diffstat (limited to 'scripts')
-rw-r--r--scripts/base.gd32
-rw-r--r--scripts/camera.gd4
-rw-r--r--scripts/combinator.gd11
-rw-r--r--scripts/combinator_panel.gd26
-rw-r--r--scripts/hud.gd31
-rw-r--r--scripts/incubator.gd25
-rw-r--r--scripts/items.gd17
-rw-r--r--scripts/multiverse_shop.gd19
-rw-r--r--scripts/player.gd28
-rw-r--r--scripts/storage.gd61
-rw-r--r--scripts/world.gd55
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()