-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathActor.elm
81 lines (62 loc) · 1.38 KB
/
Actor.elm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
module Actor
exposing
( ActorType(..)
, Actor
, isSubtype
, isPlayer
, isWhirlpool
, isPirate
, onWhirlpool
, move
, rotateClockwise
)
import Direction exposing (..)
import Location exposing (Location)
type ActorType
= PLAYER
| PIRATE
| ISLAND
| WHIRLPOOL
| WRECKAGE
| CANNONBALL
type alias Actor =
{ subtype : ActorType
, location : Location
, direction : Direction
, id : Int
}
isSubtype : ActorType -> Actor -> Bool
isSubtype subtype actor =
actor.subtype == subtype
isPlayer : Actor -> Bool
isPlayer =
isSubtype PLAYER
isWhirlpool : Actor -> Bool
isWhirlpool =
isSubtype WHIRLPOOL
isPirate : Actor -> Bool
isPirate =
isSubtype PIRATE
move : Direction -> Actor -> Actor
move dir actor =
{ actor
| location = Location.move dir actor.location
, direction = dir
}
rotateClockwise : Actor -> Actor
rotateClockwise actor =
let
newDirection =
Direction.rotateClockwise actor.direction
in
{ actor | direction = newDirection }
onWhirlpool : Actor -> Int -> Bool
onWhirlpool actor mapSize =
let
( x, y ) =
( actor.location.x, actor.location.y )
in
if x == 0 || x == (mapSize - 1) then
(y == 0 || y == (mapSize - 1))
else
False