Advertisement
Guest User

touchlb

a guest
Aug 15th, 2014
323
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 6.19 KB | None | 0 0
  1. --[[
  2. TOUCHLIB - VERSION 0.5 - 09/08/2014
  3. Codée par Cartix et -florian66- (de Planète Casio)
  4. Définit TL_DefSize(),TL_GetXY(),TL_WaitDn(),TL_WaitUp,TL_GetDir(),TL_Wait().
  5. Ces fonctions permettent de simuler un pavé tactile sur la calculatrice, à la place des touches du pavé d'en bas (entre [7] et [EXE], comprises)
  6. Les coordonnées obtenues par les différentes fonctions varient donc en fonction des touches sur lesquelles l'utilisateur appuye.
  7. Le pavé est paramétrés de la sorte : la touche [7] correspond au point (0,0) et la touche [EXE] au point (128,64)
  8. ]]
  9.  
  10.  --[[
  11. CODE D'APPEL DE LA LIBRAIRIE :
  12. TCLib,err = misc.modload ( "touch")
  13. if TCLib == nil then                -- Si il y a erreur, TCLib = nil. err contient alors le message d'erreur
  14. nbdraw.print(err)                   -- Affiche l'erreur lors du chargement du fichier
  15. end
  16. TCLib()                             -- Execute le fichier (et donc defini les fonctions et les variables globales qui deviennent accessibles)
  17. ]]
  18. ------------------
  19.  
  20. def="module touch"                  -- Définition du module
  21.  
  22. -- FONCTIONS MATHÉMATIQUES NÉCESSAIRES
  23. --[[Ces fonctions sont là uniquement afin d'alléger la librairie et la rendre indépendante, pour faire en sorte de n'avoir pas besoin
  24. du module math.lua pour que celle-ci fonctionne.
  25. ]]
  26.  
  27. function flr(x)                     -- Cette fonction renvoie la partie entière d'un nombre (x)
  28.   return x - x % 1
  29. end
  30.  
  31. function abs(x)                     -- Cette fonction renvoie la valeur absolue d'un nombre (x)
  32.   if(x > 0) then
  33.     return x
  34.   else
  35.     return -x
  36.   end
  37. end
  38.  
  39. function sgn(x)                     -- Cette fonction renvoie le signe d'un nombre (x)
  40.   if(x==0) then
  41.     return 0
  42.   else
  43.     return x/abs(x)
  44.   end
  45. end
  46.  
  47. -- FONCTIONS PERMETTANT DE SIMULER L'EFFET TACTILE
  48.  
  49. local xmin, xmax, ymin, ymax = 0,128,0,64 -- On définit les dimensions initiales
  50.  
  51. function TL_DefSize(x1, y1, x2, y2)  -- Cette fonction permet à l'utilisateur de choisir les dimensions du pavé (une peu comme le viewwindow)
  52.   xmin, xmax, ymin, ymax = x1,x2,y1,y2
  53. end
  54.  
  55. --[[ x, y, tch = TL_GetXT()
  56. Description         : Cette fonction regarde l'ensemble des touches pressées dans la zone d'intêret (entre 7 et EXE) et
  57.                       calcule à partir de celles-ci les coordonnées du point appuyé
  58. Arguments d'entrée  : Aucun
  59. Arguments de sortie : x   : Entier  : Contient l'abscisse du point où l'on a appuyé
  60.                       y   : Entier  : Contient l'ordonnée du point où l'on a appuyé
  61.                       tch : Booléen : Contient vrai si on a appuyé quelque part, faux sinon
  62. ]]
  63.  
  64. function TL_GetXY()
  65.   local j,x,y,i = 0,0,0
  66.   for i = 1,20,1 do
  67.     if key(i) then
  68.       x = x + flr((xmax-xmin)/5) * ((i - 1) % 5)
  69.       y = y + flr(i / 5 - .2) * flr((ymax-ymin)/4)
  70.       j = j + 1
  71.     end
  72.   end
  73.   if j ~= 0 then
  74.     return flr(flr((xmax-xmin)/10) + x / j),abs(flr(flr((ymax-ymin)/8) + y / j) - ymax),true
  75.   else
  76.     return xmin+1,ymin+1,false
  77.   end
  78. end
  79. --[[ x,y = TL_WaitDn()
  80. Description         : Cette fonction attend que l'utilisateur appuie sur un point, et renvoie alors les coordonnées de celui-ci
  81. Arguments d'entrée  : Aucun
  82. Arguments de sortie : x : Entier : Contient l'abscisse du point où l'on a appuyé
  83.                       y : Entier : Contient l'ordonnée du point où l'on a appuyé
  84. ]]
  85.  
  86. function TL_WaitDn()
  87.   local x,y,tch
  88.   repeat
  89.     x,y,tch = TL_GetXY()
  90.   until tch
  91.   return x,y
  92. end
  93.  
  94. --[[ x,y = TL_WaitDn()
  95. Description         : Cette fonction attend que l'utilisateur n'appuie plus sur aucun point, et renvoie alors les
  96.                       coordonnées du dernier point appuyé
  97. Arguments d'entrée  : Aucun
  98. Arguments de sortie : x : Entier : Contient l'abscisse du point où l'on a appuyé
  99.                       y : Entier : Contient l'ordonnée du point où l'on a appuyé
  100. ]]
  101.  
  102. function TL_WaitUp()
  103.   local x,tx,y,ty,tch
  104.   repeat
  105.     x,y,tch = TL_GetXY()
  106.     if tch then
  107.       tx,ty = x,y
  108.     end
  109.   until not(tch)
  110.   return tx,ty
  111. end
  112.  
  113. --[[ dx,dy : TL_GetDir()
  114. Description         : Cette fonction attend que l'utilisateur se soit déplacé sur le pavé "tactile" et renvoie
  115.                       la direction de son mouvement, définie comme suivant :
  116.                       Déplacement vers la gauche : dx,dy = -1, 0
  117.                       Déplacement vers la droite : dx,dy =  1, 0
  118.                       Déplacement vers le haut   : dx,dy =  0,-1
  119.                       Déplacement vers le bas    : dx,dy =  0, 1
  120. Arguments d'entrée : Aucun
  121. Argument de sortie : dx : Entier : Contient la direction en x (v. ci-dessus)
  122.                      dy : Entier : Contient la direction en y
  123. ]]
  124.  
  125. function TL_GetDir()
  126.   local x1,y1 = TL_WaitDn()
  127.   local x2,y2 = TL_WaitUp()
  128.   if abs(x2-x1) < abs(y2-y1) then
  129.     return 0,sgn(y2-y1)
  130.   else
  131.     return sgn(x2-x1),0
  132.   end
  133. end
  134.  
  135. --[[ x,y = TL_Wait(x1,y1,x2,y2)
  136. Description        : Cette fonction attend que l'utilisateur ait appuyé dans une zone précise, et renvoie les coordonnées
  137.                       du point appuyé
  138. Arguments d'entrée :  x1 : Entier : Limite à gauche de la zone
  139.                       y1 : Entier : Limite en haut de la zone
  140.                       x2 : Entier : Limite à droite de la zone (x1<x2)
  141.                       y2 : Entier : Limite en bas de la zone (y1<y2)
  142. Arguments de sortie : x : Entier : Abscisse du point appuyé
  143.                       y : Entier : Ordonnée du point appuyé
  144. ]]
  145.  
  146. function TL_Wait(x1,y1,x2,y2)
  147.   local x,y
  148.   repeat
  149.     x,y = TL_WaitDn()
  150.   until (x < x1) or (x > x2) or (y < y1) or (y > y2)
  151.   return x,y
  152. end
  153.  
  154. --[[ tst = TL_Wait(x1,y1,x2,y2)
  155. Description        : Cette fonction teste si l'utilisateur appuie dans une zone précise
  156. Arguments d'entrée :  x1 : Entier : Limite à gauche de la zone
  157.                       y1 : Entier : Limite en haut de la zone
  158.                       x2 : Entier : Limite à droite de la zone (x1<x2)
  159.                       y2 : Entier : Limite en bas de la zone (y1<y2)
  160. Arguments de sortie : tst : Booléen : Contient vrai si le resultat du test est positif, faux sinon
  161. ]]
  162.  
  163. function TL_Test(x1, y1, x2, y2)
  164.   local x,y,tch = TL_GetXY()
  165.   return tch and (x >= x1) and (x <= x2) and (y >= y1) and (y <= y2)
  166. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement