vanilla-wow-addons – Rev 1
?pathlinks?
-- mauszeiger betritt sf
function wowon_sf_maus_OnEnter ()
if (wowon.game.ingame == true) then
wowon_timer_balken (true)
end
end
-- mauszeiger verlässt sf
function wowon_sf_maus_OnLeave ()
wowon_timer_balken (false)
end
-- mausklick
function wowon_sf_maus_OnClick()
if (wowon.game.ingame == true) then
wowon_event_mausklick ()
end
end
-- neue pos. des balken berechnen
function wowon_sf_balken_move ()
-- fenster position
local x = wowon_sf:GetLeft()
-- cursor position
local cx = GetCursorPosition()
-- sf fensterbreite
local fx = wowon.game.feld.x
-- balkenbreite
local b = wowon.game.balken.b
-- scalegrösse
local sc = UIParent:GetScale()
-- scalegrösse kompensieren
cx = cx/sc
-- maus ist im spielfeld
if not (cx<x) and not (cx>(fx+x)) then -- eigentlich unnötige sicherheitsabfrage, da maus auserhalb den timer wowon_balken deaktiviert
-- balken ist ganz links
if (cx<(x+b/2)) then
wowon.game.balken.x = b/2
-- balken ist ganz rechts
elseif (cx>(x+fx-b/2)) then
wowon.game.balken.x = fx-b/2
-- balken ist dazwischen
else
wowon.game.balken.x = cx-x
end
end
--wowon_debug(wowon.game.balken.x)
wowon_UI_sf_balken_move ()
end
-- ball erstellen
function wowon_sf_ball_add (status)
-- s = startstatus des balles
-- überprüfen ob ein ball frei ist
if (wowon.game.ballfrei[1] == nil) then
wowon_UI_sf_ball_creat ()
end
-- erster freier ball nehmen
local b = wowon.game.ballfrei[1]
-- von der ballfrei liste entfernen
table.remove(wowon.game.ballfrei, 1)
-- zur balle liste hinzufügen
table.insert(wowon.game.balle, b)
-- ball table fürs game erstellen
wowon.game.ball[b] = {};
-- status des balles setzten
wowon.game.ball[b].s = status
-- starteigenschaften für startball (status = 1)
if (status == 1) then
wowon.game.ball[b].a = 4
wowon.game.ball[b].r = 10
end
wowon.game.ball[b].ss = 1
-- ball darstellen
wowon_UI_sf_ball_update (b)
-- ball zeigen und an startposition setzen
wowon_UI_sf_ball_start (b)
end
-- ball freigeben
function wowon_sf_ball_start (b)
-- b = ballnummer
wowon.game.ball[b].x = wowon.game.balken.x
wowon.game.ball[b].y = wowon.game.feld.o+wowon.game.ball[b].r
wowon.game.ball[b].ss = 2
-- zufallsstartwinkel
local z = math.random(120)
if (z > 60) then
wowon.game.ball[b].w = z-60
else
wowon.game.ball[b].w = 360-z
end
--wowon_UI_sf_ball_update (b)
wowon_timer_ball (true, b)
end
-- feldball freigeben
function wowon_sf_feldball_start (b)
-- b = ballnummer
wowon.game.ball[b].ss = 4
wowon.game.ball[b].a = 4
-- zufallsstartwinkel
wowon.game.ball[b].w = math.random(1, 360)
wowon_timer_ball (true, b)
end
function wowon_sf_ball_move (b, b_lvl)
-- b = ballnummer
-- b_lvl = berechnungs-lvl
-- neue position des balls berechnen
local w = wowon.game.ball[b].w
local a = wowon.game.ball[b].a/b_lvl
wowon.game.ball[b].y = wowon.game.ball[b].y+math.cos(math.rad(w))*a
wowon.game.ball[b].x = wowon.game.ball[b].x+math.sin(math.rad(w))*a
wowon_UI_ball_move(b)
end
function wowon_sf_ball_delet (b)
-- b = ballnummer
-- von der balle liste entfernen
for i = 1, table.getn(wowon.game.balle) do
if (wowon.game.balle[i] == b) then
table.remove(wowon.game.balle, i)
break
end
end
-- zur ballfrei liste hinzufügen
table.insert(wowon.game.ballfrei, b)
-- balltimer deaktivieren
wowon_timer_ball (false, b)
-- ball verdecken
wowon_UI_sf_ball_hide (b)
end
-- feld erstellen
function wowon_sf_feld_add (h, b, x, y, s, vr, vg, vb, va, fb)
-- s = feldstatus
-- h = höhe
-- b = breite
-- x = x pos
-- y = y pos
-- vr = rot
-- vg = grün
-- vb = blau
-- va = alpha
-- fb = feldball
-- überprüfen ob ein feld frei ist
if (wowon.game.feldfrei[1] == nil) then
wowon_UI_sf_feld_creat ()
end
-- erster freier ball nehmen
local f = wowon.game.feldfrei[1]
-- von der feldfrei liste entfernen
table.remove(wowon.game.feldfrei, 1)
-- zur felder liste hinzufügen
table.insert(wowon.game.felder, f)
-- ball table fürs game erstellen
wowon.game.feld[f] = {};
-- daten eingeben
wowon.game.feld[f].h = h
wowon.game.feld[f].b = b
wowon.game.feld[f].x = x
wowon.game.feld[f].y = y
wowon.game.feld[f].s = s
-- farbe
if not (vr == nil) then
wowon.game.feld[f].vc = {};
wowon.game.feld[f].vc.r = vr
wowon.game.feld[f].vc.g = vg
wowon.game.feld[f].vc.b = vb
wowon.game.feld[f].vc.a = va
end
-- feld darstellen
wowon_UI_sf_feld_update (f)
-- feld zeigen und setzen
wowon_UI_sf_feld_start (f)
-- feldball
if not (fb == nil) then
-- überprüfen ob ein ball frei ist
if (wowon.game.ballfrei[1] == nil) then
wowon_UI_sf_ball_creat ()
end
-- erster freier ball nehmen
local ball = wowon.game.ballfrei[1]
-- von der ballfrei liste entfernen
table.remove(wowon.game.ballfrei, 1)
-- zur balle liste hinzufügen
table.insert(wowon.game.balle, ball)
-- ball table fürs game erstellen
wowon.game.ball[ball] = {};
-- status des f-balles setzten
wowon.game.ball[ball].s = fb
wowon.game.ball[ball].ss = 3
-- radius des f-balles
if (h > b) then
wowon.game.ball[ball].r = b/2
else
wowon.game.ball[ball].r = h/2
end
-- position des f-ball
wowon.game.ball[ball].y = y+h/2
wowon.game.ball[ball].x = x+b/2
-- ball darstellen
wowon_UI_sf_ball_update (ball)
-- ball zeigen und an startposition setzen
wowon_UI_sf_feldball_start (ball)
-- im feld die f-ball nummer speichern
wowon.game.feld[f].fb = ball
end
end
function wowon_sf_feld_delet (f)
-- f = feldnummer
-- von der felder liste entfernen
for i = 1, table.getn(wowon.game.felder) do
if (wowon.game.felder[i] == f) then
table.remove(wowon.game.felder, i)
break
end
end
-- zur feldfrei liste hinzufügen
table.insert(wowon.game.feldfrei, f)
-- feld verdecken
wowon_UI_GXF_sf ("felddelet", f)
end