diff options
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/base.gd | 33 | ||||
| -rw-r--r-- | scripts/camera.gd | 26 | ||||
| -rw-r--r-- | scripts/cube.gd | 21 | ||||
| -rw-r--r-- | scripts/house.gd | 4 | ||||
| -rw-r--r-- | scripts/incubator.gd | 38 | ||||
| -rw-r--r-- | scripts/world.gd | 45 |
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 |
