ELEC2645 (2018/19) / Mbed 2 deprecated el17st

Dependencies:   mbed FATFileSystem

CaMove/CaMove.cpp

Committer:
rottenegg
Date:
2019-04-18
Revision:
4:34bf3587cf42
Child:
5:860087ff295e

File content as of revision 4:34bf3587cf42:

#include "CaMove.h"
#include "FilePaths.h"

CaMove::CaMove(PinName pin) : _check(pin) {
    _check.mode(PullDown);
    _check.rise(callback(this,&CaMove::intercheck));
    _h = 40;
    _v = 20;
    _itr = 0;
    Faceing = Lt;
    Trig = false;
};

CaMove::~CaMove() {
};

void CaMove::CMmove(N5110 &lcd, AnalogIn &hoz, AnalogIn &ver) {
    if (hoz > 0.6f && lcd.getPixel((_h-1),(_v+7)) == 0) {
        _h = _h - 2;
        Faceing = Lt;
    }
    if (hoz < 0.4f && lcd.getPixel((_h+10),(_v+7)) == 0) {
        _h = _h + 2;
        Faceing = Rt;
    }
    if (ver > 0.6f && lcd.getPixel((_h+5),(_v-1)) == 0) {
        _v = _v - 2;
        Faceing = Fd;
    }
    if (ver < 0.4f && lcd.getPixel((_h+5),(_v+14)) == 0) {
        _v = _v + 2;
        Faceing = Bd;
    }
    if (_itr == 3) {
        _itr = -1;
    }
    _itr++;
    switch (Faceing) {
            case Lt:
            Bitmap::renderBMP(L[_itr],lcd,_h,_v);
            break;
            
            case Rt:
            Bitmap::renderBMP(R[_itr],lcd,_h,_v);
            break;
            
            case Fd:
            Bitmap::renderBMP(F[_itr],lcd,_h,_v);
            break;
            
            case Bd:
            Bitmap::renderBMP(B[_itr],lcd,_h,_v);
            break;
        }
};


bool CaMove::inscreen() {
    if (_h >= 84 || (_h + 9) <= 0 || _v <= 0 || (_v + 13) >= 48) {
        return true;
    } else {
        return false;
    }
};

void CaMove::set_region(int xmin, int ymax, int xl, int yl) {
    intereact.push_back((xmin + xl));
    intereact.push_back(xmin);
    intereact.push_back(ymax);
    intereact.push_back((ymax - yl));
};

void CaMove::delete_regions() {
    intereact.clear();
};

void CaMove::intercheck() {
    Trig = false;
    if (intereact.size() > 0) {
        for(int Vvalue = 0; Vvalue < intereact.size(); Vvalue = Vvalue +4) {
            //if Statements
            bool LowerH = (_h - 1) <= intereact[Vvalue] && (_h-1) >= intereact[Vvalue + 1];
            bool UpperH = (_h + 10) <= intereact[Vvalue] && (_h + 10) >= intereact[Vvalue + 1];
            bool MidH = (_h + 5) <= intereact[Vvalue] && (_h + 5) >= intereact[Vvalue + 1];
            bool LowerV = (_v - 1) >= intereact[Vvalue + 3] && (_v - 1) <= intereact[Vvalue + 2];
            bool UpperV = (_v+14) >= intereact[Vvalue + 3] && (_v + 14) <= intereact[Vvalue + 2];
            bool MidV = (_v+7) >= intereact[Vvalue + 3] && (_v + 7) <= intereact[Vvalue + 2];
            
            switch (Faceing) {
                case Lt:           //L
                    if (LowerH && MidV) {
                        Trig = true;
                        tregion = Vvalue / 4;
                    };
                break;
                
                case Rt:          //R
                    if (UpperH && MidV) {
                        Trig = true;
                        tregion = Vvalue / 4;
                    }
                break;
                
                case Fd:         //F
                    if (MidH && LowerV) {
                        Trig = true;
                        tregion = Vvalue / 4;
                    }
                break;
                
                case Bd:         //B
                    if (MidH && UpperV) {
                        Trig = true;
                        tregion = Vvalue / 4;
                    }
                break;
            }
        }
    }
}

bool CaMove::get_Trig() {
    bool temp = Trig;
    Trig = false;
    return temp;

};