summaryrefslogtreecommitdiff
path: root/scripts/world.gd
blob: c871e81af5ca5b86df5094b3c5e4c34387abd9aa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
extends Spatial

const SIZE = 15

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")

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 = []
  var count = 0
  for x in range(-size, size):
    var line_x = []
    blocks.append(line_x)
    for y in range(0, -size, -1):
      var line_y = []
      line_x.append(line_y)
      for z in range(-size, size):
        var relative = Vector3(x, y, z)
        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)
  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()