void ISprite::Update(f32 delta) { //IBasicMesh::Update(delta); if (bPlaying && bAnimation) { fFrameTime += delta; if (fFrameTime > fCurrentFrameRate) { fFrameTime -= fCurrentFrameRate; if (iCurrentFrame + 1 == iFrames) { if (bLoop) { iCurrentFrame = 0; } else { bChanged = FALSE; } } else iCurrentFrame++; u32 oldId = pFrame->iFileId; pFrame = &pAnimationFrames[iCurrentFrame]; if (oldId != pFrame->iFileId) { sRelease(pFrameImage); pFrameImage = static_cast<ITexture *>(pRes->Get(_F(pFrame->iFileId), Seed::ObjectTexture, pPool)); } this->ReconfigureFrame(); } } if (!bChanged && !this->IsChanged()) return; uPixel p = iColor; p.rgba.r = iColor.argb.r; p.rgba.g = iColor.argb.g; p.rgba.b = iColor.argb.b; p.rgba.a = iColor.argb.a; if (!arCustomVertexData) { arCurrentVertexData = &vert[0]; vert[0].cVertex = Vector3f(-fAspectHalfWidth, -fAspectHalfHeight, (f32)iPriority); vert[0].iColor = p; vert[0].cCoords = Point2f(fTexS0, fTexT0); vert[1].cVertex = Vector3f(+fAspectHalfWidth, -fAspectHalfHeight, (f32)iPriority); vert[1].iColor = p; vert[1].cCoords = Point2f(fTexS1, fTexT0); vert[2].cVertex = Vector3f(-fAspectHalfWidth, +fAspectHalfHeight, (f32)iPriority); vert[2].iColor = p; vert[2].cCoords = Point2f(fTexS0, fTexT1); vert[3].cVertex = Vector3f(+fAspectHalfWidth, +fAspectHalfHeight, (f32)iPriority); vert[3].iColor = p; vert[3].cCoords = Point2f(fTexS1, fTexT1); } else { arCurrentVertexData = arCustomVertexData; } f32 ratio = pScreen->GetAspectRatio(); f32 x = fAspectHalfWidth + ISprite::GetX(); f32 y = fAspectHalfHeight + ISprite::GetY() * ratio; f32 lx = ISprite::GetLocalX(); f32 ly = ISprite::GetLocalY() * ratio; Matrix4x4f t1, t2, r, s; t1 = TranslationMatrix(lx + x, ly + y, 0.0f); r = RotationMatrix(AxisZ, DegToRad(ISprite::GetRotation())); s = ScaleMatrix(ISprite::GetScaleX(), ISprite::GetScaleY(), 1.0f); t2 = TranslationMatrix(-lx, -ly, 0.0f); Matrix4x4f transform = ((t1 * r) * s) * t2; if (bTransformationChanged || !arCustomVertexData) { for (u32 i = 0; i < iNumVertices; i++) { transform.Transform(arCurrentVertexData[i].cVertex); } } bChanged = FALSE; bTransformationChanged = FALSE; }