Files
siliconsandGitHub 21883078ce /datum/emote - emote refactor, adds vocal cues (#6725)
datumizes and standardizes all emotes because that file is in the
fucking way of my saycode rewrite
adds vocal cues
2025-11-14 23:54:43 +01:00

99 lines
3.9 KiB
Plaintext

/datum/browser/modal/listpicker
var/valueslist = list()
/datum/browser/modal/listpicker/New(User,Message,Title,Button1="Ok",Button2,Button3,StealFocus = 1, Timeout = FALSE,list/values,inputtype="checkbox", width, height, slidecolor)
if (!User)
return
var/output = {"<form><input type="hidden" name="src" value="[REF(src)]"><ul class="sparse">"}
if (inputtype == "checkbox" || inputtype == "radio")
for (var/i in values)
var/div_slider = slidecolor
if(!i["allowed_edit"])
div_slider = "locked"
var/entry_name = html_encode(i["name"])
var/entry_checked = i["checked"]
output += {"<li>
<label class="switch">
<input type="[inputtype]" value="1" name="[entry_name]"[entry_checked ? " checked" : ""][i["allowed_edit"] ? "" : " onclick='return false' onkeydown='return false'"] />
<div class="slider [div_slider ? "[div_slider]" : ""]"></div>
<span>[i["name"]]</span>
</label>
</li>"}
else
for (var/i in values)
var/entry_name = html_encode(i["name"])
output += {"<li><input id="name="[i["name"]]"" style="width: 50px" type="[type]" name="[entry_name]" value="[i["value"]]" />
<label for="[i["name"]]">[i["name"]]</label></li>"}
output += {"</ul><div style="text-align:center">
<button type="submit" name="button" value="1" style="font-size:large;float:[( Button2 ? "left" : "right" )]">[Button1]</button>"}
if (Button2)
output += {"<button type="submit" name="button" value="2" style="font-size:large;[( Button3 ? "" : "float:right" )]">[Button2]</button>"}
if (Button3)
output += {"<button type="submit" name="button" value="3" style="font-size:large;float:right">[Button3]</button>"}
output += {"</form></div>"}
..(User, ckey("[User]-[Message]-[Title]-[world.time]-[rand(1,10000)]"), Title, width, height, src, StealFocus, Timeout)
set_content(output)
/datum/browser/modal/listpicker/Topic(href,href_list)
if (href_list["close"] || !user || !user.client)
opentime = 0
return
if (href_list["button"])
var/button = text2num(href_list["button"])
if (button <= 3 && button >= 1)
selectedbutton = button
for (var/item in href_list)
switch(item)
if ("close", "button", "src")
continue
else
valueslist[item] = href_list[item]
opentime = 0
close()
/proc/presentpicker(mob/User,Message, Title, Button1="Ok", Button2, Button3, StealFocus = 1,Timeout = 6000,list/values, inputtype = "checkbox", width, height, slidecolor)
if (!istype(User))
if (istype(User, /client/))
var/client/C = User
User = C.mob
else
return
var/datum/browser/modal/listpicker/A = new(User, Message, Title, Button1, Button2, Button3, StealFocus,Timeout, values, inputtype, width, height, slidecolor)
A.open()
A.wait()
if (A.selectedbutton)
return list("button" = A.selectedbutton, "values" = A.valueslist)
/proc/input_bitfield(mob/User, title, datum/bitfield/bitfield, current_value, nwidth = 350, nheight = 350, nslidecolor, allowed_edit_list = null)
if(!User)
return
var/list/pickerlist = list()
for(var/i in 1 to bitfield.get_declared_count())
var/bit = bitfield.bits[i]
var/name = bitfield.names[i]
var/can_edit = 1
if(allowed_edit_list && !(allowed_edit_list & bit))
can_edit = 0
if (current_value & bit)
pickerlist += list(list("checked" = 1, "value" = bit, "name" = name, "allowed_edit" = can_edit))
else
pickerlist += list(list("checked" = 0, "value" = bit, "name" = name, "allowed_edit" = can_edit))
var/list/result = presentpicker(User, "", title, Button1="Save", Button2 = "Cancel", Timeout=FALSE, values = pickerlist, width = nwidth, height = nheight, slidecolor = nslidecolor)
if (islist(result))
if (result["button"] == 2) // If the user pressed the cancel button
return
. = 0
for (var/flag in result["values"])
// TODO: efficient-er reverse lookup
for(var/i in 1 to bitfield.get_declared_count())
var/bit = bitfield.bits[i]
var/name = bitfield.names[i]
if(name == flag)
. |= bit
else
return