This repository has been archived on 2020-09-30. You can view files and clone it, but cannot push or open issues or pull requests.
odyssey-old/Scenes/Map.gd

88 lines
2.3 KiB
GDScript3
Raw Normal View History

2020-07-07 08:38:32 +00:00
tool
2020-07-06 12:38:05 +00:00
extends Node2D
2020-07-07 12:51:30 +00:00
class_name GameMap
2020-07-06 12:38:05 +00:00
2020-07-06 22:00:39 +00:00
var ship_direction = 0
2020-07-10 00:09:54 +00:00
var ship_speed = 0
2020-07-06 17:23:42 +00:00
2020-07-06 22:00:39 +00:00
var current_ship_direction = 0
var current_ship_speed = 0
const SPEED_EASE = 0.5
const DIRECTION_EASE = 0.5
const EPSILON = 0.01
2020-07-08 12:30:46 +00:00
const ProbeElectricity = preload("res://Actors/Systems/Electricity/ElectricProbe.tscn")
onready var tilemaps = [ $base, $cables, $floor, $walls ]
2020-07-06 17:23:42 +00:00
onready var pois = $pois
2020-07-07 08:38:32 +00:00
export var unlit = false setget set_unlit
onready var darkness = $darkness
2020-07-08 12:30:46 +00:00
export var shadow_intensity = 0.2
2020-07-07 08:38:32 +00:00
func _ready():
2020-07-07 11:01:12 +00:00
if Engine.editor_hint:
return
$editor.queue_free()
2020-07-07 11:17:30 +00:00
set_unlit(false)
2020-07-08 12:30:46 +00:00
# Electricity setup
make_electric_probes($cables, "Wire")
2020-07-07 08:38:32 +00:00
2020-07-08 12:30:46 +00:00
func _process(delta: float):
2020-07-07 08:38:32 +00:00
if Engine.editor_hint:
return
2020-07-08 12:30:46 +00:00
# Ease ship speed/direction changes
2020-07-06 22:00:39 +00:00
if abs(ship_direction - current_ship_direction) < EPSILON:
current_ship_direction = ship_direction
else:
current_ship_direction = lerp(current_ship_direction, ship_direction, delta * DIRECTION_EASE)
if abs(ship_speed - current_ship_speed) < EPSILON:
current_ship_speed = ship_speed
else:
current_ship_speed = lerp(current_ship_speed, ship_speed, delta * SPEED_EASE)
2020-07-07 11:01:12 +00:00
set_engine_strength(current_ship_speed)
2020-07-06 22:00:39 +00:00
$deepspace.rotation = current_ship_direction-PI/2
$deepspace.region_rect.position += Vector2(sin(current_ship_direction), cos(current_ship_direction)) * current_ship_speed * delta
2020-07-07 11:01:12 +00:00
2020-07-08 12:30:46 +00:00
# Lighting
func set_unlit(val: bool):
unlit = val
if darkness:
darkness.visible = not val
# Engine related functions
2020-07-07 11:01:12 +00:00
func set_engine_strength(val: float):
# Set energy strength to current speed
for child in $engines.get_children():
if child is GameObjectEngine:
var engine = child as GameObjectEngine
engine.strength = val
2020-07-08 12:30:46 +00:00
# Tileset related functions
func make_electric_probes(tilemap: TileMap, tile_name: String):
var tile_id = tilemap.tile_set.find_tile_by_name(tile_name)
for cell in tilemap.get_used_cells_by_id(tile_id):
var coord = tilemap.map_to_world(cell)
var probe = ProbeElectricity.instance()
probe.position = coord
tilemap.add_child(probe)
func get_pois(type_filter, class_filter) -> Array:
var filtered = []
for child in $pois.get_children():
if type_filter != null and child.poitype != type_filter:
continue
if class_filter != null and child.poiclass != class_filter:
continue
filtered.append(child)
return filtered