tr_sprite.c 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. #include "eruta.h"
  2. #include "toruby.h"
  3. #include "rh.h"
  4. #include "state.h"
  5. #include "image.h"
  6. #include "fifi.h"
  7. #include "store.h"
  8. #include "scegra.h"
  9. #include "sound.h"
  10. #include "spritestate.h"
  11. #include <mruby/hash.h>
  12. #include <mruby/class.h>
  13. #include <mruby/data.h>
  14. #include <mruby/array.h>
  15. #include "tr_macro.h"
  16. #include "tr_sprite.h"
  17. static mrb_value tr_new_sprite(mrb_state * mrb, mrb_value self) {
  18. Sprite * sprite = NULL;
  19. State * state = state_get();
  20. (void) self;
  21. return mrb_fixnum_value(state_new_sprite_id(state));
  22. }
  23. static mrb_value tr_sprite(mrb_state * mrb, mrb_value self) {
  24. Sprite * sprite = NULL;
  25. State * state = state_get();
  26. mrb_int index = -1;
  27. (void) self;
  28. mrb_get_args(mrb, "i", &index);
  29. if (index < 0) {
  30. return mrb_nil_value();
  31. }
  32. sprite = state_sprite(state, index);
  33. if(!sprite) {
  34. return mrb_nil_value();
  35. }
  36. return mrb_fixnum_value(index);
  37. }
  38. static mrb_value tr_sprite_load_builtin(mrb_state * mrb, mrb_value self) {
  39. Sprite * sprite = NULL;
  40. State * state = state_get();
  41. char * vpath;
  42. int result;
  43. mrb_int rindex = -1;
  44. mrb_int rlayer = -1;
  45. mrb_int rlayout= SPRITE_LOAD_ULPCSS_NORMAL;
  46. (void) self;
  47. mrb_value rvpath = mrb_nil_value();
  48. mrb_get_args(mrb, "iiS|i", &rindex, &rlayer, &rvpath, &rlayout);
  49. if ((rindex<0) || (rlayer<0)) {
  50. return mrb_nil_value();
  51. }
  52. vpath = mrb_str_to_cstr(mrb, rvpath);
  53. result =
  54. state_sprite_load_builtin(state, rindex, rlayer, vpath, rlayout);
  55. return mrb_fixnum_value(result);
  56. }
  57. TR_WRAP_NOARG_INT(tr_sprite_get_unused_id, state_get_unused_sprite_id);
  58. TR_SPRITE_II_INT(tr_sprite_action_index_for, sprite_action_index_for);
  59. TR_WRAP_I_INT(tr_delete_sprite, state_delete_sprite);
  60. /** Initialize mruby bindings to sprite functionality.
  61. * Eru is the parent module, which is normally named "Eruta" on the
  62. * ruby side. */
  63. int tr_sprite_init(mrb_state * mrb, struct RClass * eru) {
  64. struct RClass *spr;
  65. struct RClass *lay;
  66. struct RClass *sta;
  67. /* Sprite class/module and class/module methods. */
  68. spr = mrb_define_class_under(mrb, eru, "Sprite" , mrb->object_class);
  69. /* Layer sub- class/module and class/module methods. */
  70. lay = mrb_define_module_under(mrb, spr, "Layer");
  71. sta = mrb_define_module_under(mrb, spr, "State");
  72. /*
  73. TR_METHOD_ARGC(mrb, krn, "sprite_getornew", tr_getornewsprite, 1);
  74. TR_METHOD_ARGC(mrb, krn, "sprite_new", tr_newsprite, 1);
  75. TR_METHOD_ARGC(mrb, krn, "sprite_get", tr_sprite, 1);
  76. TR_METHOD_ARGC(mrb, krn, "sprite_loadulpcss", tr_sprite_loadulpcss, 3);
  77. TR_METHOD_ARGC(mrb, krn, "sprite_tint_rgba", tr_sprite_tint, 6);
  78. */
  79. /* Direction constants of a sprite. */
  80. TR_CONST_INT(mrb, spr, "NO_DIRECTION", SPRITE_NO_DIRECTION);
  81. TR_CONST_INT(mrb, spr, "SOUTH", SPRITE_SOUTH);
  82. TR_CONST_INT(mrb, spr, "EAST", SPRITE_EAST);
  83. TR_CONST_INT(mrb, spr, "NORTH", SPRITE_NORTH);
  84. TR_CONST_INT(mrb, spr, "WEST", SPRITE_WEST);
  85. TR_CONST_INT(mrb, spr, "ALL_DIRECTIONS", SPRITE_ALL);
  86. /* Action constants of a sprite */
  87. TR_CONST_INT_EASY(mrb, spr, SPRITE_, CAST);
  88. TR_CONST_INT_EASY(mrb, spr, SPRITE_, STAB);
  89. TR_CONST_INT_EASY(mrb, spr, SPRITE_, WALK);
  90. TR_CONST_INT_EASY(mrb, spr, SPRITE_, SLASH);
  91. TR_CONST_INT_EASY(mrb, spr, SPRITE_, SHOOT);
  92. TR_CONST_INT_EASY(mrb, spr, SPRITE_, DOWN);
  93. TR_CONST_INT_EASY(mrb, spr, SPRITE_, RUN);
  94. TR_CONST_INT_EASY(mrb, spr, SPRITE_, HURT);
  95. TR_CONST_INT_EASY(mrb, spr, SPRITE_, STAND);
  96. TR_CONST_INT_EASY(mrb, spr, SPRITE_, DEFEND);
  97. /* Sprite layer suggested uses. */
  98. TR_CONST_INT_EASY(mrb, lay, SPRITELAYER_, BEHINDBODY);
  99. TR_CONST_INT_EASY(mrb, lay, SPRITELAYER_, BODY);
  100. TR_CONST_INT_EASY(mrb, lay, SPRITELAYER_, HEAD);
  101. TR_CONST_INT_EASY(mrb, lay, SPRITELAYER_, EYES);
  102. TR_CONST_INT_EASY(mrb, lay, SPRITELAYER_, EARS);
  103. TR_CONST_INT_EASY(mrb, lay, SPRITELAYER_, HAIR);
  104. TR_CONST_INT_EASY(mrb, lay, SPRITELAYER_, HANDS);
  105. TR_CONST_INT_EASY(mrb, lay, SPRITELAYER_, FEET);
  106. TR_CONST_INT_EASY(mrb, lay, SPRITELAYER_, LEGS);
  107. TR_CONST_INT_EASY(mrb, lay, SPRITELAYER_, TORSO);
  108. TR_CONST_INT_EASY(mrb, lay, SPRITELAYER_, BELT);
  109. TR_CONST_INT_EASY(mrb, lay, SPRITELAYER_, ACCESSORY);
  110. TR_CONST_INT_EASY(mrb, lay, SPRITELAYER_, BLADE);
  111. TR_CONST_INT_EASY(mrb, lay, SPRITELAYER_, KNIFE);
  112. TR_CONST_INT_EASY(mrb, lay, SPRITELAYER_, CLAW);
  113. TR_CONST_INT_EASY(mrb, lay, SPRITELAYER_, STAFF);
  114. TR_CONST_INT_EASY(mrb, lay, SPRITELAYER_, GUN);
  115. TR_CONST_INT_EASY(mrb, lay, SPRITELAYER_, CANNON);
  116. TR_CONST_INT_EASY(mrb, lay, SPRITELAYER_, POLEARM);
  117. TR_CONST_INT_EASY(mrb, lay, SPRITELAYER_, BOW);
  118. /* Sprite state constants. */
  119. TR_CONST_INT_EASY(mrb, sta, SPRITESTATE_, ACTION_LOOP);
  120. TR_CONST_INT_EASY(mrb, sta, SPRITESTATE_, ACTION_ONESHOT);
  121. TR_CONST_INT_EASY(mrb, sta, SPRITESTATE_, ACTION_STOP);
  122. TR_CONST_INT_EASY(mrb, sta, SPRITESTATE_, ACTION_ONESTOP);
  123. TR_CONST_INT_EASY(mrb, sta, SPRITESTATE_, ACTION_MAX);
  124. TR_CONST_INT_EASY(mrb, sta, SPRITESTATE_, LAYER_MAX);
  125. /* Built in sprite layout constants. */
  126. TR_CONST_INT_EASY(mrb, spr, SPRITE_, LOAD_ULPCSS_NORMAL);
  127. TR_CONST_INT_EASY(mrb, spr, SPRITE_, LOAD_ULPCSS_OVERSIZED_STAB);
  128. TR_CONST_INT_EASY(mrb, spr, SPRITE_, LOAD_ULPCSS_OVERSIZED_SLASH);
  129. TR_CLASS_METHOD_ARGC(mrb , spr, "sprite_new" , tr_new_sprite, 1);
  130. TR_CLASS_METHOD_ARGC(mrb , spr, "get" , tr_sprite, 1);
  131. TR_CLASS_METHOD_OPTARG(mrb, spr, "load_builtin" , tr_sprite_load_builtin, 3, 1);
  132. TR_CLASS_METHOD_ARGC(mrb , spr, "get_unused_id" , tr_sprite_get_unused_id, 1);
  133. TR_CLASS_METHOD_ARGC(mrb , spr, "action_id_for" , tr_sprite_action_index_for, 3);
  134. TR_CLASS_METHOD_ARGC(mrb , spr, "delete" , tr_delete_sprite, 1);
  135. return 0;
  136. }