| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Imj.GameItem.Weapon.Laser
- data LaserRay a = LaserRay {
- _laserRayDir :: !Direction
- _laserRaySeg :: !(Ray a)
- newtype Ray a = Ray Segment
- data Theoretical
- data Actual
- data LaserReach = Infinite
- shootLaser :: Coords Pos -> Direction -> LaserReach -> (Coords Pos -> Location) -> Maybe (Ray Theoretical)
- shootLaserWithOffset :: Coords Pos -> Direction -> LaserReach -> (Coords Pos -> Location) -> Maybe (Ray Theoretical)
- data LaserPolicy
- computeActualLaserShot :: [a] -> (a -> Coords Pos) -> LaserRay Theoretical -> LaserPolicy -> (([a], [a]), Maybe (LaserRay Actual))
- afterEnd :: LaserRay Actual -> Coords Pos
Laser representations
LaserRay and Ray are parametrized by phantom types
Theoretical and Actual to indicate if the ray was computed taking
obstacles into account or not:
A laser ray and the direction in which the laser was shot.
Constructors
| LaserRay | |
Fields
| |
data Theoretical Source #
The laser ray was computed ignoring obstacles
Laser reach
Create a Theoretical Ray
shootLaser and shootLaserWithOffset create a Theoretical ray, i.e it doesn't
stop at obstacles:
shootLaser :: Coords Pos -> Direction -> LaserReach -> (Coords Pos -> Location) -> Maybe (Ray Theoretical) Source #
Arguments
| :: Coords Pos | Start coordinates |
| -> Direction | Direction of the shot |
| -> LaserReach | |
| -> (Coords Pos -> Location) | Collision function |
| -> Maybe (Ray Theoretical) |
Same as shootLaser but offsets the start Coords by one in the shot Direction.
Create an Actual Ray
computeActualLaserShot converts a Theoretical ray to an Actual ray, i.e
it stops at obstacles (or not), according to LaserPolicy:
data LaserPolicy Source #
Tells which obstacles are destroyed on the Segment of Ray Theoretical
Constructors
| DestroyFirstObstacle | The first obstacle is destroyed. |
| DestroyAllObstacles | All obstacles are destroyed. |
computeActualLaserShot Source #
Arguments
| :: [a] | Obstacles. |
| -> (a -> Coords Pos) | Obstacle to |
| -> LaserRay Theoretical | The |
| -> LaserPolicy | |
| -> (([a], [a]), Maybe (LaserRay Actual)) |
Converts a Theoretical laser ray to an Actual one,
taking obstacles and a LaserPolicy into account.
Returns a partition of obstacles between the remaining and the destroyed ones.