void DrawSprite(unsigned int Num,unsigned int Bank, unsigned int addr, UINT16 Skip, UINT8 *SpriteBase) { int Src = (SpriteBase[7] << 8) | SpriteBase[6]; unsigned int Height = SpriteBase[1] - SpriteBase[0]; unsigned int Width = width_lut[abs(Skip)]; int values[] ={Src,Height,Skip,Width, Bank,nextSprite}; renderSpriteCache(values); spriteCache[addr]=nextSprite; nextSprite = nextSprite+(Width*Height)/8; unsigned int delta = (Num+3); ss_sprite[delta].ax = (((SpriteBase[3] & 0x01) << 8) + SpriteBase[2] )/2; ss_sprite[delta].ay = SpriteBase[0] + 1; ss_sprite[delta].charSize = (Width<<6) + Height; ss_sprite[delta].color = COLADDR_SPR | ((Num)<<2); ss_sprite[delta].charAddr = 0x220+spriteCache[addr]; if(CollisionFunction) { int values2[] ={ss_sprite[delta].ax,ss_sprite[delta].ay,Skip,Height,Num}; // fillSpriteCollision(Num,values2); updateCollisions(values2); } }
void GameLayer::mainUpdate(float dt) { if (getIsPaused()) { return; } updateGround(dt); updateCollisions(dt); roleUpdate(dt); updateScore(); }
void DrawSpriteCache(int Num,int Bank, int addr,INT16 Skip,UINT8 *SpriteBase) { unsigned int Height = SpriteBase[1] - SpriteBase[0]; unsigned int Width = width_lut[abs(Skip)]; unsigned int delta = (Num+3); ss_sprite[delta].ax = (((SpriteBase[3] & 0x01) << 8) + SpriteBase[2] )/2; ss_sprite[delta].ay = SpriteBase[0] + 1; ss_sprite[delta].charSize = (Width<<6) + Height; ss_sprite[delta].color = COLADDR_SPR | ((Num)<<2); ss_sprite[delta].charAddr = 0x220+spriteCache[addr]; if(CollisionFunction) { int values[] ={ss_sprite[delta].ax,ss_sprite[delta].ay,Skip,Height,Num}; // fillSpriteCollision(Num,values); updateCollisions(values); } }
void World::update(){ _player->update(); updateCollisions(); wallsController(); tempo.updateTime(); }
void LVL_Npc::update(float tickTime) { float accelCof=tickTime/1000.0f; if(killed) return; if(wasDeactivated) return; _onGround = !collided_bottom.isEmpty(); if(isGenerator) { updateCollisions(); activationTimeout-=tickTime; updateGenerator(tickTime); return; } event_queue.processEvents(tickTime); if(warpSpawing) { setSpeed(0.0, 0.0); return; } PGE_Phys_Object::update(tickTime); if(deActivatable) activationTimeout-=tickTime; animator.manualTick(tickTime); if(motionSpeed!=0) { if(!collided_left.isEmpty()) setDirection(1); else if(!collided_right.isEmpty()) setDirection(-1); else if(setup->turn_on_cliff_detect && cliffDetected) { setDirection(_direction*-1); cliffDetected=false; } setSpeedX((motionSpeed*accelCof)*_direction); } if(not_movable()) { detector_player_pos.processDetector(); if(detector_player_pos.directedTo()!=0) setDirection(detector_player_pos.directedTo()); } LVL_Section *section=sct(); PGE_RectF sBox = section->sectionRect(); if(section->isWarp()) { if(posX()<sBox.left()-_width-1 ) setPosX(sBox.right()-1); else if(posX()>sBox.right() + 1 ) setPosX(sBox.left()-_width+1); } for(int i=0; i<detectors.size(); i++) detectors[i]->processDetector(); try { lua_onLoop(tickTime); } catch (luabind::error& e) { LvlSceneP::s->getLuaEngine()->postLateShutdownError(e); } }
void RayDisplayScene::lightenSender(int senderId, const int &angle) { clearRayNumbers(); QVector<QLineF> &senderCollidedRays = clearCollidedRays(senderId); clearTriangles(); QVector<Ray> senderRays; senderRays.reserve(10); for (int i = 1; i < mSidedReceivers.size(); i++) { const int sideIdx = (mSenders.at(senderId).side + i) % mSidedReceivers.size(); for (int j = 0; j < mSidedReceivers.at(sideIdx).size(); j++) { QLineF line(mSenders.at(senderId).r->pos(), mSidedReceivers.at(sideIdx).at(j)->pos()); int lineAngle = int(line.angle()) - mSenders.at(senderId).rotation; if ((lineAngle > -angle / 2 && lineAngle < angle / 2) || (lineAngle - 360 > -angle / 2 && lineAngle - 360 < angle / 2)) { QGraphicsTextItem *rayNumber; rayNumber = addText(QString::number(senderRays.size())); rayNumber->setPos(line.p2()); rayNumber->setZValue(3); mRayNumbers << rayNumber; senderRays << Ray{line, true, (j == 0) || (j == mSidedReceivers.at(sideIdx).size() - 1) /* corner ray */}; } } } for (int i = 0; i < senderRays.size(); i++) { QGraphicsLineItem *r = nullptr; if (!mCollisionEnabled || mCircles.size() <= 1) { r = addLine(senderRays.at(i).line, QPen(QBrush(Qt::blue), 1)); } else { /*const int size = mObstacle.size(); for (int j = 0; j < size; j++) { QLineF obsLine(mObstacle.at(j), mObstacle.at((j + 1) % size)); if (senderRays.at(i).line.intersect(obsLine, nullptr) == QLineF::BoundedIntersection) { senderRays[i].visible = false; break; } }*/ const int size = mCircles.size(); for (int j = 0; j < size; j++) { if (pointToLineDistSquared(mCircles.at(j).center, senderRays.at(i).line) <= mCircles.at(j).radius * mCircles.at(j).radius) { senderRays[i].visible = false; break; } } if (senderRays.at(i).visible) { r = addLine(senderRays.at(i).line, QPen(QBrush(Qt::blue), 1)); } } if (r != nullptr) { mRays.append(r); } } // add border rays of another colour if (senderRays.size() > 0) { QGraphicsLineItem *r = nullptr; // first { r = addLine(senderRays.at(0).line, QPen(QBrush(Qt::yellow), 1)); mRays.append(r); } // last if (senderRays.size() > 1/* && !senderRays.at(senderRays.size() - 1).visible*/) { //senderCollidedRays << senderRays.at(senderRays.size() - 1).line; r = addLine(senderRays.at(senderRays.size() - 1).line, QPen(QBrush(Qt::yellow), 1)); mRays.append(r); } // on every state change for (int i = 1; i < senderRays.size() - 1; i++) { if (!senderRays.at(i).visible && (senderRays.at(i - 1).visible || senderRays.at(i + 1).visible)) { senderCollidedRays << senderRays.at(i).line; r = addLine(senderRays.at(i).line, QPen(QBrush(Qt::red), 1)); mCollidedRaysGraphics[senderId] << r; } } } // ****************************** // -----8<------8<-------8<------ //cv::Mat cvImage = cvtrack1(senderId, senderRays); //cv::imshow(QString(QString("plepleple ")/* + QString::number(senderId)*/).toStdString(), cvImage); /*for (int i = 0; i < mCvPolygons.size(); i++) { for (int j = 0; j < mCvPolygons.at(i).size(); j++) { cv::fillConvexPoly(cvImage, cvPoints.constData(), cvPoints.size(), cv::Scalar(127)); } }*/ //cvTrack2(cvImage); updateCollisions(); }