← index
JavaScript.Projects/source/apps/WebAssembly_Ports/invaders/ship.c
Source: JavaScript.Projects/source/apps/WebAssembly_Ports/invaders/ship.c
#include "ship.h"

void ship_init(struct Ship *s) {
    s->w = 25;
    s->h = 25;
    s->x = 640/2-(s->w/2);
    s->y = 360-(s->h/2);
}

void ship_draw(struct Ship *s) {
    SDL_SetRenderDrawColor(renderer, 0, 255, 0, 255); 
    SDL_RenderDrawLine(renderer, s->x + 12, s->y + 2, s->x + 12, s->y + 2);  
    SDL_RenderDrawLine(renderer, s->x + 10, s->y + 4, s->x + 14, s->y + 4);  
    SDL_RenderDrawLine(renderer, s->x + 8, s->y + 6, s->x + 16, s->y + 6);   
    SDL_RenderDrawLine(renderer, s->x + 6, s->y + 8, s->x + 18, s->y + 8);   
    SDL_RenderDrawLine(renderer, s->x + 4, s->y + 10, s->x + 20, s->y + 10); 
    SDL_RenderDrawLine(renderer, s->x + 2, s->y + 12, s->x + 6, s->y + 12);   
    SDL_RenderDrawLine(renderer, s->x + 18, s->y + 12, s->x + 22, s->y + 12); 
    SDL_RenderDrawLine(renderer, s->x + 1, s->y + 14, s->x + 5, s->y + 14);   
    SDL_RenderDrawLine(renderer, s->x + 19, s->y + 14, s->x + 23, s->y + 14); 
    SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); 
    SDL_RenderDrawPoint(renderer, s->x + 11, s->y + 6);   
    SDL_RenderDrawPoint(renderer, s->x + 13, s->y + 6);   
    SDL_RenderDrawLine(renderer, s->x + 10, s->y + 8, s->x + 14, s->y + 8);  
    SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); 
    SDL_RenderDrawPoint(renderer, s->x + 8, s->y + 16);   
    SDL_RenderDrawPoint(renderer, s->x + 12, s->y + 16);  
    SDL_RenderDrawPoint(renderer, s->x + 16, s->y + 16);  
    SDL_SetRenderDrawColor(renderer, 128, 128, 128, 255); 
    SDL_RenderDrawPoint(renderer, s->x + 3, s->y + 10);   
    SDL_RenderDrawPoint(renderer, s->x + 21, s->y + 10);  
    SDL_SetRenderDrawColor(renderer, 0, 255, 0, 255); 
    SDL_RenderDrawLine(renderer, s->x + 6, s->y + 10, s->x + 6, s->y + 12);   
    SDL_RenderDrawLine(renderer, s->x + 18, s->y + 10, s->x + 18, s->y + 12); 
    SDL_SetRenderDrawColor(renderer, 255, 255, 0, 255); 
    SDL_RenderDrawPoint(renderer, s->x + 12, s->y + 3); 
}

void ship_left(struct Ship *s) {
    if(s->x > 0)
        s->x -= 3; 
    ship_clamp(s);
}

void ship_right(struct Ship *s) {
    if(s->x < 640-(s->w/2))
        s->x += 3; 
    ship_clamp(s);
}

void ship_clamp(struct Ship *s) {
    if(s->x < 0)
        s->x = 0;
    if(s->x > 640-s->w)
        s->x = 640-s->w;
}

int ship_inrect(struct Ship *s, int x, int y) {
    SDL_Point p = {x, y};
    SDL_Rect rc = {s->x, s->y, s->w, s->h};
    if(SDL_PointInRect(&p, &rc)) {
        return 1;
    }
    return 0;
}