summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/base.gd33
-rw-r--r--scripts/camera.gd26
-rw-r--r--scripts/cube.gd21
-rw-r--r--scripts/house.gd4
-rw-r--r--scripts/incubator.gd38
-rw-r--r--scripts/world.gd45
6 files changed, 167 insertions, 0 deletions
diff --git a/scripts/base.gd b/scripts/base.gd
new file mode 100644
index 0000000..fb3dae7
--- /dev/null
+++ b/scripts/base.gd
@@ -0,0 +1,33 @@
+extends Node
+
+var Game = preload("res://base.tscn")
+var Wrld = preload("res://world.tscn")
+var Incubator = preload("res://incubator.tscn")
+
+func _ready():
+ pass
+
+func _process(delta):
+ pass
+
+func _input(event):
+ if event.type == InputEvent.MOUSE_BUTTON:
+ if event.button_index == BUTTON_WHEEL_DOWN:
+ get_node("Camera").translate(Vector3(0,0,0.1))
+ elif event.button_index == BUTTON_WHEEL_UP:
+ get_node("Camera").translate(Vector3(0,0,-0.1))
+ if event.type == InputEvent.MOUSE_MOTION and event.button_mask == BUTTON_MASK_MIDDLE:
+ get_node("Camera").rot_around(event.relative_x/(30))
+ if event.type == InputEvent.KEY:
+ if event.scancode == KEY_A:
+ get_node("Camera").translate(Vector3(-0.1,0,0))
+ if event.scancode == KEY_D:
+ get_node("Camera").translate(Vector3(0.1,0,0))
+ if event.scancode == KEY_S:
+ get_node("Camera").translate(Vector3(0,-0.1,0))
+ if event.scancode == KEY_W:
+ get_node("Camera").translate(Vector3(0,0.1,0))
+ if event.scancode == KEY_H:
+ var s = get_node("Camera").get_selected()
+ if s != null:
+ get_node("Incubator").push_world(s) \ No newline at end of file
diff --git a/scripts/camera.gd b/scripts/camera.gd
new file mode 100644
index 0000000..e29ad51
--- /dev/null
+++ b/scripts/camera.gd
@@ -0,0 +1,26 @@
+extends Camera
+
+var selected = null
+
+func _ready():
+ pass
+
+func select(what):
+ if self.selected != what:
+ set_translation(what.translation + Vector3(1,3,0))
+ look_at(what.translation, Vector3(0,1,0))
+ self.selected = what
+
+func reselect():
+ if self.selected != null:
+ look_at(self.selected.translation, Vector3(0,1,0))
+
+func rot_around(amount):
+ if self.selected != null:
+ var relative = self.translation - self.selected.translation
+ var rotated = relative.rotated(Vector3(0,1,0), amount)
+ set_translation(self.selected.translation + rotated)
+ reselect()
+
+func get_selected():
+ return self.selected \ No newline at end of file
diff --git a/scripts/cube.gd b/scripts/cube.gd
new file mode 100644
index 0000000..edfe54c
--- /dev/null
+++ b/scripts/cube.gd
@@ -0,0 +1,21 @@
+extends StaticBody
+
+var cube = null
+var selected = false
+var mat = SpatialMaterial.new()
+
+signal on_click
+
+func _ready():
+ self.cube = get_child(0)
+ self.cube.material_override = self.mat
+ connect("on_click", get_parent(), "_on_click")
+
+func _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():
+ if self.selected:
+ self.mat.set_albedo(Color(0.5,0.3,0.3))
+ else:
+ self.mat.set_albedo(Color(0.3,0.5,0.3))
+ self.selected = !self.selected
+ emit_signal("on_click")
diff --git a/scripts/house.gd b/scripts/house.gd
new file mode 100644
index 0000000..b783da1
--- /dev/null
+++ b/scripts/house.gd
@@ -0,0 +1,4 @@
+extends Spatial
+
+func _ready():
+ pass
diff --git a/scripts/incubator.gd b/scripts/incubator.gd
new file mode 100644
index 0000000..11f8d5b
--- /dev/null
+++ b/scripts/incubator.gd
@@ -0,0 +1,38 @@
+extends Spatial
+
+var worlds = []
+
+func _enter_tree():
+ for x in range(4):
+ var line = []
+ self.worlds.append(line)
+ for y in range(2):
+ line.append(null)
+
+func set_world(x, y, world):
+ self.worlds[x][y] = world
+ var pos = get_node("spawns/" + str(x) + "-" + str(y))
+ world.set_translation(pos.global_transform.origin)
+
+func push_world(world):
+ print("pushing")
+ for x in range(4):
+ for y in range(2):
+ print("h")
+ if self.worlds[x][y] == null:
+ print("set")
+ set_world(x, y, world)
+ return
+
+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:
+ print("body")
+ var cam = get_tree().get_root().get_camera()
+ cam.select(self)
+
+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:
+ print("panel")
diff --git a/scripts/world.gd b/scripts/world.gd
new file mode 100644
index 0000000..572a658
--- /dev/null
+++ b/scripts/world.gd
@@ -0,0 +1,45 @@
+extends Spatial
+
+const SIZE = 15
+
+var Cube = preload("res://cube.tscn")
+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()
+ pn.translate(Vector3(2,1,2))
+ add_child(pn)
+ var ok = Oak.instance()
+ ok.translate(Vector3(-2,1,2))
+ add_child(ok)
+ var hs = House.instance()
+ hs.translate(Vector3(0,1,2))
+ hs.rotate_y(PI/2)
+ add_child(hs)
+ _make_ball(SIZE, Vector3(0,0,0))
+
+func _make_ball(size, center):
+ var blocks = Array()
+ for x in range(-size, size):
+ var line_x = Array()
+ blocks.append(line_x)
+ for y in range(0, -size, -1):
+ var line_y = Array()
+ 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)
+ else:
+ line_y.append(null)
+
+func _on_click():
+ var cam = get_tree().get_root().get_camera()
+ cam.select(self) \ No newline at end of file