kalevala v0.1.0 Kalevala.Event.Movement.Request View Source
Character requesting to move from their current room in a exit_name
A move request transitions through several stages before commiting or aborting.
The character requests the room to move in a exit_name.
%Kalevala.Event{
topic: Kalevala.Event.Movement.Request,
data: %Kalevala.Event.Movement.Request{
character: character,
exit_name: "north"
}
}
The room process sends a voting event to the Zone after determining that there is a valid exit in this exit_name.
%Kalevala.Event{
topic: Kalevala.Event.Movement.Voting,
data: %Kalevala.Event.Movement.Voting{
character: character,
from: start_room_id,
to: end_room_id,
exit_name: "north"
}
}
The zone then asks the to
and from
room if they are OK with the character moving. Each
room will be GenServer.call
ed to block and keep this synchronous. The room movement/2
callback will be called for each room, so they can vote on the movement.
Kalevala.Event.Movement.Commit
- After both room's agree that the player can move,
the zone sends this event to the character.
%Kalevala.Event{
topic: Kalevala.Event.Movement.Commit,
data: %Movement.Commit{
character: character,
from: start_room_id,
to: end_room_id,
exit_name: "north"
}
}
Kalevala.Event.Movement.Abort
- If either room rejects the movement, the zone will
respond with an abort.
%Kalevala.Event{
topic: Kalevala.Event.Movement.Abort,
data: %Kalevala.Event.Movement.Abort{
character: character,
from: start_room_id,
to: end_room_id,
exit_name: "north",
reason: :door_locked
}
}
%Kalevala.Event{
topic: Kalevala.Event.Movement.Abort,
data: %Kalevala.Event.Movement.Abort{
character: character,
from: start_room_id,
exit_name: "north",
reason: :no_exit
}
}
On a commit, the player leaves the old room, and enters the new one.
%Kalevala.Event{
topic: Kalevala.Event.Movement,
data: %Kalevala.Event.Movement{
character: character,
direction: :to,
reason: "Player enters from the south."
}
}
%Kalevala.Event{
topic: Kalevala.Event.Movement,
data: %Kalevala.Event.Movement{
character: character,
direction: :from,
reason: "Player leaves to the north."
}
}
Link to this section Summary
Link to this section Types
Signal that a character wishes to move to another location
character
is the character movingexit
is the exit_name of the exit the player wants to move