void SaveSpritesDirection(const vector < Sprite > & sprites, gd::SerializerElement & element) { element.ConsiderAsArrayOf("sprite"); for (unsigned int i = 0;i<sprites.size();++i) { gd::SerializerElement & spriteElement = element.AddChild("sprite"); spriteElement.SetAttribute("image", sprites[i].GetImageName()); SavePointsSprites(sprites[i].GetAllNonDefaultPoints(), spriteElement.AddChild("points")); SavePoint(sprites[i].GetOrigin(), spriteElement.AddChild("originPoint")); SavePoint(sprites[i].GetCenter(), spriteElement.AddChild("centerPoint")); spriteElement.GetChild("centerPoint").SetAttribute("automatic", sprites[i].IsDefaultCenterPoint()); spriteElement.SetAttribute("hasCustomCollisionMask", !sprites[i].IsCollisionMaskAutomatic()); gd::SerializerElement & collisionMaskElement = spriteElement.AddChild("customCollisionMask"); collisionMaskElement.ConsiderAsArrayOf("polygon"); std::vector<Polygon2d> polygons = sprites[i].GetCollisionMask(); for (unsigned int j = 0;j<polygons.size();++j) { gd::SerializerElement & polygonElement = collisionMaskElement.AddChild("polygon"); polygonElement.ConsiderAsArrayOf("vertice"); for (unsigned int k = 0;k<polygons[j].vertices.size();++k) { polygonElement.AddChild("vertice") .SetAttribute("x", polygons[j].vertices[k].x) .SetAttribute("y", polygons[j].vertices[k].y); } } } }
void moDeformationGrid::EscalarPuntos( bool horizontal, float escala ) { float x = 0.0,y = 0.0; float newX = 0.0,newY = 0.0; float sumaX = 0.0,sumaY = 0.0; if (horizontal) { ///calculamos el centro de la linea for(int i=0; i < m_Width; i++ ) { sumaX+= m_Points[ i + m_Width * m_Selector_J ].X(); } sumaX/= m_Width; ///escalamos for( int i = 0; i < m_Width; i++ ) { x = m_Points[ i + m_Width * m_Selector_J ].X(); y = m_Points[ i + m_Width * m_Selector_J ].Y(); ///escalamos newX = ( x - sumaX ) * escala; m_Points[ i + m_Width * m_Selector_J ] = moVector2f( sumaX + newX, y ); SavePoint( i, m_Selector_J ); } } else { ///calculamos el centro de la linea for(int j=0; j < m_Height; j++ ) { sumaY+= m_Points[ m_Selector_I + m_Width * j ].Y(); } sumaY/= m_Height; ///escalamos for( int j = 0, index = m_Selector_I; j < m_Height; j++, index = m_Selector_I + m_Width * j) { x = m_Points[ index ].X(); y = m_Points[ index ].Y(); ///escalamos newY = ( y - sumaY ) * escala; m_Points[ index ] = moVector2f( x, sumaY + newY ); SavePoint( m_Selector_I, j ); } } }
void moDeformationGrid::ResetPuntos() { float cx,incx; float cy,incy; float inctx,incty; int w = m_pResourceManager->GetRenderMan()->ScreenWidth(); int h = m_pResourceManager->GetRenderMan()->ScreenHeight(); bool saveto = false; inctx = (PosTextX1 - PosTextX0) / (float)(m_Width-1); incty = (PosTextY1 - PosTextY0) / (float)(m_Height-1); cx = -1.0 / 2; incx = 1.0 / (float)( m_Width - 1); cy = -(1.0 * h / w ) / 2; incy = (1.0 * h / w) / (float)(m_Height - 1); if (m_Config[moR(DEFORMATIONGRID_POINTS)].GetValue().GetSubValueCount()>0) saveto = true; for(int j=0; j < m_Height; j++) for(int i=0; i < m_Width; i++) { m_Points[ i + j*m_Width ] = moVector2f( cx + i*incx, cy + j*incy ); m_TPoints[ i + j*m_Width ] = moVector2f( PosTextX0 + inctx*i, PosTextY0 + incty*j ); if (saveto) SavePoint( i, j ); } }
uint8_t *SIFSpritesSect::Encode(SIFSprite *sprites, int nsprites, int *datalen_out) { DBuffer buf; int i, f; buf.Append16(nsprites); for(i=0;i<nsprites;i++) { buf.Append8(sprites[i].w); buf.Append8(sprites[i].h); buf.Append8(sprites[i].spritesheet); buf.Append8(sprites[i].nframes); buf.Append8(sprites[i].ndirs); SaveRect(&sprites[i].bbox, &buf); SaveRect(&sprites[i].solidbox, &buf); SavePoint(&sprites[i].spawn_point, &buf); SavePointList(&sprites[i].block_l, &buf); SavePointList(&sprites[i].block_r, &buf); SavePointList(&sprites[i].block_u, &buf); SavePointList(&sprites[i].block_d, &buf); for(f=0;f<sprites[i].nframes;f++) { SaveFrame(&sprites[i].frame[f], sprites[i].ndirs, &buf); } } if (datalen_out) *datalen_out = buf.Length(); return buf.TakeData(); }
void SIFSpritesSect::SaveOptionalPoint(int type, SIFPoint *pt, DBuffer *out) { if (!pt->equ(0, 0)) { out->Append8(type); SavePoint(pt, out); } }
bool PolarShapeEditWidget::Save(bool &_changed) { bool changed = false; for (unsigned i = 0; i < ARRAY_SIZE(points); ++i) changed |= SavePoint(points[i], shape[i]); _changed |= changed; return true; }
void SIFSpritesSect::SaveFrame(SIFFrame *frame, int ndirs, DBuffer *out) { for(int d=0;d<ndirs;d++) { SIFDir *dir = &frame->dir[d]; SavePoint(&dir->sheet_offset, out); SaveOptionalPoint(S_DIR_DRAW_POINT, &dir->drawpoint, out); SaveOptionalPoint(S_DIR_ACTION_POINT, &dir->actionpoint, out); SaveOptionalPoint(S_DIR_ACTION_POINT_2, &dir->actionpoint2, out); SaveOptionalRect(S_DIR_PF_BBOX, &dir->pf_bbox, out); out->Append8(S_DIR_END); } }
void moDeformationGrid::Interaction( moIODeviceManager *IODeviceManager ) { moDeviceCode *temp; MOint did,cid,state,valor; moVector2f promedio(0.0,0.0); float sumax = 0.0; moVector2f New; float x; ///este lo comentamos, sino llama nuevamente a Update(Events*) .... ///moEffect::Interaction( IODeviceManager ); if (devicecode!=NULL) for(int i=0; i<ncodes; i++) { temp = devicecode[i].First; while(temp!=NULL) { did = temp->device; cid = temp->devicecode; state = IODeviceManager->IODevices().Get(did)->GetStatus(cid); valor = IODeviceManager->IODevices().Get(did)->GetValue(cid); if (state) switch(i) { case DEFORMATIONGRID_MODO_1: m_Modo = PUNTO; MODebug2->Push(moText("DEFORMATIONGRID MODO 1")); break; case DEFORMATIONGRID_MODO_2: m_Modo = LINEA; MODebug2->Push(moText("DEFORMATIONGRID MODO 2")); break; case DEFORMATIONGRID_MODO_3: MODebug2->Push(moText("DEFORMATIONGRID MODO 3")); break; case DEFORMATIONGRID_SEL_IZQ: /// A ( m_Selector_I >0 ) ? m_Selector_I-- : m_Selector_I = m_Selector_I; MODebug2->Push( moText("Selector Izquierda I: ") + IntToStr(m_Selector_I)); break; case DEFORMATIONGRID_SEL_DER: /// D ( m_Selector_I < (m_Width-1) ) ? m_Selector_I++ : m_Selector_I = m_Selector_I; MODebug2->Push( moText("Selector Derecha I: ") + IntToStr(m_Selector_I)); break; case DEFORMATIONGRID_SEL_ARR: /// W ( m_Selector_J < (m_Height-1) ) ? m_Selector_J++ : m_Selector_J = m_Selector_J; MODebug2->Push( moText("Selector Arriba J: ") + IntToStr(m_Selector_J)); break; case DEFORMATIONGRID_SEL_ABA: /// S ( m_Selector_J >0 ) ? m_Selector_J-- : m_Selector_J = m_Selector_J; MODebug2->Push( moText("Selector Abajo J: ") + IntToStr(m_Selector_J)); break; case DEFORMATIONGRID_CURSOR_IZQ: /// <- switch( m_Modo ) { case PUNTO: m_Points[ m_Selector_I + m_Width * m_Selector_J ].X()-= m_Precision; SavePoint( m_Selector_I, m_Selector_J ); break; ///proporcional case LINEA: EscalarPuntos( true, 1.0 - m_Precision ); break; } New = m_Points[ m_Selector_I + m_Width * m_Selector_J ]; MODebug2->Push( moText("Cursor Izquierda: ") + FloatToStr(New.X()) ); break; case DEFORMATIONGRID_CURSOR_DER: /// -> switch( m_Modo ) { case PUNTO: m_Points[ m_Selector_I + m_Width * m_Selector_J ].X()+= m_Precision; SavePoint( m_Selector_I, m_Selector_J ); break; ///proporcional case LINEA: EscalarPuntos( true, 1.0 + m_Precision ); break; } New = m_Points[ m_Selector_I + m_Width * m_Selector_J ]; MODebug2->Push( moText("Cursor Derecha: ") + FloatToStr(New.X()) ); break; case DEFORMATIONGRID_CURSOR_ARR: /// up arrow switch( m_Modo ) { case PUNTO: m_Points[ m_Selector_I + m_Width * m_Selector_J ].Y()+= m_Precision; SavePoint( m_Selector_I, m_Selector_J ); break; ///proporcional case LINEA: EscalarPuntos( false, 1.0 - m_Precision ); break; } New = m_Points[ m_Selector_I + m_Width * m_Selector_J ]; MODebug2->Push( moText("Cursor Arriba: ") + FloatToStr(New.Y()) ); break; case DEFORMATIONGRID_CURSOR_ABA: /// down arrow switch( m_Modo ) { case PUNTO: m_Points[ m_Selector_I + m_Width * m_Selector_J ].Y()-= m_Precision; SavePoint( m_Selector_I, m_Selector_J ); break; ///proporcional case LINEA: EscalarPuntos( false, 1.0 + m_Precision ); break; } New = m_Points[ m_Selector_I + m_Width * m_Selector_J ]; MODebug2->Push( moText("Cursor Abajo: ") + FloatToStr(New.Y()) ); break; case DEFORMATIONGRID_GUARDAR: if (m_Config.SaveConfig()==MO_CONFIG_OK) { MODebug2->Push( moText("Guardose exitosamente la configuracion")); } else { MODebug2->Error( moText("Hubo un problema al cargar el salvar el config")); } //salvar break; case DEFORMATIONGRID_RESET: ResetPuntos(); MODebug2->Push( moText("Reset Puntos: ")); break; } temp = temp->next; } } }
void SavePointsSprites(const vector < Point > & points, gd::SerializerElement & element) { element.ConsiderAsArrayOf("point"); for (unsigned int i = 0;i<points.size();++i) SavePoint(points[i], element.AddChild("point")); }