mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-19 16:18:45 +00:00
FULLPIPE: More *AtPos functions
This commit is contained in:
parent
0daaadc604
commit
7154d1f2cd
@ -616,6 +616,27 @@ bool Picture::isPixelHitAtPos(int x, int y) {
|
||||
return _bitmap->isPixelHitAtPos(x, y);
|
||||
}
|
||||
|
||||
int Picture::getPixelAtPos(int x, int y) {
|
||||
return getPixelAtPosEx(x / g_fullpipe->_pictureScale, y / g_fullpipe->_pictureScale);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
int Picture::getPixelAtPosEx(int x, int y) {
|
||||
#if 0
|
||||
if (x < 0 || y < 0)
|
||||
return 0;
|
||||
|
||||
v5 = ictureScale + this->width - 1;
|
||||
if ( x < v5 / g_fullpipe->_pictureScale
|
||||
&& (v6 = g_fullpipe->_pictureScale + this_->height - 1, y < v6 / (unsigned __int16)getPictureScale())
|
||||
&& (v7 = this_->memoryObject2) != 0
|
||||
&& (v8 = v7->rows) != 0 )
|
||||
return = *(_WORD *)&v8[x][2 * y];
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool Bitmap::isPixelHitAtPos(int x, int y) {
|
||||
debug(0, "STUB: Bitmap::isPixelHitAtPos(%d, %d)", x, y);
|
||||
|
||||
|
@ -106,6 +106,8 @@ class Picture : public MemoryObject {
|
||||
Common::Point *getDimensions(Common::Point *p);
|
||||
bool isPointInside(int x, int y);
|
||||
bool isPixelHitAtPos(int x, int y);
|
||||
int getPixelAtPos(int x, int y);
|
||||
int getPixelAtPosEx(int x, int y);
|
||||
|
||||
byte *getPaletteData() { return _paletteData; }
|
||||
void setPaletteData(byte *pal);
|
||||
|
@ -477,9 +477,19 @@ void Scene::updateScrolling2() {
|
||||
}
|
||||
|
||||
StaticANIObject *Scene::getStaticANIObjectAtPos(int x, int y) {
|
||||
warning("STUB: Scene::getStaticANIObjectAtPos(%d, %d)", x, y);
|
||||
StaticANIObject *res = 0;
|
||||
|
||||
return 0;
|
||||
for (uint i = 0; i < _staticANIObjectList1.size(); i++) {
|
||||
StaticANIObject *p = (StaticANIObject *)_staticANIObjectList1[i];
|
||||
int pixel;
|
||||
|
||||
if ((p->_field_8 & 1) && (p->_flags & 4) &&
|
||||
p->getPixelAtPos(x, y, &pixel) &&
|
||||
(!res || res->_priority >= p->_priority))
|
||||
res = p;
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
PictureObject *Scene::getPictureObjectAtPos(int x, int y) {
|
||||
|
@ -321,6 +321,65 @@ Movement *StaticANIObject::getMovementByName(char *name) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool StaticANIObject::getPixelAtPos(int x, int y, int *pixel) {
|
||||
bool res = false;
|
||||
Picture *pic;
|
||||
|
||||
if (_movement)
|
||||
pic = _movement->_currDynamicPhase;
|
||||
else
|
||||
pic = _statics;
|
||||
|
||||
if (!pic)
|
||||
return false;
|
||||
|
||||
int ongoing;
|
||||
int xani, yani;
|
||||
int oxani, oyani;
|
||||
Common::Point point;
|
||||
|
||||
if (_movement)
|
||||
ongoing = _movement->_currMovement != 0;
|
||||
else
|
||||
ongoing = _statics->_staticsId & 0x4000;
|
||||
|
||||
if (_movement) {
|
||||
_movement->getCurrDynamicPhaseXY(point);
|
||||
xani = point.x;
|
||||
yani = point.y;
|
||||
oxani = _movement->_ox;
|
||||
oyani = _movement->_oy;
|
||||
} else {
|
||||
_statics->getSomeXY(point);
|
||||
xani = point.x;
|
||||
yani = point.y;
|
||||
oxani = _ox;
|
||||
oyani = _oy;
|
||||
}
|
||||
|
||||
int xtarget = x - (oxani - xani);
|
||||
int ytarget = y - (oyani - yani);
|
||||
|
||||
if (ongoing && _movement)
|
||||
xtarget = pic->getDimensions(&point)->x - xtarget;
|
||||
|
||||
x = pic->_x;
|
||||
y = pic->_y;
|
||||
pic->_x = 0;
|
||||
pic->_y = 0;
|
||||
if (pic->isPixelHitAtPos(xtarget, ytarget)) {
|
||||
*pixel = pic->getPixelAtPos(xtarget, ytarget);
|
||||
|
||||
res = true;
|
||||
} else {
|
||||
res = false;
|
||||
}
|
||||
pic->_x = x;
|
||||
pic->_y = y;
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
void Movement::draw(bool flipFlag, int angle) {
|
||||
debug(3, "Movement::draw(%d, %d)", flipFlag, angle);
|
||||
|
||||
|
@ -230,6 +230,8 @@ class StaticANIObject : public GameObject {
|
||||
|
||||
MessageQueue *changeStatics1(int msgNum);
|
||||
void changeStatics2(int objId);
|
||||
|
||||
bool getPixelAtPos(int x, int y, int *pixel);
|
||||
};
|
||||
|
||||
struct MovTable {
|
||||
|
Loading…
Reference in New Issue
Block a user