2020-09-13 15:58:22 +00:00
|
|
|
import "luxe: draw" for Draw, PathStyle
|
2020-09-21 19:18:07 +00:00
|
|
|
import "luxe: world" for Entity, Transform, UI, UIRenderMode, UIEvent
|
2020-09-13 15:58:22 +00:00
|
|
|
import "luxe: world" for UILayout, UILayoutBehave, UILayoutContain
|
|
|
|
|
import "luxe: ui/control" for Control
|
2020-09-25 12:24:07 +00:00
|
|
|
import "luxe: ui/label" for UILabel
|
2020-09-13 15:58:22 +00:00
|
|
|
import "luxe: assets" for Assets
|
2020-09-25 12:24:07 +00:00
|
|
|
import "luxe: render" for Material, TextAlign
|
2020-09-13 15:58:22 +00:00
|
|
|
|
|
|
|
|
import "globals" for Globals
|
|
|
|
|
import "blocks/ui/image_button" for ImageButton
|
|
|
|
|
import "math/observable" for Observable
|
|
|
|
|
import "blocks/ui/simple_text" for UISimpleText
|
2020-09-19 14:06:46 +00:00
|
|
|
import "blocks/ui/ui" for Ui
|
2020-09-25 12:24:07 +00:00
|
|
|
import "blocks/ui/slider" for UiSlider
|
2020-09-21 19:18:07 +00:00
|
|
|
import "blocks/ui/compass" for UiCompass
|
2020-09-25 08:42:41 +00:00
|
|
|
import "math/math" for M
|
2020-09-13 15:58:22 +00:00
|
|
|
|
|
|
|
|
class UiAdventure{
|
|
|
|
|
root{_root}
|
|
|
|
|
|
2020-09-21 19:18:07 +00:00
|
|
|
static direction{"direction"}
|
|
|
|
|
static people{"people"}
|
|
|
|
|
static resources{"resources"}
|
|
|
|
|
static depart{"depart"}
|
|
|
|
|
|
2020-09-13 15:58:22 +00:00
|
|
|
construct new(ent, ui){
|
|
|
|
|
_ent = ent
|
|
|
|
|
_ui = ui
|
|
|
|
|
|
2020-09-21 19:18:07 +00:00
|
|
|
_game = Globals["Game"]
|
|
|
|
|
_page = Observable.new(UiAdventure.direction)
|
|
|
|
|
|
2020-09-13 15:58:22 +00:00
|
|
|
setup()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
setup(){
|
|
|
|
|
var ui_rect = Globals["UiRect"]
|
|
|
|
|
var game = Globals["Game"]
|
|
|
|
|
|
|
|
|
|
_root = Control.create(_ent)
|
2020-09-21 19:18:07 +00:00
|
|
|
Control.set_allow_input(_root, true)
|
2020-09-13 15:58:22 +00:00
|
|
|
Control.set_size(_root, ui_rect.width, ui_rect.height)
|
|
|
|
|
|
2020-09-21 19:18:07 +00:00
|
|
|
toolbar()
|
|
|
|
|
direction()
|
|
|
|
|
people()
|
|
|
|
|
resources()
|
|
|
|
|
depart()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
toolbar(){
|
2020-09-13 15:58:22 +00:00
|
|
|
//list
|
|
|
|
|
var list = Control.create(_ent)
|
|
|
|
|
Control.child_add(_root, list)
|
|
|
|
|
Control.set_size(list, 0, 16)
|
|
|
|
|
UILayout.set_behave(_ent, list, UILayoutBehave.left | UILayoutBehave.right | UILayoutBehave.bottom)//|
|
|
|
|
|
UILayout.set_margin(_ent, list, 0, 0, 0, 0)
|
|
|
|
|
UILayout.set_contain(_ent, list, UILayoutContain.row | UILayoutContain.start) //|
|
|
|
|
|
|
2020-09-20 09:56:25 +00:00
|
|
|
//toolbar icons
|
|
|
|
|
_ui.list_button(list, [1, 0], "Info") {_ui.ui_mode = Ui.Info}
|
2020-09-21 19:18:07 +00:00
|
|
|
_ui.list_button(list, [0, 0], "Abort") {
|
|
|
|
|
_ui.ui_mode = Ui.Info
|
|
|
|
|
_game.adventures.discard()
|
2020-09-25 14:49:25 +00:00
|
|
|
_page.value = UiAdventure.direction
|
2020-09-21 19:18:07 +00:00
|
|
|
}
|
2020-09-25 12:24:07 +00:00
|
|
|
_ui.list_button(list, [3, 0], "Direction") {_page.value = UiAdventure.direction}
|
|
|
|
|
_ui.list_button(list, [2, 0], "People") {_page.value = UiAdventure.people}
|
|
|
|
|
_ui.list_button(list, [4, 0], "Stuff") {_page.value = UiAdventure.resources}
|
|
|
|
|
_ui.list_button(list, [5, 0], "Depart") {_page.value = UiAdventure.depart}
|
2020-09-21 19:18:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
direction(){
|
|
|
|
|
var page = Control.create(_ent)
|
|
|
|
|
Control.child_add(_root, page)
|
|
|
|
|
UILayout.set_behave(_ent, page, UILayoutBehave.fill)
|
|
|
|
|
UILayout.set_margin(_ent, page, 0, 0, 0, 16)
|
2020-09-25 12:24:07 +00:00
|
|
|
UILayout.set_contain(_ent, page, UILayoutContain.row | UILayoutContain.start) //|
|
2020-09-21 19:18:07 +00:00
|
|
|
|
|
|
|
|
_page.on_change(true){|val|
|
|
|
|
|
Control.set_visible(page, val == UiAdventure.direction)
|
|
|
|
|
}
|
|
|
|
|
|
2020-09-25 12:24:07 +00:00
|
|
|
//compass
|
2020-09-21 19:18:07 +00:00
|
|
|
var compass = UiCompass.create(_ent)
|
|
|
|
|
Control.child_add(page, compass)
|
|
|
|
|
Control.set_size(compass, 32, 32)
|
2020-09-25 12:24:07 +00:00
|
|
|
UILayout.set_margin(_ent, compass, 8, 0, 0, 0)
|
2020-09-25 08:42:41 +00:00
|
|
|
var steps = 16 //compass steps
|
|
|
|
|
var step_names = ["N","NNE","NE","ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW"]
|
|
|
|
|
var full_step_names = step_names.map{|short|
|
|
|
|
|
var shorts = "NESW"
|
|
|
|
|
var base_directions = ["north","east","south","west"]
|
|
|
|
|
if(short.count == 1){
|
|
|
|
|
return base_directions[shorts.indexOf(short)]
|
|
|
|
|
} else if(short.count == 2) {
|
|
|
|
|
return base_directions[shorts.indexOf(short[0])] +
|
|
|
|
|
base_directions[shorts.indexOf(short[1])]
|
|
|
|
|
} else { //assume 3
|
|
|
|
|
return base_directions[shorts.indexOf(short[0])] + "-" +
|
|
|
|
|
base_directions[shorts.indexOf(short[1])] +
|
|
|
|
|
base_directions[shorts.indexOf(short[2])]
|
|
|
|
|
}
|
|
|
|
|
}.toList
|
|
|
|
|
|
|
|
|
|
_game.adventures.planning.on_change(true){|val|
|
|
|
|
|
if(val == null) return
|
|
|
|
|
var angle = val.direction * 360 / steps
|
|
|
|
|
UiCompass.set_angle(compass, angle)
|
|
|
|
|
}
|
|
|
|
|
|
2020-09-21 19:18:07 +00:00
|
|
|
Control.set_events(compass){|event|
|
|
|
|
|
if(event.type == UIEvent.change){
|
2020-09-25 08:42:41 +00:00
|
|
|
var angle = event.change
|
|
|
|
|
|
|
|
|
|
var angleIndex = M.repeat((steps * angle / 360).round, steps)
|
|
|
|
|
var adventure = _game.adventures.planning
|
|
|
|
|
adventure.value.direction = angleIndex
|
|
|
|
|
adventure.emit()
|
2020-09-21 19:18:07 +00:00
|
|
|
}
|
|
|
|
|
}
|
2020-09-25 12:24:07 +00:00
|
|
|
|
|
|
|
|
//other parent
|
|
|
|
|
var colParent = Control.create(_ent)
|
|
|
|
|
Control.set_id(colParent, "dir col parent")
|
|
|
|
|
Control.child_add(page, colParent)
|
|
|
|
|
UILayout.set_behave(_ent, colParent, UILayoutBehave.fill)
|
|
|
|
|
UILayout.set_margin(_ent, colParent, 8, 0, 0, 0)
|
|
|
|
|
UILayout.set_contain(_ent, colParent, UILayoutContain.column | UILayoutContain.start) //|
|
|
|
|
|
|
|
|
|
|
//slider
|
|
|
|
|
var slider = UiSlider.create(_ent)
|
|
|
|
|
Control.set_id(slider, "dir dist slider")
|
|
|
|
|
Control.child_add(colParent, slider)
|
|
|
|
|
Control.set_size(slider, 0, 11)
|
|
|
|
|
UILayout.set_behave(_ent, slider, UILayoutBehave.left | UILayoutBehave.right) //|
|
|
|
|
|
UILayout.set_margin(_ent, slider, 4, 4, 4, 0)
|
|
|
|
|
|
|
|
|
|
_game.adventures.planning.on_change(true){|val|
|
|
|
|
|
if(val == null) return
|
|
|
|
|
var relative_distance = val.distance / _game.adventures.max_distance
|
|
|
|
|
UiSlider.set_value(slider, relative_distance)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Control.set_events(slider){|event|
|
|
|
|
|
if(event.type == UIEvent.change){
|
|
|
|
|
var distance = (event.change * _game.adventures.max_distance).round
|
|
|
|
|
var adventure = _game.adventures.planning
|
|
|
|
|
adventure.value.distance = distance
|
|
|
|
|
adventure.emit()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//text
|
|
|
|
|
var text = UILabel.create(_ent)
|
|
|
|
|
Control.set_id(text, "dir text")
|
|
|
|
|
Control.child_add(colParent, text)
|
|
|
|
|
UILabel.set_font(text, _ui.font)
|
|
|
|
|
UILabel.set_text_size(text, 8)
|
|
|
|
|
UILabel.set_align_vertical(text, TextAlign.top)
|
|
|
|
|
UILayout.set_behave(_ent, text, UILayoutBehave.left) //|
|
|
|
|
|
UILayout.set_margin(_ent, text, 4, 8, 4, 0)
|
|
|
|
|
|
2020-09-25 14:49:25 +00:00
|
|
|
_game.adventures.planning.on_change(true) { |val|
|
|
|
|
|
if(val == null) return
|
|
|
|
|
//this stuff does bad things
|
|
|
|
|
var dir = full_step_names[val.direction]
|
|
|
|
|
var dist = val.distance
|
|
|
|
|
UILabel.set_text(text, "%(dist)km\n%(dir)")
|
2020-09-25 12:24:07 +00:00
|
|
|
}
|
2020-09-21 19:18:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
people(){
|
|
|
|
|
var page = Control.create(_ent)
|
|
|
|
|
Control.child_add(_root, page)
|
|
|
|
|
UILayout.set_behave(_ent, page, UILayoutBehave.fill)
|
|
|
|
|
UILayout.set_margin(_ent, page, 0, 0, 0, 16)
|
|
|
|
|
|
|
|
|
|
_page.on_change(true){|val|
|
|
|
|
|
Control.set_visible(page, val == UiAdventure.people)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
resources(){
|
|
|
|
|
var page = Control.create(_ent)
|
|
|
|
|
Control.child_add(_root, page)
|
|
|
|
|
UILayout.set_behave(_ent, page, UILayoutBehave.fill)
|
|
|
|
|
UILayout.set_margin(_ent, page, 0, 0, 0, 16)
|
|
|
|
|
|
|
|
|
|
_page.on_change(true){|val|
|
|
|
|
|
Control.set_visible(page, val == UiAdventure.resources)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
depart(){
|
|
|
|
|
var page = Control.create(_ent)
|
|
|
|
|
Control.child_add(_root, page)
|
|
|
|
|
UILayout.set_behave(_ent, page, UILayoutBehave.fill)
|
|
|
|
|
UILayout.set_margin(_ent, page, 0, 0, 0, 16)
|
|
|
|
|
|
|
|
|
|
_page.on_change(true){|val|
|
|
|
|
|
Control.set_visible(page, val == UiAdventure.depart)
|
|
|
|
|
}
|
2020-09-13 15:58:22 +00:00
|
|
|
}
|
|
|
|
|
}
|