started work on rewriting in moonscript

This commit is contained in:
Paul Liverman 2016-02-22 19:55:05 -08:00
commit 2442730ded
3 changed files with 290 additions and 0 deletions

52
src/pop/elements/box.moon Normal file
View File

@ -0,0 +1,52 @@
import graphics from love
import sub, len from string
path = sub ..., 1, len(...) - len "/box"
element = require "#{path}/element"
class box extends element
new: (pop, parent, background=false) =>
super pop, parent
@background = background
draw: => --NOTE these ifs might be wrong? test this!
if @background
if type(@background) == "table"
graphics.setColor @background
else
graphics.setColor @background
w, h = @background\getDimensions!
w = @w/w
h = @h/h
graphics.draw @background, @x, @y, 0, w, h
return @
debugDraw: =>
graphics.setLineWidth 0.5
graphics.setColor 0, 0, 0, 100
graphics.rectangle "fill", @x, @y, @w, @h
graphics.setColor 0, 0, 200, 200
graphics.rectangle "line", @x, @y, @w, @h
graphics.setColor 200, 200, 255, 255
graphics.print "b", @x, @y
return @
setBackground: (background) =>
@background = background
return @
getBackground: =>
return @background
setColor: (r, g, b, a=255) =>
@background = {r, g, b, a}
return @
getColor: =>
if type(@background) == "table"
return unpack @background
else
error "This box doesn't have a color." --might be bad design...

View File

@ -0,0 +1,152 @@
import graphics from love
class element
new: (pop, parent) =>
@parent = parent
@child = {}
@x = parent.x or 0
@y = parent.y or 0
@w = 10
@h = 10
@horizontal = "left"
@vertical = "top"
debugDraw: =>
graphics.setLineWidth 0.5
graphics.setColor 0, 0, 0, 100
graphics.rectangle "fill", @x, @y, @w, @h
graphics.setColor 0, 200, 0, 200
graphics.rectangle "line", @x, @y, @w, @h
graphics.setColor 200, 255, 200, 255
graphics.print "e", @x, @y
return @
move: (x, y) =>
@x += x
@y += y
for i in @child do
if not @child[i].excludeMovement
@child[i]\move x, y
return @
setPosition: (x, y) =>
oldX = @x
oldY = @y
switch @horizontal
when "left"
@x = x
when "center"
@x = x - @w/2
when "right"
@x = x - @w
switch @vertical
when "top"
@y = y
when "center"
@y = y - @h/2
when "bottom"
@y = y - @h
for i in @child
if not @child[i].excludeMovement
@child[i]\move x - oldX, y - oldY
return @
getPosition: =>
resultX = @x
resultY = @y
switch @horizontal
when "center"
resultX += @w/2
when "right"
resultX += @w
switch @vertical
when "center"
resultY += @h/2
when "bottom"
resultY += @h
return resultX, resultY
setSize: (w, h) =>
if w
switch @horizontal
when "center"
@x -= (w - @w)/2
when "right"
@x -= w - @w
@w = w
if h
switch @vertical
when "center"
@y -= (h - @h)/2
when "bottom"
@y -= h - @h
@h = h
return @
getSize: =>
return @w, @h
adjustSize: (w, h) =>
W, H = @getSize!
if w
W += w
if h
H += h
@setSize W, H
return @
align: (horizontal, vertical) =>
@setAlignment horizontal, vertical
@x = @parent.x
@y = @parent.y
switch @horizontal
when "center"
@x += (@parent.w - @w)/2
when "right"
@x += @parent.w - @w
switch @vertical
when "center"
@y += (@parent.h - @h)/2
when "bottom"
@y += @parent.h - @h
return @
alignTo: (element, horizontal, vertical) =>
realParent = @parent
@parent = element
@align horizontal, vertical
@parent = realParent
return @
setAlignment: (horizontal, vertical) =>
if horizontal
@horizontal = horizontal
if vertical
@vertical = vertical
return @

86
src/pop/init.moon Normal file
View File

@ -0,0 +1,86 @@
import filesystem, graphics from love
import insert from table
path = ...
class Pop
new: =>
@elements = {}
@window = {child: {}} --TODO eliminate this crap
--@focused = @window --TODO redo better
elements = filesystem.getDirectoryItems "#{path}/elements"
for i in elements
name = elements[i]\sub 1, -5
@elements[name] = require "#{path}/elements/#{name}"
print "loaded element: #{name}"
if not @name
@name = (...) -> return @create(name, ...)
print "wrapped created: #{name}()"
@window = @create("element")\setSize(graphics.getWidth!, graphics.getHeight!)
print "created window"
create: (elementType, parent=@window, ...) =>
newElement = @elements[elementType](@, parent, ...)
insert parent.child, newElement
return newElement
update: (dt, element=@window) =>
if not element.excludeUpdating
if element.update
element\update dt
for i in element.child
@update dt, element.child[i]
draw: (element=@window) =>
if not element.excludeRendering
if element.draw
element\draw
for i in element.child
@draw element.child[i]
mousepressed: (button, x, y, element) =>
error "Unimplemented."
mousereleased: (button, x, y, element) =>
error "Unimplemented."
keypressed: (key) =>
error "Unimplemented."
keyreleased: (key) =>
error "Unimplemented."
textinput: (text) =>
error "Unimplemented."
skin: (element, skin, apply_to_children=false) =>
if element.background
element.background = skin.background
if element.color
element.color = skin.color
if element.font
element.font = skin.font
if not apply_to_children
for i in element.child
@skin element.child[i], skin
debugDraw: (element=@window) =>
if element.debugDraw
element\debugDraw!
else
graphics.setLineWidth 1
graphics.setColor 0, 0, 0, 100
graphics.rectangle "fill", element.x, element.y, element.w, element.h
graphics.setColor 150, 150, 150, 150
graphics.rectangle "line", element.x, element.y, element.w, element.h
graphics.setColor 200, 200, 200, 255
graphics.print ".", element.x, element.y
for i in element.child
@debugDraw element.child[i]