Mineshafts-prototype2/engine/gui.gd

80 lines
2.3 KiB
GDScript

extends Node
func show(player:Dictionary,text:String):
var s = text.split("]",false)
var Gui = {player=player,player_object=player.object}
assert(s[0].substr(0,10) == "background","ERROR: GUI.create: first element must be background!")
for v in s:
var n = v.find("[")
var ob = v.substr(0,n)
var op = [Gui]
var ops = v.substr(n+1,-1).split(";",false)
for i in ops:
op.push_back(i)
var S = ops.size()
if ob == "background" and GUI.get("background") == null:
callv("background",op)
elif ob == "inventory" and S >= 3:
callv("inventory",op)
player.object.add_child(Gui.background.object)
player.object.gui = Gui
Input.set_mouse_mode(Input.MOUSE_MODE_CONFINED)
func background(Gui,x="8",y="4",color="Color(0.1,0.1,0.1,0.9)"):
x = float(x)*50
y = float(y)*50
color = str2var(color)
var size = Vector2(x,y)
var vs = core.ui.get_viewport_rect().size
var pos = (vs/2) - (size/2)
var back = ColorRect.new()
back.rect_size = size
back.rect_position = pos
back.color = color
Gui.background = {size=size,pos=pos,object=back}
return Gui
func inventory(Gui,inv,name,x,y,w="1",h="1",size="50"):
x = float(x)*50
y = float(y)*50
w = int(w)
h = int(h)
size = int(size)
var X = 0
var Y = 0
if inv.substr(0,7) == "player:":
inv = core.player.inventory[name]
elif inv.substr(0,7) == "object:":
inv = core.objects[inv.substr(7)].inventory[name]
elif inv.substr(0,5) == "node:":
inv = core.meta[str2var(inv.substr(5))].inventory[name]
Gui.inventory = {ref={},selected=null} if Gui.get("inventory") == null else Gui.inventory
var lab = str(Gui.inventory.ref.size())
Gui.inventory.ref[lab] = {inv=inv,slots={},name=name}
for i in w*h:
var it = inv[i]
var slot = TextureRect.new()
slot.texture = load("res://game/textures/slot.png")
slot.rect_size = Vector2(size,size)
slot.rect_position = Vector2(x+X,y+Y)
slot.name = str(i)
Gui.inventory.ref[lab].slots[slot.name]={slot=slot}
X += size
if X >= w*size:
X = 0
Y += size
if it != null:
var item = core.stack_2invitem(it)
item.get_node("item").rect_scale = item.get_node("item").rect_scale/2
Gui.inventory.ref[lab].slots[slot.name].item = item
slot.add_child(item)
else:
Gui.inventory.ref[lab].slots[slot.name].item = null
Gui.background.object.add_child(slot)
return Gui