123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 |
- /*****************************************************************************/
- /* ここから */
- /*****************************************************************************/
- #include "WWScreenP.h"
- #include "WonX.h"
- /*****************************************************************************/
- /* メンバ関数の定義 */
- /*****************************************************************************/
- /*===========================================================================*/
- /* プライベートなもの */
- /*===========================================================================*/
- static int WWScreenCharacter_GetHorizontal(WWScreenCharacter sc)
- { return (sc->horizontal); }
- static int WWScreenCharacter_GetVertical(WWScreenCharacter sc)
- { return (sc->vertical); }
- static WWPalette WWScreenCharacter_GetPalette(WWScreenCharacter sc)
- { return (sc->palette); }
- static WWCharacter WWScreenCharacter_GetCharacter(WWScreenCharacter sc)
- { return (sc->character); }
- static int WWScreenCharacter_SetHorizontal(WWScreenCharacter sc, int f)
- { return (sc->horizontal = f); }
- static int WWScreenCharacter_SetVertical(WWScreenCharacter sc, int f)
- { return (sc->vertical = f); }
- static WWPalette WWScreenCharacter_SetPalette(WWScreenCharacter sc,
- WWPalette palette)
- { return (sc->palette = palette); }
- static WWCharacter WWScreenCharacter_SetCharacter(WWScreenCharacter sc,
- WWCharacter c)
- { return (sc->character = c); }
- static WWScreenCharacter WWScreenCharacter_Create(int horizontal, int vertical,
- WWPalette palette,
- WWCharacter character)
- {
- WWScreenCharacter screen_character;
- screen_character = (WWScreenCharacter)malloc(sizeof(_WWScreenCharacter));
- if (screen_character == NULL)
- WonX_Error("WWScreenCharacter", "Cannot allocate memory.");
- WWScreenCharacter_SetHorizontal(screen_character, horizontal);
- WWScreenCharacter_SetVertical(screen_character, vertical);
- WWScreenCharacter_SetPalette(screen_character, palette);
- WWScreenCharacter_SetCharacter(screen_character, character);
- return (screen_character);
- }
- static WWScreenCharacter WWScreenCharacter_Destroy(WWScreenCharacter
- screen_character)
- {
- if (screen_character == NULL) return (NULL);
- free(screen_character);
- return (NULL);
- }
- static WWScreenCharacter WWScreen_GetScreenCharacter(WWScreen s, int x, int y)
- {
- return (s->screen_characters[y * WWScreen_GetWidth(s) + x]);
- }
- static WWScreenCharacter WWScreen_SetScreenCharacter(WWScreen s, int x, int y,
- WWScreenCharacter sc)
- {
- return (s->screen_characters[y * WWScreen_GetWidth(s) + x] = sc);
- }
- /*===========================================================================*/
- /* パブリックなもの */
- /*===========================================================================*/
- int WWScreen_GetHorizontal(WWScreen s, int x, int y)
- {
- WWScreenCharacter sc;
- sc = WWScreen_GetScreenCharacter(s, x, y);
- return (WWScreenCharacter_GetHorizontal(sc));
- }
- int WWScreen_GetVertical(WWScreen s, int x, int y)
- {
- WWScreenCharacter sc;
- sc = WWScreen_GetScreenCharacter(s, x, y);
- return (WWScreenCharacter_GetVertical(sc));
- }
- WWPalette WWScreen_GetPalette(WWScreen s, int x, int y)
- {
- WWScreenCharacter sc;
- sc = WWScreen_GetScreenCharacter(s, x, y);
- return (WWScreenCharacter_GetPalette(sc));
- }
- WWCharacter WWScreen_GetCharacter(WWScreen s, int x, int y)
- {
- WWScreenCharacter sc;
- sc = WWScreen_GetScreenCharacter(s, x, y);
- return (WWScreenCharacter_GetCharacter(sc));
- }
- int WWScreen_SetHorizontal(WWScreen s, int x, int y, int f)
- {
- WWScreenCharacter sc;
- sc = WWScreen_GetScreenCharacter(s, x, y);
- return (WWScreenCharacter_SetHorizontal(sc, f));
- }
- int WWScreen_SetVertical(WWScreen s, int x, int y, int f)
- {
- WWScreenCharacter sc;
- sc = WWScreen_GetScreenCharacter(s, x, y);
- return (WWScreenCharacter_SetVertical(sc, f));
- }
- WWPalette WWScreen_SetPalette(WWScreen s, int x, int y, WWPalette palette)
- {
- WWScreenCharacter sc;
- sc = WWScreen_GetScreenCharacter(s, x, y);
- return (WWScreenCharacter_SetPalette(sc, palette));
- }
- WWCharacter WWScreen_SetCharacter(WWScreen s, int x, int y, WWCharacter c)
- {
- WWScreenCharacter sc;
- sc = WWScreen_GetScreenCharacter(s, x, y);
- return (WWScreenCharacter_SetCharacter(sc, c));
- }
- int WWScreen_GetNumber(WWScreen s) { return (s->number); }
- int WWScreen_GetWidth( WWScreen s) { return (s->width ); }
- int WWScreen_GetHeight(WWScreen s) { return (s->height); }
- int WWScreen_GetRollX( WWScreen s) { return (s->roll_x); }
- int WWScreen_GetRollY( WWScreen s) { return (s->roll_y); }
- int WWScreen_GetEnable(WWScreen s) { return (s->enable); }
- int WWScreen_GetMode( WWScreen s) { return (s->mode ); }
- int WWScreen_GetDrawX( WWScreen s) { return (s->draw_x ); }
- int WWScreen_GetDrawY( WWScreen s) { return (s->draw_y ); }
- int WWScreen_GetDrawWidth( WWScreen s) { return (s->draw_width ); }
- int WWScreen_GetDrawHeight(WWScreen s) { return (s->draw_height); }
- int WWScreen_SetNumber(WWScreen s, int n) { return (s->number = n); }
- int WWScreen_SetWidth( WWScreen s, int n) { return (s->width = n); }
- int WWScreen_SetHeight(WWScreen s, int n) { return (s->height = n); }
- int WWScreen_SetRollX( WWScreen s, int r) { return (s->roll_x = r); }
- int WWScreen_SetRollY( WWScreen s, int r) { return (s->roll_y = r); }
- int WWScreen_SetEnable(WWScreen s, int n) { return (s->enable = n); }
- int WWScreen_SetMode( WWScreen s, int n) { return (s->mode = n); }
- int WWScreen_SetDrawX( WWScreen s, int n) { return (s->draw_x = n); }
- int WWScreen_SetDrawY( WWScreen s, int n) { return (s->draw_y = n); }
- int WWScreen_SetDrawWidth( WWScreen s, int n) { return (s->draw_width = n); }
- int WWScreen_SetDrawHeight(WWScreen s, int n) { return (s->draw_height = n); }
- /* カラーマップの色(0~7)を返す(透明色は-1を返す) */
- int WWScreen_GetPixel(WWScreen screen, int x, int y, WWCursor cursor)
- {
- int cx, cy, px, py;
- int pixel;
- WWCharacter character;
- WWPalette palette;
- /* x,y 座標が範囲外のときは,ロールオーバーする */
- /* (スクリーンの端と端は,つながっている) */
- while (x < 0) x += WWScreen_GetWidth( screen) * 8;
- while (y < 0) y += WWScreen_GetHeight(screen) * 8;
- x = x % (WWScreen_GetWidth( screen) * 8);
- y = y % (WWScreen_GetHeight(screen) * 8);
- cx = x / 8; cy = y / 8;
- px = x % 8; py = y % 8;
- if (WWScreen_GetHorizontal(screen, cx, cy)) px = 7 - px;
- if (WWScreen_GetVertical( screen, cx, cy)) py = 7 - py;
- character = WWScreen_GetCharacter(screen, cx, cy);
- /* カーソル表示の処理 */
- palette = WWScreen_GetPalette(screen, cx, cy);
- if (cursor != NULL) {
- if ( WWCursor_IsON(cursor) &&
- (cx >= WWCursor_GetX(cursor)) &&
- (cx <= WWCursor_GetX(cursor) + WWCursor_GetWidth( cursor) - 1) &&
- (cy >= WWCursor_GetY(cursor)) &&
- (cy <= WWCursor_GetY(cursor) + WWCursor_GetHeight(cursor) - 1) ) {
- palette = WWCursor_GetPalette(cursor);
- }
- }
- pixel = WWCharacter_GetPixel(character, px, py);
- pixel = WWPalette_GetMappedColor(palette, pixel); /*透明色は-1が返ってくる*/
- return (pixel);
- }
- WWScreen WWScreen_Create(int number,
- int width, int height,
- WWPalette initial_palette,
- WWCharacter initial_character,
- int draw_x, int draw_y,
- int draw_width, int draw_height)
- {
- WWScreen screen;
- WWScreenCharacter sc;
- int x, y;
- screen = (WWScreen)malloc(sizeof(_WWScreen));
- if (screen == NULL)
- WonX_Error("WWScreen_Create", "Cannot allocate memory.");
- WWScreen_SetNumber(screen, number);
- WWScreen_SetWidth( screen, width);
- WWScreen_SetHeight(screen, height);
- WWScreen_SetRollX( screen, 0);
- WWScreen_SetRollY( screen, 0);
- WWScreen_SetEnable(screen, 1);
- WWScreen_SetMode( screen, WW_SCREEN_DRAW_ALL);
- WWScreen_SetDrawX( screen, draw_x);
- WWScreen_SetDrawY( screen, draw_y);
- WWScreen_SetDrawWidth( screen, draw_width);
- WWScreen_SetDrawHeight(screen, draw_height);
- screen->screen_characters =
- (WWScreenCharacter *)malloc(sizeof(WWScreenCharacter) *
- screen->width * screen->height);
- for (y = 0; y < screen->height; y++) {
- for (x = 0; x < screen->width; x++) {
- sc = WWScreenCharacter_Create(0, 0, initial_palette, initial_character);
- WWScreen_SetScreenCharacter(screen, x, y, sc);
- }
- }
- return (screen);
- }
- WWScreen WWScreen_Destroy(WWScreen screen)
- {
- int x, y;
- WWScreenCharacter sc;
- if (screen == NULL) return (NULL);
- for (y = 0; y < screen->height; y++) {
- for (x = 0; x < screen->width; x++) {
- sc = WWScreen_GetScreenCharacter(screen, x, y);
- WWScreen_SetScreenCharacter(screen, x, y, WWScreenCharacter_Destroy(sc));
- }
- }
- if (screen->screen_characters) free(screen->screen_characters);
- free(screen);
- return (NULL);
- }
- /*****************************************************************************/
- /* ここまで */
- /*****************************************************************************/
- /*****************************************************************************/
- /* End of File. */
- /*****************************************************************************/
|