The beginnings of a rework
This commit is contained in:
46
include/TiledSerpentineArrangement.h
Normal file
46
include/TiledSerpentineArrangement.h
Normal file
@@ -0,0 +1,46 @@
|
||||
#ifndef TILEDSERPENTINEARRANGEMENT_H
|
||||
#define TILEDSERPENTINEARRANGEMENT_H
|
||||
|
||||
#include "ILEDArrangement.h"
|
||||
|
||||
class TiledSerpentineArrangement : public ILEDArrangement {
|
||||
public:
|
||||
TiledSerpentineArrangement(bool _isColumnSerpentine, bool _isVerticallyTiled,
|
||||
int16_t _tileWidth, int16_t _tileHeight) : isColumnSerpentine(_isColumnSerpentine),
|
||||
isVerticallyTiled(_isVerticallyTiled), tileWidth(_tileWidth), tileHeight(_tileHeight) {}
|
||||
virtual ~TiledSerpentineArrangement() {}
|
||||
|
||||
int16_t XY(int16_t x, int16_t y, int16_t width, int16_t height) {
|
||||
int16_t tileNumber = isVerticallyTiled ? y / tileHeight : x / tileHeight;
|
||||
|
||||
int16_t modX = x % tileWidth;
|
||||
int16_t modY = y % tileHeight;
|
||||
|
||||
int16_t tilePosition = 0;
|
||||
|
||||
if(isColumnSerpentine) {
|
||||
if (x & 0x1) {
|
||||
tilePosition = modX * tileHeight + (tileHeight - 1 - modY);
|
||||
} else {
|
||||
tilePosition = modX * tileHeight + modY;
|
||||
}
|
||||
} else {
|
||||
if (y & 0x1) {
|
||||
tilePosition = modY * tileWidth + (tileWidth - 1 - modX);
|
||||
} else {
|
||||
tilePosition = modY * tileWidth + modX;
|
||||
}
|
||||
}
|
||||
|
||||
return tileWidth * tileHeight * tileNumber + tilePosition;
|
||||
}
|
||||
private:
|
||||
bool
|
||||
isColumnSerpentine,
|
||||
isVerticallyTiled;
|
||||
int16_t
|
||||
tileWidth,
|
||||
tileHeight;
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user