Joystick position: Difference between revisions
Content deleted Content added
Added Go |
|||
Line 464: | Line 464: | ||
180 IF J BAND 16 THEN PRINT "fire "; |
180 IF J BAND 16 THEN PRINT "fire "; |
||
190 LOOP</lang> |
190 LOOP</lang> |
||
=={{header|Julia}}== |
|||
<lang julia>using CSFML.LibCSFML, Gtk.ShortNames, Colors, Graphics, Cairo |
|||
#------------ input code ----------------------# |
|||
mutable struct Joystick |
|||
devnum::Int |
|||
isconnected::Bool |
|||
hasXaxis::Bool |
|||
nbuttons::Int |
|||
pressed::Vector{Bool} |
|||
ypos::Int |
|||
xpos::Int |
|||
name::String |
|||
Joystick(n, b=2, c=false, x=true) = new(n, c, x, b, fill(false, b), 0, 0) |
|||
end |
|||
const devnum = 0 |
|||
const buttons = 2 |
|||
const jstick = Joystick(devnum, buttons) |
|||
function polljoystick(jstick, sleepinterval=0.05) |
|||
while !sfJoystick_isCconnected(jstick.devnum) |
|||
sleep(0.25) # wait till connected |
|||
sfJoystick_update() |
|||
end |
|||
jstick.name = sfJoystick_getIdentification(jstick.devnum).name |
|||
jstick.isconnected = true |
|||
jstick.hasXaxis = sfJoystick_hasAxis(jstick.devnum, 0) |
|||
jstick.nbuttons = sfJoystick_getButtonCount(jstick.devnum) |
|||
while true |
|||
sfJoystick_update() |
|||
for i in 1:jstick.nbuttons |
|||
jstick.pressed[i] = sfJoystick_isButtonPressed(jstick.devnum, i - 1) |
|||
end |
|||
jstick.ypos = sfJoystick_getAxisPosition(jstick.devnum, 1) |
|||
jstick.xpos = sfJoystick_getAxisPosition(joystick.devnum, 0) |
|||
yield() |
|||
sleep(sleepinterval) |
|||
end |
|||
end |
|||
#------------ output code -------------------# |
|||
makelabel() = "Button 1: " * (jstick.pressed[1] ? "DOWN" : "UP") * |
|||
" Button 2: " * (jstick.pressed[2] ? "DOWN" : "UP") |
|||
const fontpointsize = 80 |
|||
const wid = 500 |
|||
const hei = 500 |
|||
win = Window("Cursor Task", wid, hei) |> (Frame() |> (vbox = Box(:v))) |
|||
set_gtk_property!(vbox, :expand, true) |
|||
can = Canvas(wid, hei) |
|||
label = Label(makelabel()) |
|||
push!(vbox, can, label) |
|||
joytoxpos() = div((jstick.xpos + 100) * width(can), 200) |
|||
joytoypos() = div((jstick.ypos + 100) * height(can), 200) |
|||
Gtk.showall(win) |
|||
@guarded draw(can) do widget |
|||
ctx = getgc(can) |
|||
select_font_face(ctx, "Courier", Cairo.FONT_SLANT_NORMAL, Cairo.FONT_WEIGHT_BOLD) |
|||
set_font_size(ctx, fontpointsize) |
|||
set_source(ctx, colorant"red") |
|||
move_to(ctx, joytoxpos(), joytoypos()) |
|||
show_text(ctx, "+") |
|||
set_gtk_property!(label, :label, makelabel()) |
|||
end |
|||
@async polljoystick(jstick) |
|||
while true |
|||
draw(can) |
|||
sleep(0.2) |
|||
yield() |
|||
end |
|||
</lang> |
|||
=={{header|Liberty BASIC}}== |
=={{header|Liberty BASIC}}== |