-- title: TIC-80 controller test -- author: Al Rado 16.02.2017 -- desc: controller test, only moonScript -- script: moon -- input: gamepad -- pal: DB16 TITLE="TIC-80 controller test" SCREEN_W=240 export class Gamepad new:(name,startCode=0,mainColor=6,sound=36)=> @name=name @buttons={ {name:"Up", code:0+startCode, x:7, y:4}, {name:"Down", code:1+startCode, x:7, y:12}, {name:"Left", code:2+startCode, x:3, y:8}, {name:"Right", code:3+startCode, x:11, y:8}, {name:"Btn A", code:4+startCode, x:23, y:10}, {name:"Btn B", code:5+startCode, x:30, y:6} } @pressedKeys={} @mainColor=mainColor @bodyColor=7 @shadowColor=1 @pressedBtnColor=5 @sound=sound Update:(x,y,msgY)=> @DrawBack(x,y) @pressedKeys={} for button in *@buttons if (btn button.code) then table.insert @pressedKeys, button.name circ x+button.x,y+button.y,2,@pressedBtnColor @PrintKeys msgY PrintKeys:(y)=> if (#@pressedKeys > 0) then keysMsg="" for i=1, #@pressedKeys keysMsg..=@pressedKeys[i] if (i<#@pressedKeys) then keysMsg..=", " title=@name.." pressed: " len=print title..keysMsg,-100,-100 --fake print posX=(SCREEN_W-len)/2 shiftX=print title,posX,y print keysMsg,posX+shiftX,y,@mainColor IsActive:=>#@pressedKeys>0 AddViewTo:(views)=> if (@IsActive()) then table.insert views, ViewParam(@mainColor,@sound) DrawBack:(x,y)=> doubleDraw=(drawFunc,colorOne,colorTwo)-> drawFunc 1, colorOne drawFunc 0, colorTwo drawBody=(shiftX,shiftY,colorOne,colorTwo)-> drawLayer=(shift,color)-> rect x+shiftX+shift,y+shiftY+shift,36,18,color doubleDraw(drawLayer,colorOne,colorTwo) drawDpad=(shiftX,shiftY,colorOne,colorTwo)-> drawLayer=(shift,color)-> rect x+shiftX+shift,y+shiftY+shift,9,3,color rect x+shiftX+shift+3,y+shiftY+shift-3,3,9,color doubleDraw(drawLayer,colorOne,colorTwo) drawButton=(shiftX,shiftY,colorOne,colorTwo)-> drawLayer=(shift,color)-> circ x+shiftX+shift,y+shiftY+shift,2,color doubleDraw(drawLayer,colorOne,colorTwo) drawBody(0,0,@shadowColor,@bodyColor) drawDpad(3,7,@shadowColor,@mainColor) drawButton(23,10,@shadowColor,@mainColor) drawButton(30,6,@shadowColor,@mainColor) export class ViewParam new:(color,sound)=> @color=color @sound=sound export UpdateSingleView=(view)-> Border view.color Beep view.sound export Border=(color)->poke(0x3FF8,color) export Beep=(sound)->sfx(sound,sound,0,3) export gmpdOne=Gamepad("Player one") export gmpdTwo=Gamepad("Player two",8,13,10) export NOT_ACTIVE=ViewParam(8,-1) export BOTH_ACTIVE=ViewParam(15,23) export TIC=-> cls 8 print(TITLE,70,30) gmpdOne\Update(50,80,116) gmpdTwo\Update(160,80,126) views={NOT_ACTIVE} gmpdOne\AddViewTo(views) gmpdTwo\AddViewTo(views) UpdateSingleView #views>2 and BOTH_ACTIVE or views[#views]