# Precise Shadowcasting in JavaScript

From RogueBasin

(Difference between revisions)

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 16: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**

## Contents |

## 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]`

is`R`

- 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]