Advertisement
Guest User

Untitled

a guest
Sep 2nd, 2018
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.88 KB | None | 0 0
  1. let MENU_INDEX_SELECTION = 1;
  2. let MENU_NAME_ENTRY = 2;
  3. let menuMode = MENU_INDEX_SELECTION;
  4.  
  5. @Initialize{
  6. SetAutoDeleteObject(true);
  7. LoadReplayList;
  8.  
  9. TBackground;
  10. TReplayIndexSelection;
  11. }
  12.  
  13. @MainLoop{
  14. yield;
  15. }
  16.  
  17. @Finalize{}
  18.  
  19. task TBackground
  20. {
  21. let target = GetTransitionRenderTargetName();
  22. let obj = ObjPrim_Create(OBJ_SPRITE_2D);
  23. ObjPrim_SetTexture(obj, target);
  24. Obj_SetRenderPriority(obj, 0.1);
  25. ObjSprite2D_SetSourceRect(obj, 0, 0, 640, 480);
  26. ObjSprite2D_SetDestCenter(obj);
  27. ObjRender_SetPosition(obj, 320, 240, 0);
  28. ObjRender_SetAlpha(obj, 64);
  29. }
  30.  
  31. task TReplayIndexSelection{
  32. let cursorY = 0;
  33. let page = 0;
  34. let countMaxItem = REPLAY_INDEX_DIGIT_MAX - REPLAY_INDEX_DIGIT_MIN + 1;
  35. let countItemPerPage = 10;
  36. let pageMax = trunc((countMaxItem - 1) / countItemPerPage);
  37. pageMax = max(pageMax, 1);
  38. let lastPageMaxCursorY = trunc(countMaxItem / countItemPerPage);
  39.  
  40. ascent(let iItem in 0..countItemPerPage){
  41. TMenuItem(iItem);
  42. }
  43.  
  44. while(GetVirtualKeyState(VK_OK) != KEY_FREE || GetVirtualKeyState(VK_CANCEL) != KEY_FREE){yield;}
  45.  
  46. let frameKeyHold = 0;
  47.  
  48. while(menuMode == MENU_INDEX_SELECTION){
  49.  
  50. if(GetVirtualKeyState(VK_OK) == KEY_PUSH){
  51. menuMode = MENU_NAME_ENTRY;
  52. let index = page * countItemPerPage + cursorY + 1;
  53. TNameEntry(index);
  54.  
  55. break;
  56. }
  57.  
  58. if(GetVirtualKeyState(VK_UP) == KEY_PUSH || GetVirtualKeyState(VK_UP) == KEY_HOLD){
  59. frameKeyHold++;
  60. if(GetVirtualKeyState(VK_UP) == KEY_PUSH || frameKeyHold == 20 || (frameKeyHold > 20 && (frameKeyHold % 10 == 0))){
  61. cursorY--;
  62. }
  63. }else if(GetVirtualKeyState(VK_DOWN) == KEY_PUSH || GetVirtualKeyState(VK_DOWN) == KEY_HOLD){
  64. frameKeyHold++;
  65. if(GetVirtualKeyState(VK_DOWN) == KEY_PUSH || frameKeyHold == 20 || (frameKeyHold > 20 && (frameKeyHold % 10 == 0))){
  66. cursorY++;
  67. }
  68. }else if(GetVirtualKeyState(VK_LEFT) == KEY_PUSH || GetVirtualKeyState(VK_LEFT) == KEY_HOLD){
  69. frameKeyHold++;
  70. if(GetVirtualKeyState(VK_LEFT) == KEY_PUSH || frameKeyHold == 20 || (frameKeyHold > 20 && (frameKeyHold % 10 == 0))){
  71. page--;
  72. }
  73. }else if(GetVirtualKeyState(VK_RIGHT) == KEY_PUSH || GetVirtualKeyState(VK_RIGHT) == KEY_HOLD){
  74. frameKeyHold++;
  75. if(GetVirtualKeyState(VK_RIGHT) == KEY_PUSH || frameKeyHold == 20 || (frameKeyHold > 20 && (frameKeyHold % 10 == 0))){
  76. page++;
  77. }
  78. }else{
  79. frameKeyHold = 0;
  80. }
  81.  
  82. if(page < 0){
  83. page = pageMax;
  84. }else if(page > pageMax){
  85. page = 0;
  86. }
  87.  
  88. if(page != pageMax){
  89. if(cursorY < 0){
  90. cursorY = countItemPerPage - 1;
  91. }else if(cursorY >= countItemPerPage){
  92. cursorY = 0;
  93. }
  94. }else{
  95. if(cursorY < 0){
  96. cursorY = lastPageMaxCursorY - 1;
  97. }else if(cursorY >= lastPageMaxCursorY){
  98. cursorY = 0;
  99. }
  100. }
  101.  
  102. yield;
  103. }
  104.  
  105. task TMenuItem(itemY){
  106. let objText = CreateTextObject(64, 64 + 30 * itemY, 18, "");
  107. let objSelect = CreateTextObject1(64, 64 + 30 * itemY, 18, "");
  108.  
  109. let oldPage = -1;
  110. while(menuMode == MENU_INDEX_SELECTION){
  111. if(page != oldPage){
  112. let index = page * countItemPerPage + itemY + 1;
  113. let text = rtos("00", index) ~ " ";
  114. if(IsValidReplayIndex(index)){
  115. text = text ~ vtos("-8s", GetReplayInfo(index, REPLAY_USER_NAME)) ~ " ";
  116. text = text ~ GetReplayInfo(index, REPLAY_DATE_TIME) ~ " ";
  117. text = text ~ rtos("000000000000", GetReplayInfo(index, REPLAY_TOTAL_SCORE)) ~ " ";
  118. }else{
  119. text = text ~ "No Data";
  120. }
  121. ObjText_SetText(objText, text);
  122. ObjText_SetText(objSelect, text);
  123. oldPage = page;
  124. }
  125.  
  126. if(page == pageMax && itemY >= lastPageMaxCursorY){
  127. Obj_SetVisible(objText, false);
  128. Obj_SetVisible(objSelect, false);
  129. }else{
  130. Obj_SetVisible(objText, true);
  131. Obj_SetVisible(objSelect, itemY == cursorY);
  132. }
  133.  
  134. yield;
  135. }
  136. Obj_Delete(objText);
  137. Obj_Delete(objSelect);
  138. }
  139. }
  140.  
  141. task TNameEntry(replayIndex){
  142.  
  143. let strTextIn =
  144. [
  145. ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P"],
  146. ["Q","R","S","T","U","V","W","X","Y","Z",".",",",":",";","_","@"],
  147. ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p"],
  148. ["q","r","s","t","u","v","w","x","y","z","+","-","/","*","=","%"],
  149. ["0","1","2","3","4","5","6","7","8","9","0","!","?","'","\"","$"],
  150. ["(",")","{","}","[","]","<",">","&","#","|","~","^"," "," ","Done"]
  151. ];
  152.  
  153. let strTextView =
  154. [
  155. ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P"],
  156. ["Q","R","S","T","U","V","W","X","Y","Z",".",",",":",";","_","@"],
  157. ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p"],
  158. ["q","r","s","t","u","v","w","x","y","z","+","-","/","*","=","%"],
  159. ["0","1","2","3","4","5","6","7","8","9","0","!","?","'","\"","$"],
  160. ["(",")","{","}","[","]","<",">","&","#","|","~","^"," "," ","Done"]
  161. ];
  162.  
  163. let cursorX = 0;
  164. let cursorY = 0;
  165. let maxCursorX = length(strTextIn[0]);
  166. let maxCursorY = length(strTextIn);
  167.  
  168. ascent(let iY in 0..maxCursorY){
  169. ascent(let iX in 0 .. maxCursorX){
  170. TMenuItem(iX, iY);
  171. }
  172. }
  173.  
  174. let userName = "";
  175. let objName = CreateTextObject(160, 96, 28, "");
  176.  
  177. TNameCursor;
  178.  
  179. while(GetVirtualKeyState(VK_OK) != KEY_FREE || GetVirtualKeyState(VK_CANCEL) != KEY_FREE){yield;}
  180.  
  181. let frameKeyHold = 0;
  182. while(menuMode == MENU_NAME_ENTRY){
  183. if(GetVirtualKeyState(VK_OK) == KEY_PULL){
  184.  
  185. let nameLength = length(userName);
  186. if(cursorX == maxCursorX-1 && cursorY == maxCursorY-1){
  187. if(nameLength == 0){
  188. userName = "No Name";
  189. }else{
  190. SaveReplay(replayIndex, userName);
  191. SetScriptResult(RESULT_END);
  192. CloseScript(GetOwnScriptID());
  193. return;
  194. }
  195. }else if(nameLength < 8){
  196. userName = userName ~ strTextIn[cursorY][cursorX];
  197. }
  198. }
  199.  
  200. if(GetVirtualKeyState(VK_CANCEL) == KEY_PULL){
  201.  
  202. let nameLength = length(userName);
  203. if(nameLength > 0)
  204. {
  205. userName = userName[0..nameLength-1];
  206. }
  207. }
  208.  
  209. ObjText_SetText(objName, userName);
  210.  
  211. if(GetVirtualKeyState(VK_UP) == KEY_PUSH || GetVirtualKeyState(VK_UP) == KEY_HOLD){
  212. frameKeyHold++;
  213. if(GetVirtualKeyState(VK_UP) == KEY_PUSH || frameKeyHold == 20 || (frameKeyHold > 20 && (frameKeyHold % 10 == 0))){
  214. cursorY--;
  215. }
  216. }
  217. else if(GetVirtualKeyState(VK_DOWN) == KEY_PUSH || GetVirtualKeyState(VK_DOWN) == KEY_HOLD){
  218. frameKeyHold++;
  219. if(GetVirtualKeyState(VK_DOWN) == KEY_PUSH || frameKeyHold == 20 || (frameKeyHold > 20 && (frameKeyHold % 10 == 0))){
  220. cursorY++;
  221. }
  222. }
  223. else if(GetVirtualKeyState(VK_LEFT) == KEY_PUSH || GetVirtualKeyState(VK_LEFT) == KEY_HOLD){
  224. frameKeyHold++;
  225. if(GetVirtualKeyState(VK_LEFT) == KEY_PUSH || frameKeyHold == 20 || (frameKeyHold > 20 && (frameKeyHold % 10 == 0))){
  226. cursorX--;
  227. }
  228. }
  229. else if(GetVirtualKeyState(VK_RIGHT) == KEY_PUSH || GetVirtualKeyState(VK_RIGHT) == KEY_HOLD){
  230. frameKeyHold++;
  231. if(GetVirtualKeyState(VK_RIGHT) == KEY_PUSH || frameKeyHold == 20 || (frameKeyHold > 20 && (frameKeyHold % 10 == 0))){
  232. cursorX++;
  233. }
  234. }else{
  235. frameKeyHold = 0;
  236. }
  237.  
  238. if(cursorX < 0){
  239. cursorX = maxCursorX-1;
  240. }else if(cursorX >= maxCursorX){
  241. cursorX = 0;
  242. }
  243.  
  244. if(cursorY < 0){
  245. cursorY = maxCursorY-1;
  246. }else if(cursorY >= maxCursorY){
  247. cursorY = 0;
  248. }
  249.  
  250. yield;
  251. }
  252.  
  253. task TMenuItem(itemX, itemY){
  254. let objText = CreateTextObject(120 + itemX * 24, 200 + itemY * 24, 22, strTextView[itemY][itemX]);
  255. let objSelect = CreateTextObject(120 + itemX * 24, 200 + itemY * 24, 22, strTextView[itemY][itemX]);
  256. ObjRender_SetBlendType(objSelect, BLEND_ADD_RGB);
  257.  
  258. while(menuMode == MENU_NAME_ENTRY){
  259. Obj_SetVisible(objSelect, itemX == cursorX && itemY == cursorY);
  260. yield;
  261. }
  262. Obj_Delete(objText);
  263. Obj_Delete(objSelect);
  264. }
  265.  
  266. task TNameCursor{
  267. let objCursor = CreateTextObject(0, 96, 28, "_");
  268. while(menuMode == MENU_NAME_ENTRY){
  269. let nameLength = length(userName);
  270. ObjRender_SetX(objCursor, 160 + nameLength * 17);
  271. Obj_SetVisible(objCursor, nameLength < 8);
  272. yield;
  273. }
  274. Obj_Delete(objCursor);
  275. }
  276. }
  277.  
  278. function CreateTextObject(mx, my, size, text){
  279. let obj = ObjText_Create();
  280. ObjText_SetText(obj, text);
  281. ObjText_SetFontSize(obj, size);
  282. ObjText_SetFontBold(obj, true);
  283. ObjText_SetFontColorTop(obj, 100, 100, 100);
  284. ObjText_SetFontColorBottom(obj, 100, 100, 100);
  285. ObjText_SetFontBorderType(obj, BORDER_FULL);
  286. ObjText_SetFontBorderColor(obj,0, 0, 0);
  287. ObjText_SetFontBorderWidth(obj, 1);
  288. Obj_SetRenderPriorityI(obj, 10);
  289. ObjRender_SetX(obj, mx);
  290. ObjRender_SetY(obj, my);
  291. return obj;
  292. }
  293.  
  294. function CreateTextObject1(mx, my, size, text){
  295. let obj = ObjText_Create();
  296. ObjText_SetText(obj, text);
  297. ObjText_SetFontSize(obj, size);
  298. ObjText_SetFontBold(obj, true);
  299. ObjText_SetFontColorTop(obj, 255, 255, 255);
  300. ObjText_SetFontColorBottom(obj, 255, 255, 255);
  301. ObjText_SetFontBorderType(obj, BORDER_FULL);
  302. ObjText_SetFontBorderColor(obj,0, 0, 0);
  303. ObjText_SetFontBorderWidth(obj, 1);
  304. Obj_SetRenderPriorityI(obj, 10);
  305. ObjRender_SetX(obj, mx);
  306. ObjRender_SetY(obj, my);
  307. return obj;
  308. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement