Advertisement
LettuceCookie

GrappleNGo obj_player code Ver.1

Jan 14th, 2019
427
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.07 KB | None | 0 0
  1. ///obj_player complete code as of 1/14/2019
  2. ///Please note all lines of code with /// or // are comments and are there for explanatory purposes only
  3.  
  4. ///Create event
  5. //MIGHT NOT DO ACCELRARTION, FIGURE OUT LATER
  6. hspeed_ = 0;
  7. vspeed_ = 0;
  8. walkspeed = 3;
  9. walkAccel = 1.5;
  10. hFrictionGround = 0.5;
  11. hFrictionAir = 0;
  12. jumpspeed = 6;
  13. gravity_ = 0.2;
  14. hspeedFraction = 0.0;
  15. vspeedFraction = 0.0;
  16. state = pState.normal; //Guess to set default state
  17.  
  18. ropeAccelRate = -0.2;
  19. dampen = 0.99;
  20. ropeManualAccelRate = 0.08;
  21.  
  22. enum pState
  23. {
  24. normal,
  25. swing
  26. }
  27.  
  28.  
  29. ///Step event
  30. //Collision on ground
  31. grounded = (place_meeting(x, y + 1, obj_wall));
  32.  
  33.  
  34. //Moving around
  35. var _keyleft = keyboard_check(vk_left);
  36. var _keyright = keyboard_check(vk_right);
  37. var _keyup = keyboard_check(vk_up);
  38. var _keydown = keyboard_check(vk_down);
  39. var _keyjump = keyboard_check_pressed(vk_space);
  40.  
  41.  
  42. //All of the different states to cycle through
  43. switch (state)
  44. {
  45.  
  46.  
  47.  
  48. //State of normal moving around, no hook
  49. case pState.normal:
  50. {
  51. //Code for movement and jumping
  52. var dir = _keyright - _keyleft *2; //nothing
  53. hspeed_ += dir * walkAccel; //need walkAccel?
  54. var changedir = dir -1 ; //to grab number to change stuff later //minus one to reduce make it not as fast
  55.  
  56. if (dir == 0)
  57. {
  58. var hFriction = hFrictionGround;
  59.  
  60. if (!grounded)
  61. {
  62. hFriction = hFrictionAir;
  63. }
  64.  
  65. hspeed_ = Approach(hspeed_, 0, hFriction);
  66.  
  67. }
  68.  
  69. hspeed_ = clamp(hspeed_, -walkspeed, walkspeed);
  70. vspeed_ += gravity_;
  71.  
  72.  
  73. if (_keyjump) && (grounded)
  74. {
  75. grounded = false;
  76. vspeedFraction = 0;
  77. vspeed_ = -jumpspeed;
  78.  
  79. }
  80.  
  81.  
  82.  
  83. //Figure out how to transfer momentum from above actions to here (for swinging)
  84. //do the vspeed/jumpseed for velcotiy
  85. if (mouse_check_button_pressed(mb_left)) &&(!grounded) //rework later so that it can be used to grab stuff with grapple hook on ground
  86. {
  87. //Position of rope where we clicked
  88. grappleX = mouse_x;
  89. grappleY = mouse_y;
  90.  
  91. //Position of rope end (player's end)
  92. ropeX = x;
  93. ropeY = y;
  94.  
  95. //NOTE DELTE LATER: Fix carrying momentum over
  96. //Speed of swinging
  97. ropeAngleVelocity = hspeed_ + vspeed_; //0;//how quickly we swing //Carry momentum here, cannot cause rise when swinging from left
  98. ropeAngle = point_direction(grappleX, grappleY, x, y);
  99. ropeLength = point_distance(grappleX, grappleY, x, y);
  100. state = pState.swing;
  101. }
  102.  
  103.  
  104.  
  105.  
  106. } break;
  107.  
  108.  
  109. //The swing state
  110.  
  111. case pState.swing:
  112. {
  113.  
  114. //To mimic behavior of pendulum; accelration
  115. //ropeAngleAccel: how quickly player accelrates along angles of circle of pendulm
  116. //dcos = working with degrees, not radians like cos, similar to sign
  117. var ropeAngleAccel = ropeAccelRate * dcos(ropeAngle);
  118.  
  119. //Move around while swinging, reduce rope length
  120. ropeAngleAccel += (_keyright - _keyleft) * ropeManualAccelRate;
  121. //Reduce or increase rope length
  122. ropeLength += (_keydown - _keyup) * 15; //_keyjump (instead of _keyup) // *2;
  123. //Limit of how long rope can be
  124. ropeLength = max(ropeLength, 0);
  125.  
  126. //Actual speed of swinging
  127. ropeAngleVelocity += ropeAngleAccel;
  128. ropeAngle += ropeAngleVelocity;
  129.  
  130. //SLowly reduce velocity, CAN REMOVE
  131. ropeAngleVelocity *= dampen;
  132.  
  133. //Getting player to move along pendulum
  134. ropeX = grappleX + lengthdir_x(ropeLength, ropeAngle);
  135. ropeY = grappleY + lengthdir_y(ropeLength,ropeAngle);
  136.  
  137. //Set player speed, for use in collision code
  138. //FInding difference between where rope is and where we are, making speed that diff.
  139. hspeed_ = ropeX - x;
  140. vspeed_ = ropeY - y;
  141.  
  142. if (_keyjump)//(mouse_check_button_released(mb_left)) //(_keyjump)
  143. {
  144. state = pState.normal;
  145. vspeedFraction = 0;
  146. vspeed_ = -jumpspeed;
  147.  
  148.  
  149. }
  150.  
  151. } break;
  152.  
  153.  
  154. }
  155.  
  156.  
  157.  
  158. //Fraction handling (FIGURE OUT SPECIFICS)
  159. hspeed_ += hspeedFraction;
  160. vspeed_ += vspeedFraction;
  161. hspeedFraction = frac(hspeed_);
  162. vspeedFraction = frac(vspeed_);
  163. hspeed_ -= hspeedFraction;
  164. vspeed_ -= vspeedFraction;
  165.  
  166.  
  167.  
  168. //Collision code
  169. if (place_meeting (x + hspeed_, y, obj_wall))
  170. {
  171. var hStep = sign (hspeed_);
  172. hspeed_ = 0;
  173. hspeedFraction = 0;
  174.  
  175. //MAY NOT NEED BRACKETS, JUST PUT NEXT TO WHILE
  176. while (!place_meeting(x + hStep, y, obj_wall))
  177. {
  178. x += hStep;
  179. }
  180.  
  181. //what happens when it collides while swinging
  182. if (state == pState.swing)
  183. {
  184. ropeAngle = point_direction(grappleX, grappleY, x, y);
  185. ropeAngleVelocity = 0; //could try negative number for a bounce
  186. }
  187.  
  188. }
  189. x += hspeed_;
  190.  
  191.  
  192. if (place_meeting(x, y + vspeed_, obj_wall))
  193. {
  194. var vStep = sign (vspeed_);
  195. vspeed_ = 0;
  196. vspeedFraction = 0;
  197.  
  198. while (!place_meeting(x, y + vStep, obj_wall))
  199. {
  200. y += vStep;
  201. }
  202.  
  203. //what happens when it collides while swinging
  204. if (state == pState.swing)
  205. {
  206. ropeAngle = point_direction(grappleX, grappleY, x, y);
  207. ropeAngleVelocity = 0;
  208. }
  209. }
  210.  
  211. y += vspeed_;
  212.  
  213.  
  214. ///Draw event
  215. if (state == pState.swing)
  216. {
  217. //draw_sprite_ext(spr_chainlink, 0, x - 8 * xscale, y, xscale, 1, point, image_blend, image_alpha );
  218. draw_line_width(grappleX, grappleY, x, y, 2); //x, y,
  219. }
  220.  
  221.  
  222.  
  223. //Point from player position to mouse position
  224. var point = point_direction (x, y, mouse_x, mouse_y);
  225.  
  226. //Range from 0 to 2, calculate to have range from -1 to 1
  227. //0 would be false, or making sprite disappear on left (turning it off)
  228. var xscale = (mouse_x > x) * 2 - 1;
  229.  
  230.  
  231. //Draw player
  232. draw_sprite_ext(spr_player, 0, x, y, xscale, 1, 0, image_blend, image_alpha);
  233.  
  234.  
  235.  
  236. //Draw grappling hook
  237. //Doesn't need xscale, there for lighting consistency
  238. // x- 4 to correct grapple position; * xscale to keep in place on opp side
  239. draw_sprite_ext(spr_grapple, 0, x - 4 * xscale, y, 1, xscale, point, image_blend, image_alpha);
  240. //Normally GMS has a default Draw event that draws the objet (player)
  241. //THis would remove default\
  242. //Use draw_self to make player appear
  243. //Order in which code appears matters; draws it that way
  244. //The image_blend and alpha are the default blend and alpha for the sprites
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement