WWSprite.c 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. /*****************************************************************************/
  2. /* ここから */
  3. /*****************************************************************************/
  4. #include "WWSpriteP.h"
  5. #include "WonX.h"
  6. #include "etc.h"
  7. /*****************************************************************************/
  8. /* メンバ関数の定義 */
  9. /*****************************************************************************/
  10. int WWSprite_GetNumber( WWSprite s) { return (s->number); }
  11. int WWSprite_GetHorizontal(WWSprite s) { return (s->horizontal); }
  12. int WWSprite_GetVertical( WWSprite s) { return (s->vertical); }
  13. int WWSprite_GetPriority( WWSprite s) { return (s->priority); }
  14. int WWSprite_GetClipping( WWSprite s) { return (s->clipping); }
  15. WWPalette WWSprite_GetPalette( WWSprite s) { return (s->palette); }
  16. WWCharacter WWSprite_GetCharacter( WWSprite s) { return (s->character); }
  17. int WWSprite_SetNumber( WWSprite s, int n) { return (s->number = n); }
  18. int WWSprite_SetHorizontal(WWSprite s, int f) { return (s->horizontal = f); }
  19. int WWSprite_SetVertical( WWSprite s, int f) { return (s->vertical = f); }
  20. int WWSprite_SetPriority( WWSprite s, int f) { return (s->priority = f); }
  21. int WWSprite_SetClipping( WWSprite s, int f) { return (s->clipping = f); }
  22. WWPalette WWSprite_SetPalette(WWSprite s, WWPalette p)
  23. { return (s->palette = p); }
  24. WWCharacter WWSprite_SetCharacter(WWSprite s, WWCharacter c)
  25. { return (s->character = c); }
  26. int WWSprite_GetX(WWSprite sprite) { return (sprite->x); }
  27. int WWSprite_GetY(WWSprite sprite) { return (sprite->y); }
  28. int WWSprite_SetPosition(WWSprite sprite, int x, int y)
  29. {
  30. sprite->x = x;
  31. sprite->y = y;
  32. return (0);
  33. }
  34. /* スプライトのピクセル値を返す.(透明色は-1を返す) */
  35. int WWSprite_GetPixel(WWSprite sprite, int x, int y, WWDisplay display)
  36. {
  37. WWPalette palette;
  38. WWCharacter character;
  39. int pixel;
  40. palette = WWSprite_GetPalette(sprite);
  41. character = WWSprite_GetCharacter(sprite);
  42. if (WWSprite_GetHorizontal(sprite)) x = 7 - x;
  43. if (WWSprite_GetVertical( sprite)) y = 7 - y;
  44. pixel = WWCharacter_GetPixel(character, x, y, display);
  45. /* カラー対応 */
  46. switch (WWDisplay_GetColorMode(display)) {
  47. case COLOR_MODE_GRAYSCALE:
  48. /*
  49. * WonX-2.0 以降では,透明色の処理は WWDisplay クラスで行うように
  50. * 変更したので,WWPalette_GetMappedColor() が -1 を返すことは無い.
  51. */
  52. pixel = WWPalette_GetMappedColor(palette, pixel);
  53. break;
  54. case COLOR_MODE_4COLOR:
  55. case COLOR_MODE_16COLOR:
  56. case COLOR_MODE_16PACKED:
  57. pixel =
  58. ((unsigned short int)WWPalette_GetRed( palette, pixel) << 8) |
  59. ((unsigned short int)WWPalette_GetGreen(palette, pixel) << 4) |
  60. ((unsigned short int)WWPalette_GetBlue( palette, pixel) << 0);
  61. break;
  62. default:
  63. WonX_Error("WWSprite_GetPixel", "Unknown color mode.");
  64. }
  65. /* 透明色の場合には -1 を返す */
  66. if (WWDisplay_IsTransparent(display, palette, pixel))
  67. pixel = -1;
  68. return (pixel);
  69. }
  70. WWSprite WWSprite_Create(int number, int x, int y,
  71. int horizontal, int vertical,
  72. int priority, int clipping,
  73. WWPalette palette, WWCharacter character)
  74. {
  75. WWSprite sprite;
  76. sprite = (WWSprite)malloc(sizeof(_WWSprite));
  77. if (sprite == NULL)
  78. WonX_Error("WWSprite_Create", "Cannot allocate memory.");
  79. WWSprite_SetNumber(sprite, number);
  80. WWSprite_SetHorizontal(sprite, horizontal);
  81. WWSprite_SetVertical(sprite, vertical);
  82. WWSprite_SetPriority(sprite, priority);
  83. WWSprite_SetClipping(sprite, clipping);
  84. WWSprite_SetPalette(sprite, palette);
  85. WWSprite_SetCharacter(sprite, character);
  86. WWSprite_SetPosition(sprite, x, y);
  87. return (sprite);
  88. }
  89. WWSprite WWSprite_Destroy(WWSprite sprite)
  90. {
  91. if (sprite == NULL)
  92. WonX_Error("WWSprite_Destroy", "Object is not created.");
  93. free(sprite);
  94. return (NULL);
  95. }
  96. int WWSprite_PrintData(WWSprite s, FILE * f)
  97. {
  98. int n;
  99. n = WWSprite_GetNumber(s);
  100. fprintf(f, "\n");
  101. fprintf(f, "sprite[%03d] :\tnumber = %d\n", n, WWSprite_GetNumber(s));
  102. fprintf(f, "sprite[%03d] :\thorizontal = %s\n",
  103. n, wonx_true_false(WWSprite_GetHorizontal(s)));
  104. fprintf(f, "sprite[%03d] :\tvertical = %s\n",
  105. n, wonx_true_false(WWSprite_GetVertical( s)));
  106. fprintf(f, "sprite[%03d] :\tpriority = %s\n",
  107. n, wonx_true_false(WWSprite_GetPriority( s)));
  108. fprintf(f, "sprite[%03d] :\tclipping = %s\n",
  109. n, wonx_true_false(WWSprite_GetClipping( s)));
  110. fprintf(f, "sprite[%03d] :\tpalette number = %d\n",
  111. n, WWPalette_GetNumber(WWSprite_GetPalette(s)));
  112. fprintf(f, "sprite[%03d] :\tcharacter number = %d\n",
  113. n, WWCharacter_GetNumber(WWSprite_GetCharacter(s)));
  114. fprintf(f, "sprite[%03d] :\tx = %d\n", n, WWSprite_GetX(s));
  115. fprintf(f, "sprite[%03d] :\ty = %d\n", n, WWSprite_GetY(s));
  116. fflush(f);
  117. return (0);
  118. }
  119. /*****************************************************************************/
  120. /* ここまで */
  121. /*****************************************************************************/
  122. /*****************************************************************************/
  123. /* End of File. */
  124. /*****************************************************************************/