Difference between revisions of "Precise Shadowcasting in JavaScript"
Jump to navigation
Jump to search
Line 7: | Line 7: | ||
== General algorithm workflow == | == General algorithm workflow == | ||
== | # Let <code>[x,y]</code> be the player coordinates | ||
# Initialize the empty shadow queue | |||
# For <code>R=1</code> up to maximum visibility range do: | |||
## Retrieve all cells whose range from <code>[x,y]</code> is <code>R</code> | |||
## Make sure these cells are in correct order (clockwise or counter-clockwise; every iteration starting at the same angle) | |||
## For every cell in this "ring": | |||
### Determine the corresponding arc <code>[a1,a2]</code> | |||
### Consult the shadow queue to determine whether <code>[a1,a2]</code> is fully shadowed | |||
### If no part of <code>[a1,a2]</code> is visible, mark the cell as invisible and advance to next cell | |||
### If some part of <code>[a1,a2]</code> is visible, merge it into the shadow queue; mark the cell as visible | |||
== Tweaks, tricks and advanced topics == | |||
=== Symbolic angles === | === Symbolic angles === |
Revision as of 15:25, 3 January 2013
This pages describes and explains the Precise Shadowcasting algorithm, developed and implemented by Ondřej Žára in rot.js.
WORK IN PROGRESS
About
General algorithm workflow
- Let
[x,y]
be the player coordinates - Initialize the empty shadow queue
- For
R=1
up to maximum visibility range do:- Retrieve all cells whose range from
[x,y]
isR
- Make sure these cells are in correct order (clockwise or counter-clockwise; every iteration starting at the same angle)
- For every cell in this "ring":
- Determine the corresponding arc
[a1,a2]
- Consult the shadow queue to determine whether
[a1,a2]
is fully shadowed - If no part of
[a1,a2]
is visible, mark the cell as invisible and advance to next cell - If some part of
[a1,a2]
is visible, merge it into the shadow queue; mark the cell as visible
- Determine the corresponding arc
- Retrieve all cells whose range from