summaryrefslogtreecommitdiffstats
path: root/demo/Hex.gd
diff options
context:
space:
mode:
authorJérémy Zurcher <jeremy@asynk.ch>2020-07-20 12:26:48 +0200
committerJérémy Zurcher <jeremy@asynk.ch>2020-07-20 12:26:48 +0200
commit89723ca94bd21f1ae14592a682e9c0e5c5f04a74 (patch)
tree7b5c67f9d05f253abc961c901336780755543d6d /demo/Hex.gd
parentf3c455fbfb8b28b095c161eb7769ed92f1acb862 (diff)
downloadgodot-hexgrid-89723ca94bd21f1ae14592a682e9c0e5c5f04a74.zip
godot-hexgrid-89723ca94bd21f1ae14592a682e9c0e5c5f04a74.tar.gz
move demo files into subdir demo
Diffstat (limited to 'demo/Hex.gd')
-rw-r--r--demo/Hex.gd80
1 files changed, 80 insertions, 0 deletions
diff --git a/demo/Hex.gd b/demo/Hex.gd
new file mode 100644
index 0000000..99bdbd2
--- /dev/null
+++ b/demo/Hex.gd
@@ -0,0 +1,80 @@
+#warning-ignore-all:unused_argument
+extends Tile
+
+class_name Hex, "res://godot/Tile.png"
+
+var type : int = -1
+var roads : int = 0
+
+func _ready() -> void:
+ type = -1
+
+func inspect() -> String:
+ var s : String = 'plain'
+ if type == 0: s = 'city'
+ elif type == 1: s = 'wood'
+ elif type == 2: s = 'mountain'
+ elif type == 3: s = 'blocked'
+ return "[%d;%d]\n -> (%d;%d)\n -> %s\ne:%d h:%d c:%d r:%d" % [coords.x, coords.y, position.x, position.y, s, elevation(), height(), cost(), roads]
+
+func has_road(o : int) -> bool:
+ return (o & roads) > 0
+
+func change() -> void:
+ type = (type + 2) % 5 - 1
+ for i in range(4):
+ enable_overlay(i + 3, i == type)
+
+func cost() -> int:
+ if type == -1: return 1
+ elif type == 3: return -1
+ return type + 1
+
+func height() -> int:
+ if type == 0: return 2
+ elif type == 1: return 1
+ elif type == 2: return 0
+ return 0
+
+func elevation() -> int:
+ if type == 2: return 3
+ return 0
+
+func range_modifier(category : int) -> int:
+ return (1 if type == 2 else 0)
+
+func attack_modifier(category : int, orientation : int) -> int:
+ return (2 if type == 1 else 0)
+
+func defense_value(category : int, orientation : int) -> int:
+ if type == 0: return 2
+ elif type == 1: return 1
+ elif type == 2: return 1
+ return 0
+
+func block_los(from : Tile, to : Tile, d : float, dt : float) -> bool:
+ var h : int = height() + elevation()
+ if h == 0: return false
+ var e : int = from.elevation()
+ if e > h:
+ if to.elevation() > h: return false
+ return (h * dt / (e - h)) >= (d - dt)
+ h -= e
+ return ((h * d / dt) >= to.elevation() - e)
+
+func show_los(b) -> void:
+ if b: enable_overlay((2 if blocked else 1), true)
+ else:
+ enable_overlay(1, false)
+ enable_overlay(2, false)
+
+func show_move(b) -> void:
+ enable_overlay(7, b)
+
+func show_short(b) -> void:
+ enable_overlay(8, b)
+
+func show_influence(b) -> void:
+ var s : Sprite = get_child(0)
+ s.modulate = Color(f/10.0, 0, 0)
+ enable_overlay(0, b)