7589b2bf60
The scripts were streamlined using more or less the following conventions: - space after a comma in lists of arguments - spaces around weak operators (+, -), no spaces around strong operators (*, /) - spaces around comparison operators and compound assignment operators - space after a comment start (#) - removed trailing spaces or tabs, apart from those that delimit the function indentation level (those could be removed too but since they are added automatically by the editor when typing code, keeping them for now) - function blocks separate by two newlines - comment sentences start with an upper-case letter
80 lines
1.9 KiB
GDScript
80 lines
1.9 KiB
GDScript
|
|
extends TileMap
|
|
|
|
# Member variables
|
|
|
|
# Boundaries for the fog rectangle
|
|
var x_min = -20 # Left start tile
|
|
var x_max = 20 # Right end tile
|
|
var y_min = -20 # Top start tile
|
|
var y_max = 20 # Bottom end tile
|
|
|
|
var position # Player's position
|
|
|
|
# Iteration variables
|
|
var x
|
|
var y
|
|
|
|
# Variables to check if the player moved
|
|
var x_old
|
|
var y_old
|
|
|
|
# Array to build up the visible area like a square.
|
|
# First value determines the width/height of the tip.
|
|
# Here it would be 2*2 + 1 = 5 tiles wide/high.
|
|
# Second value determines the total squares size.
|
|
# Here it would be 5*2 + 1 = 10 tiles wide/high.
|
|
var l = range(2, 5)
|
|
|
|
|
|
# Process that runs in realtime
|
|
func _fixed_process(delta):
|
|
position = get_node("../troll").get_pos()
|
|
|
|
# Calculate the corresponding tile
|
|
# from the players position
|
|
x = int(position.x/get_cell_size().x)
|
|
# Switching from positive to negative tile positions
|
|
# causes problems because of rounding problems
|
|
if position.x < 0:
|
|
x -= 1 # Correct negative values
|
|
|
|
y = int(position.y/get_cell_size().y)
|
|
if (position.y < 0):
|
|
y -= 1
|
|
|
|
# Check if the player moved one tile further
|
|
if ((x_old != x) or (y_old != y)):
|
|
# Create the transparent part (visited area)
|
|
var end = l.size() - 1
|
|
var start = 0
|
|
for steps in range(l.size()):
|
|
for m in range(x - l[end] - 1, x + l[end] + 2):
|
|
for n in range(y - l[start] - 1, y + l[start] + 2):
|
|
if (get_cell(m, n) != 0):
|
|
set_cell(m, n, 1, 0, 0)
|
|
end -= 1
|
|
start += 1
|
|
|
|
# Create the actual and active visible part
|
|
var end = l.size() - 1
|
|
var start = 0
|
|
for steps in range(l.size()):
|
|
for m in range(x - l[end], x + l[end] + 1):
|
|
for n in range(y - l[start], y + l[start] + 1):
|
|
set_cell(m, n, -1)
|
|
end -= 1
|
|
start += 1
|
|
|
|
x_old = x
|
|
y_old = y
|
|
|
|
|
|
func _ready():
|
|
# Initalization here
|
|
# Create a square filled with the 100% opaque fog
|
|
for x in range(x_min, x_max):
|
|
for y in range(y_min, y_max):
|
|
set_cell(x, y, 0, 0, 0)
|
|
set_fixed_process(true)
|