1
0

HexAI.gml 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. function hex_ai()
  2. {
  3. switch(state)
  4. {
  5. case "IDLE":
  6. if oMain._up
  7. roll_init();
  8. break;
  9. case "ROLL":
  10. rebounce_timer--;
  11. roll_spd += roll_acc;
  12. var _roll_spd;
  13. if abs(roll_angle + roll_spd) >= 60
  14. _roll_spd = (60 - abs(roll_angle)) * sign(roll_angle);
  15. else if sign(roll_angle) == -sign(roll_angle + roll_spd)
  16. _roll_spd = -roll_angle;
  17. else
  18. _roll_spd = roll_spd;
  19. roll_angle += _roll_spd;
  20. image_angle += _roll_spd;
  21. var _current_angle = point_direction(pivot_x, pivot_y, x, y);
  22. var _new_angle = _current_angle + _roll_spd;
  23. x = pivot_x + lengthdir_x(side_len, _new_angle);
  24. y = pivot_y + lengthdir_y(side_len, _new_angle);
  25. if collision_line(x, y, x + 128 * sign(-roll_spd), y, oParentSolid, false, false) != noone
  26. && rebounce_timer <= 0
  27. {
  28. roll_acc *= -1;
  29. roll_spd *= -1;
  30. rebounce_timer = 60;
  31. //state = "RETRACE";
  32. }
  33. else if abs(roll_angle) >= 60 || roll_angle == 0
  34. {
  35. roll_angle = 0;
  36. var _base_angle = (roll_spd > 0) ? 240 : 300;
  37. pivot_x = x + lengthdir_x(side_len, _base_angle);
  38. pivot_y = y + lengthdir_y(side_len, _base_angle);
  39. }
  40. break;
  41. case "RETRACE":
  42. //roll_spd += roll_acc;
  43. break;
  44. }
  45. }
  46. function roll_init()
  47. {
  48. state = "ROLL";
  49. roll_spd = 5;
  50. roll_acc = -0.1;
  51. var _base_angle = (roll_spd > 0) ? 240 : 300;
  52. pivot_x = x + lengthdir_x(side_len, _base_angle);
  53. pivot_y = y + lengthdir_y(side_len, _base_angle);
  54. }