sf::Vector2f SpriteObject::GetInitialInstanceOrigin(gd::InitialInstance & instance, gd::Project & project, gd::Layout & layout) const { const Sprite * associatedSprite = GetInitialInstanceSprite(instance, project, layout); if ( associatedSprite == NULL || !associatedSprite->GetSFMLTexture() ) return sf::Vector2f(0,0); float scaleX = instance.HasCustomSize() ? instance.GetCustomWidth()/associatedSprite->GetSFMLTexture()->texture.getSize().x : 1; float scaleY = instance.HasCustomSize() ? instance.GetCustomHeight()/associatedSprite->GetSFMLTexture()->texture.getSize().y : 1; return sf::Vector2f(((float)associatedSprite->GetOrigin().GetX())*fabs(scaleX), ((float)associatedSprite->GetOrigin().GetY())*fabs(scaleY)); }
void Object::DrawInitialInstance(gd::InitialInstance & instance, sf::RenderTarget & renderTarget, gd::Project & project, gd::Layout & layout) { #if !defined(GD_NO_WX_GUI) sf::RectangleShape mask(instance.HasCustomSize() ? sf::Vector2f(instance.GetCustomWidth(),instance.GetCustomHeight()) : GetInitialInstanceDefaultSize(instance, project, layout)); mask.setPosition(instance.GetX(), instance.GetY()); mask.setRotation(instance.GetAngle()); mask.setFillColor(sf::Color( 147,151,255 )); mask.setOutlineThickness(1); mask.setOutlineColor(sf::Color( 255, 48, 69)); renderTarget.draw(mask); #endif }
void SpriteObject::DrawInitialInstance(gd::InitialInstance & instance, sf::RenderTarget & renderTarget, gd::Project & project, gd::Layout & layout) { bool shouldNotRotate = false; const Sprite * associatedSprite = GetInitialInstanceSprite(instance, project, layout, &shouldNotRotate); if ( associatedSprite == NULL || !associatedSprite->GetSFMLTexture() ) return; sf::Sprite sprite(associatedSprite->GetSFMLTexture()->texture); float scaleX = instance.HasCustomSize() ? instance.GetCustomWidth()/associatedSprite->GetSFMLTexture()->texture.getSize().x : 1; float scaleY = instance.HasCustomSize() ? instance.GetCustomHeight()/associatedSprite->GetSFMLTexture()->texture.getSize().y : 1; sprite.setOrigin( associatedSprite->GetCenter().GetX(), associatedSprite->GetCenter().GetY() ); ; sprite.setRotation( shouldNotRotate ? 0 : instance.GetAngle() ); sprite.setPosition( instance.GetX() + (associatedSprite->GetCenter().GetX() - associatedSprite->GetOrigin().GetX())*fabs(scaleX), instance.GetY() + (associatedSprite->GetCenter().GetY() - associatedSprite->GetOrigin().GetY())*fabs(scaleY) ); sprite.setScale(scaleX, scaleY); renderTarget.draw(sprite); }
/** * Render object at edittime */ void TiledSpriteObject::DrawInitialInstance(gd::InitialInstance & instance, sf::RenderTarget & renderTarget, gd::Project & project, gd::Layout & layout) { if(!texture) return; float width = instance.HasCustomSize() ? instance.GetCustomWidth() : GetInitialInstanceDefaultSize(instance, project, layout).x; float height = instance.HasCustomSize() ? instance.GetCustomHeight() : GetInitialInstanceDefaultSize(instance, project, layout).y; float xOffset = 0; float yOffset = 0; sf::Vector2f centerPosition = sf::Vector2f(instance.GetX()+width/2, instance.GetY()+height/2); float angleInRad = instance.GetAngle()*3.14159/180.0; texture->texture.setRepeated(true); sf::Vertex vertices[] = {sf::Vertex( centerPosition+RotatePoint(sf::Vector2f(-width/2,-height/2), angleInRad), sf::Vector2f(0+xOffset,0+yOffset)), sf::Vertex( centerPosition+RotatePoint(sf::Vector2f(+width/2,-height/2), angleInRad), sf::Vector2f(width+xOffset,0+yOffset)), sf::Vertex( centerPosition+RotatePoint(sf::Vector2f(+width/2,+height/2), angleInRad), sf::Vector2f(width+xOffset, height+yOffset)), sf::Vertex( centerPosition+RotatePoint(sf::Vector2f(-width/2,+height/2), angleInRad), sf::Vector2f(0+xOffset, height+yOffset))}; renderTarget.draw(vertices, 4, sf::Quads, &texture->texture); texture->texture.setRepeated(false); }
/** * Render object at edittime */ void Box3DObject::DrawInitialInstance(gd::InitialInstance & instance, sf::RenderTarget & renderTarget, gd::Project & project, gd::Layout & layout) { if ( !topTexture || !bottomTexture || ! rightTexture || !leftTexture || !frontTexture || !backTexture ) return; renderTarget.popGLStates(); float width = instance.HasCustomSize() ? instance.GetCustomWidth() : GetInitialInstanceDefaultSize(instance, project, layout).x; float height = instance.HasCustomSize() ? instance.GetCustomHeight() : GetInitialInstanceDefaultSize(instance, project, layout).y; float xView = renderTarget.getView().getCenter().x*0.25f; float yView = -renderTarget.getView().getCenter().y*0.25f; float zPosition = instance.floatInfos.find("z") != instance.floatInfos.end() ? instance.floatInfos.find("z")->second : 0; float pitch = instance.floatInfos.find("pitch") != instance.floatInfos.end() ? instance.floatInfos.find("pitch")->second : 0; float roll = instance.floatInfos.find("roll") != instance.floatInfos.end() ? instance.floatInfos.find("roll")->second : 0; float yaw = instance.GetAngle(); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); //Position glRotatef(renderTarget.getView().getRotation(), 0, 0, 1); glTranslatef(instance.GetX()*0.25f - xView, -instance.GetY()*0.25f - yView, zPosition*0.25f - 75.0f*(renderTarget.getView().getSize().y/600.0f)); float sizeWidth = width*0.25f; float sizeHeight = -height*0.25f; float sizeDepth = depth*0.25f; //Rotation glTranslatef(sizeWidth/2, sizeHeight/2, sizeDepth/2); glRotatef(-yaw, 0, 0, 1); glRotatef(pitch, 0, 1, 0); glRotatef(roll, 1, 0, 0); glTranslatef(-sizeWidth/2, -sizeHeight/2, -sizeDepth/2); //Render the box glEnable(GL_BLEND); glEnable(GL_TEXTURE_2D); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); sf::Texture::bind(&backTexture->texture); glBegin(GL_QUADS); glTexCoord2f(0, 0); glVertex3f(0 , 0, 0); glTexCoord2f(0, 1); glVertex3f(0 , sizeHeight, 0); glTexCoord2f(1, 1); glVertex3f(sizeWidth, sizeHeight, 0); glTexCoord2f(1, 0); glVertex3f(sizeWidth, 0, 0); glEnd(); sf::Texture::bind(&frontTexture->texture); glBegin(GL_QUADS); glTexCoord2f(0, 0); glVertex3f(0 , 0, sizeDepth); glTexCoord2f(0, 1); glVertex3f(0 , sizeHeight, sizeDepth); glTexCoord2f(1, 1); glVertex3f(sizeWidth, sizeHeight, sizeDepth); glTexCoord2f(1, 0); glVertex3f(sizeWidth, 0, sizeDepth); glEnd(); sf::Texture::bind(&leftTexture->texture); glBegin(GL_QUADS); glTexCoord2f(0, 0); glVertex3f(0, 0, 0); glTexCoord2f(0, 1); glVertex3f(0, sizeHeight, 0); glTexCoord2f(1, 1); glVertex3f(0, sizeHeight, sizeDepth); glTexCoord2f(1, 0); glVertex3f(0, 0, sizeDepth); glEnd(); sf::Texture::bind(&rightTexture->texture); glBegin(GL_QUADS); glTexCoord2f(0, 0); glVertex3f(sizeWidth, 0, 0); glTexCoord2f(0, 1); glVertex3f(sizeWidth, sizeHeight, 0); glTexCoord2f(1, 1); glVertex3f(sizeWidth, sizeHeight, sizeDepth); glTexCoord2f(1, 0); glVertex3f(sizeWidth, 0, sizeDepth); glEnd(); sf::Texture::bind(&bottomTexture->texture); glBegin(GL_QUADS); glTexCoord2f(0, 1); glVertex3f(0, 0, sizeDepth); glTexCoord2f(0, 0); glVertex3f(0, 0, 0); glTexCoord2f(1, 0); glVertex3f(sizeWidth, 0, 0); glTexCoord2f(1, 1); glVertex3f(sizeWidth, 0, sizeDepth); glEnd(); sf::Texture::bind(&topTexture->texture); glBegin(GL_QUADS); glTexCoord2f(0, 1); glVertex3f(0, sizeHeight, sizeDepth); glTexCoord2f(0, 0); glVertex3f(0, sizeHeight, 0); glTexCoord2f(1, 0); glVertex3f(sizeWidth, sizeHeight, 0); glTexCoord2f(1, 1); glVertex3f(sizeWidth, sizeHeight, sizeDepth); glEnd(); renderTarget.pushGLStates(); }