Example #1
0
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);
	}
}
Example #6
0
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;
		}
	}

}
Example #9
0
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"));
}