summaryrefslogtreecommitdiff
path: root/scripts/combinator.gd
blob: cbabfe678797936bc3a5a78a1de55329516db48f (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
69
extends Spatial

const Builder = preload("res://scripts/builder.gd")
const CombinatorTemplate = preload("res://scripts/template_combine.gd")

var prev_pos = null
var panel = null
var world = null

var templater = null
var builder = 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")
  self.templater = CombinatorTemplate.new()
  self.builder = Builder.new()
  set_process_input(true)

func _on_Area_input_event( camera, event, click_pos, click_normal, shape_idx ):
  var pos = get_node("Area").get_global_transform().affine_inverse()*click_pos
  # Convert to 2D
  if pos.y <= 0.9 or pos.y >= 1.1:
    return
  pos.x = (pos.x + 1)*200
  pos.z = (-pos.z + 1)*200
  var pos2 = Vector2(pos.z, pos.x)
  event.pos = pos2
  event.global_pos = pos2
  if self.prev_pos == null:
    self.prev_pos = pos2
  if event.type == InputEvent.MOUSE_MOTION:
    event.relative_pos = pos2 - self.prev_pos
  self.prev_pos = pos2
  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 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 and event.is_pressed():
    print("combine")
    var message = ""
    if self.world == null:
      var panel = get_node("Viewport/CombinatorPanel")
      var ids = panel.get_ids()
      if ids != null and ids.size() > 0 and self.builder.can_combine(ids):
        self.world = self.builder.combine(get_node("spawn").get_global_transform().origin, ids)
        get_tree().get_root().get_node("Game").add_child(self.world)
        panel.clear_all()
        message = self.templater.template(self.world)
        get_node("animation").play("click")
      else:
        message = "Cannot combine!"
    get_tree().get_root().get_node("Game/HUD").display_message(message, 15)

func _on_incubate_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():
    print("incubate")
    if self.world != null:
      get_node("animation").play("incubate")
      var incubator = get_tree().get_root().get_node("Game/Incubator")
      incubator.push_world(self.world)
      var cam = get_tree().get_root().get_node("Game/Camera")
      cam.select(incubator, incubator.get_node("point"))
      self.world = null