# pin_edit.ludic - changing a mark: its name, symbol and colour, rubbing it out, which one is open # and which followed, and whether the map is waiting for a place to drop the next export function minimap_pin_remove(minimap_st: mut MinimapState, i: int) -> void { if i < 0 or i >= minimap_pin_count(minimap_st) { return } let l = minimap_st.mm_pins for k in i .. len(l) - 1 { l[k] = l[k + 1] } List.pop(l) if minimap_st.mm_open == i { minimap_st.mm_open = -1 } else if minimap_st.mm_open > i { minimap_st.mm_open -= 1 } if minimap_st.mm_followed == i { minimap_st.mm_followed = -1 } else if minimap_st.mm_followed > i { minimap_st.mm_followed -= 1 } } export function minimap_pin_set_label(minimap_st: mut MinimapState, i: int, s: string) -> void { if i >= 0 and i < minimap_pin_count(minimap_st) { minimap_st.mm_pins[i].label = s } } # the symbol chosen is the one the next mark takes export function minimap_pin_set_icon(minimap_st: mut MinimapState, i: int, k: int) -> void { if i < 0 or i >= minimap_pin_count(minimap_st) { return } minimap_st.mm_pins[i].icon = Math.clamp(k, 0, minimap_st.mm_symbols - 1) minimap_st.mm_last = minimap_st.mm_pins[i].icon } export function minimap_pin_set_colour(minimap_st: mut MinimapState, i: int, k: int) -> void { if i >= 0 and i < minimap_pin_count(minimap_st) { minimap_st.mm_pins[i].colour = Math.clamp(k, 0, minimap_st.mm_colours - 1) } } export function minimap_pin_last_icon(minimap_st: MinimapState) -> int { return minimap_st.mm_last } # the mark the map's legend has open, -1 none export function minimap_pin_open(minimap_st: mut MinimapState) -> int { if minimap_st.mm_open >= minimap_pin_count(minimap_st) { minimap_st.mm_open = -1 } return minimap_st.mm_open } export function minimap_pin_select(minimap_st: mut MinimapState, i: int) -> void { minimap_st.mm_open = -1 if i >= 0 and i < minimap_pin_count(minimap_st) { minimap_st.mm_open = i } } # the mark the compass carries, -1 none export function minimap_pin_followed(minimap_st: mut MinimapState) -> int { if minimap_st.mm_followed >= minimap_pin_count(minimap_st) { minimap_st.mm_followed = -1 } return minimap_st.mm_followed } export function minimap_pin_follow(minimap_st: mut MinimapState, i: int) -> void { minimap_st.mm_followed = -1 if i >= 0 and i < minimap_pin_count(minimap_st) { minimap_st.mm_followed = i } } # follow the open mark, or stop following it export function minimap_pin_follow_toggle(minimap_st: mut MinimapState) -> void { let i = minimap_pin_open(minimap_st) if i < 0 { return } if minimap_st.mm_followed == i { minimap_st.mm_followed = -1 } else { minimap_st.mm_followed = i } } export function minimap_placing(minimap_st: MinimapState) -> bool { return minimap_st.mm_placing } # the next press on the map drops a mark; asked again, it does not export function minimap_place_toggle(minimap_st: mut MinimapState) -> void { minimap_st.mm_placing = not minimap_st.mm_placing minimap_st.mm_open = -1 } # the press that drops it, at a point on the window: the new mark is open, -1 if there was no room export function minimap_place(minimap_st: mut MinimapState, rx: float, ry: float, label: string) -> int { minimap_st.mm_placing = false let i = minimap_pin_add(minimap_st, minimap_wx(minimap_st, rx), minimap_wz(minimap_st, ry), minimap_st.mm_last, label) if i >= 0 { minimap_st.mm_open = i } return i }