void CDotWars::onRender() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ZERO); glLoadIdentity(); renderDot(a); da_overlord.renderDots(pScreenSurf); gravityOverlord.renderDots(pScreenSurf); ::SDL_GL_SwapBuffers(); }
void ClientEntity::render (IFrontend *frontend, Layer layer, int scale, float zoom, int offsetX, int offsetY) const { if (!_currSprite) return; const ClientEntityPtr ropeEntity = _ropeEntity; const int basePosX = _pos.x * scale * zoom; const int basePosY = _pos.y * scale * zoom; int posX = basePosX; int posY = basePosY; switch (_align) { case ENTITY_ALIGN_UPPER_LEFT: break; case ENTITY_ALIGN_LOWER_LEFT: posX -= _currSprite->getWidth(layer) * zoom / 2.0f; posY += _size.y * scale * zoom / 2.0f; posY -= _currSprite->getHeight(layer) * zoom; break; case ENTITY_ALIGN_MIDDLE_CENTER: { posX -= _currSprite->getWidth(layer) * zoom / 2.0f; posY -= _currSprite->getHeight(layer) * zoom / 2.0f; break; } } setScreenPos(offsetX + posX, offsetY + posY); const int ropeX1 = basePosX; const int ropeY1 = (basePosY - _size.y * scale * zoom / 2.0f); int ropeX2 = 0; int ropeY2 = 0; if (ropeEntity && layer == LAYER_MIDDLE) { const vec2& pos = ropeEntity->getPos(); const vec2& size = ropeEntity->getSize(); ropeX2 = pos.x * scale * zoom; ropeY2 = pos.y * scale * zoom + size.y * scale * zoom / 2.0f; static const Color color = { 0.5f, 0.3f, 0.3f, 1.0f }; frontend->renderLine(offsetX + ropeX1, offsetY + ropeY1, offsetX + ropeX2, offsetY + ropeY2, color); } const bool visible = _currSprite->render(frontend, layer, _screenPosX, _screenPosY, zoom, _angle, _alpha); _visChanged = visible != _visible; renderOverlays(frontend, layer, scale, zoom, offsetX, offsetY, posX, posY); if (layer != LAYER_FRONT) return; if (Config.isDebug()) frontend->renderFilledRect(_screenPosX, _screenPosY, 4, 4, colorRed); const bool debug = Config.getConfigVar("debugentity")->getBoolValue(); if (debug) { const BitmapFontPtr& font = UI::get().getFont(); renderDot(frontend, offsetX + basePosX, offsetY + basePosY, colorGreen); renderDot(frontend, offsetX + posX, offsetY + posY, colorWhite); if (ropeEntity && layer == LAYER_MIDDLE) { renderDot(frontend, offsetX + ropeX1, offsetY + ropeY1, colorBlue); renderDot(frontend, offsetX + ropeX2, offsetY + ropeY2, colorBrightBlue); } int offsetPosX, offsetPosY; calcOffset(scale, zoom, posX, posY, offsetPosX, offsetPosY); renderDot(frontend, offsetX + offsetPosX, offsetY + offsetPosY, colorGray); int fontY = _screenPosY; if (!_animation->isNone()) { font->print(_animation->name, colorWhite, _screenPosX, fontY); fontY += font->getTextHeight(_animation->name); } font->print(string::toString(_angle), colorWhite, _screenPosX, fontY); } }