Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. #include "pendulum.h"
  2. #include "../enemy.h"
  3. #include "../game.h"
  4. #include "../hero.h"
  5. #include <stdlib.h>
  6. #include <math.h>
  7.  
  8. void createPendulum(int x, int y, int side)
  9. {
  10.         int i;
  11.         for (i = 0; i < MAX_ENEMIES; i++) {
  12.                 if (enemies[i] == NULL) {
  13.                         Enemy* e = malloc(sizeof *e);
  14.                         Pendulum* p = malloc(sizeof *p);
  15.                         p->id = i;
  16.                        
  17.                         p->x = x;
  18.                         p->y = y;
  19.                        
  20.                         p->angle = 0;
  21.                         p->rotCounter = 180;
  22.                         if (side == 1) {
  23.                                 p->rotCounter += 180;
  24.                         }
  25.                        
  26.                         p->mask.circle = 1;
  27.                         p->mask.unused = 0;
  28.                         p->mask.w = 24;
  29.                         p->mask.x = 0;
  30.                         p->mask.y = 0;
  31.                        
  32.                         e->data = p;
  33.                         e->enemyStep = pendulumStep;
  34.                         e->enemyDraw = pendulumDraw;
  35.                         e->type = 22;
  36.                        
  37.                         enemies[i] = e;
  38.                         i = MAX_ENEMIES;
  39.                 }
  40.         }
  41. }
  42.  
  43. void pendulumStep(Pendulum* p)
  44. {
  45.         p->rotCounter += 2;
  46.         if (p->rotCounter >= 360) {
  47.                 p->rotCounter -= 360;
  48.         }
  49.        
  50.         p->angle += (3.15 * cos(p->rotCounter * 3.14159 / 180));
  51.        
  52.         //Update Mask  
  53.         p->mask.x = p->x + (96 * cos((p->angle + 90) * 3.14159 / 180));
  54.         p->mask.y = p->y + (96 * sin((p->angle + 90) * 3.14159 / 180));
  55.        
  56.         //Hit Player
  57.         if (checkCollision(p->mask, getHeroMask())) {
  58.                 heroHit(15, p->mask.x);
  59.         }
  60. }
  61.  
  62. void pendulumDraw(Pendulum* p)
  63. {
  64.         int drawX = p->x,
  65.                 drawY = p->y;
  66.                
  67.         int len[] = {0, 16, 32, 48, 66, 96};
  68.         int cropX[] = {64, 64, 64, 64, 0, 576};
  69.         int cropY[] = {128, 128, 128, 128, 128, 64};
  70.        
  71.         int i;
  72.         for (i = 0; i < 6; i++) {
  73.                 drawX = p->x + (len[i] * cos((p->angle + 90) * 3.14159 / 180));
  74.                 drawY = p->y + (len[i] * sin((p->angle + 90) * 3.14159 / 180));
  75.                
  76.                 PHL_DrawSurfacePart(drawX- 32, drawY - 32, cropX[i], cropY[i], 64, 64, images[imgMisc32]);
  77.         }
  78. }