Difference between revisions of "Precise Shadowcasting in JavaScript"
Jump to navigation
Jump to search
Line 25: | Line 25: | ||
=== Working with shadow queue === | === Working with shadow queue === | ||
== Links == | |||
* [[http://jsfiddle.net/ondras/ycJVj/|Interactive demo]] | |||
* [[http://ondras.github.com/rot.js/manual/#fov|rot.js FOV manual]] | |||
* [[https://raw.github.com/ondras/rot.js/master/src/fov/precise-shadowcasting.js|Source code]] |
Revision as of 15:29, 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 not visible 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
Tweaks, tricks and advanced topics
Symbolic angles
Half-angle backward shift
Working with shadow queue
Links
- [demo]
- [FOV manual]
- [code]