remove cursor_exists external, cache its value, update once per frame