123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- extends TileMap
- # member variables here, example:
- # var a=2
- # var b="textvar"
- # boundarys 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 # players position
- # iteration variables
- var x
- var y
- # variable to check if 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
-
- pass
- 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)
- pass
|