ELEC2645 (2018/19) / Mbed 2 deprecated el17arm

Dependencies:   mbed

Revision:
31:ed5f7f15a1ed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Miner/Sprites.cpp	Wed Apr 10 16:20:28 2019 +0000
@@ -0,0 +1,144 @@
+#include "Sprites.h"
+
+Sprites::Sprites()
+{
+    _enem.eflag[0] = false;
+    _j_flag = false;
+    _k.key[0] = false;
+    _k.key[1] = false;
+    _k.key[2] = false;
+    _k.key[3] = false;
+    _k.key[4] = false;
+}
+
+Sprites::~Sprites()
+{
+}
+
+void Sprites::miner_init(int x, int y)
+{
+    _x = x;
+    _y = y;
+}
+
+Vector2D Sprites::get_pos()
+{
+    Vector2D p = {_x,_y};
+    return p;
+}
+
+void Sprites::miner_draw(N5110 &lcd)
+{
+    if (_direction == 1) {
+        lcd.drawSprite(_x,_y,8,3,(int *)miner_right);
+    }
+    if (_direction == 0) {
+        lcd.drawSprite(_x,_y,8,3,(int *)miner_left);
+    }
+}
+void Sprites::miner_land(N5110 &lcd)
+{
+    _jump = (lcd.getPixel(_x+4,_y+8) || lcd.getPixel(_x-1,_y+8));
+
+    _gravity = !lcd.getPixel(_x,_y+8) && !lcd.getPixel(_x+2, _y+8);
+}
+
+void Sprites::miner_move(Direction d, N5110 &lcd)
+{
+    if (d==E || d==NE) {
+        _x++;
+        _direction = 1; //chooses right facing sprite
+    }
+    if (d==W || d==NW) {
+        _x--;
+        _direction = 0; //chooses left facing sprite
+    }
+    if(_x > 81) {
+        _x=WIDTH-3;
+    }
+    if(_x < 0) {
+        _x=0;
+    }
+}
+
+void Sprites::miner_jump(N5110 &lcd, Gamepad &pad)
+{   
+    if(pad.check_event(Gamepad::A_PRESSED) && _jump == true) {
+        _j_flag = true;
+    }
+    if(_j_flag == true) {
+        _y--;
+        _j_counter++;
+    }
+    if(_j_counter > 7) {
+        _j_flag = false;
+    }
+    if(_j_flag == false) {
+        _j_counter = 0;
+    }
+    //printf("counter %i \n", _j_counter);
+    //printf("flag %d \n", _j_flag);
+    //printf("jumo %d \n", _jump);
+    
+}
+
+void Sprites::miner_gravity(N5110 &lcd)
+{
+    if(_gravity == true) {
+        _y++;
+    }
+}
+
+void Sprites::enemy_init(int i, int x, int y, int d)
+{
+    _enem.ex[i] = x;
+    _enem.ey[i] = y;
+    _enem.distance[i] = d;
+}
+
+void Sprites::enemy_move(int i, double v, N5110 &lcd)
+{
+    lcd.drawSprite(_enem.ex[i],_enem.ey[i],5,3, (int *) enemy);
+
+    if (_enem.eflag[i] == false) {
+        _enem.ex[i] = _enem.ex[i] + v;
+        _enem.counter[i]++;
+    }
+    if(_enem.counter[i] == _enem.distance[i]) {
+        _enem.eflag[i] = true;
+    }
+    if (_enem.eflag[i] == true) {
+        _enem.ex[i] = _enem.ex[i] - v;
+        _enem.counter[i]--;
+    }
+    if (_enem.counter[i] == 0) {
+        _enem.eflag[i] = false;
+    }
+}
+
+bool Sprites::enemy_collision(int i)
+{
+    Vector2D p = get_pos();
+
+    if (p.x < _enem.ex[i] + 2 && p.x + 2 > _enem.ex[i] && p.y < _enem.ey[i] + 4
+            && p.y + 9 > _enem.ey[i]) {
+        return true;
+    } else {
+        return false;
+    }
+}
+
+void Sprites::key_collect(int k, int x, int y, N5110 &lcd, Gamepad &pad)
+{   
+    if(_k.key[k] == false) {
+        lcd.drawSprite(x,y,3,4,(int *)key);
+    }
+
+    if ((lcd.getPixel(x-1,y+2) || lcd.getPixel(x+2,y-1) || lcd.getPixel(x+4,y+1)) &&
+        _k.key[k] == false) {
+        _keys++;
+        pad.tone(850,0.1);
+        lcd.drawSprite(x,y,3,4,(int *)key_collected);
+        _k.key[k]= true;
+    }
+}
\ No newline at end of file