void AnimatedSprite2D::UpdateSourceBatchesSpriter() { const Matrix3x4& nodeWorldTransform = GetNode()->GetWorldTransform(); Vector<Vertex2D>& vertices = sourceBatches_[0].vertices_; vertices.Clear(); Rect drawRect; Rect textureRect; unsigned color = color_.ToUInt(); Vertex2D vertex0; Vertex2D vertex1; Vertex2D vertex2; Vertex2D vertex3; const std::vector<Spriter::SpatialTimelineKey*>& timelineKeys = spriterInstance_->GetTimelineKeys(); for (size_t i = 0; i < timelineKeys.size(); ++i) { if (timelineKeys[i]->GetObjectType() != Spriter::SPRITE) continue; Spriter::SpriteTimelineKey* timelineKey = (Spriter::SpriteTimelineKey*)timelineKeys[i]; Spriter::SpatialInfo& info = timelineKey->info_; Vector3 position(info.x_, info.y_, 0.0f); if (flipX_) position.x_ = -position.x_; if (flipY_) position.y_ = -position.y_; float angle = info.angle_; if (flipX_ != flipY_) angle = -angle; Matrix3x4 localTransform(position * PIXEL_SIZE, Quaternion(angle), Vector3(info.scaleX_, info.scaleY_, 1.0f)); Matrix3x4 worldTransform = nodeWorldTransform * localTransform; Sprite2D* sprite = animationSet_->GetSpriterFileSprite(timelineKey->folderId_, timelineKey->fileId_); if (!sprite) return; if (timelineKey->useDefaultPivot_) sprite->GetDrawRectangle(drawRect, flipX_, flipY_); else sprite->GetDrawRectangle(drawRect, Vector2(timelineKey->pivotX_, timelineKey->pivotY_), flipX_, flipY_); if (!sprite->GetTextureRectangle(textureRect, flipX_, flipY_)) return; vertex0.position_ = worldTransform * Vector3(drawRect.min_.x_, drawRect.min_.y_, 0.0f); vertex1.position_ = worldTransform * Vector3(drawRect.min_.x_, drawRect.max_.y_, 0.0f); vertex2.position_ = worldTransform * Vector3(drawRect.max_.x_, drawRect.max_.y_, 0.0f); vertex3.position_ = worldTransform * Vector3(drawRect.max_.x_, drawRect.min_.y_, 0.0f); vertex0.uv_ = textureRect.min_; vertex1.uv_ = Vector2(textureRect.min_.x_, textureRect.max_.y_); vertex2.uv_ = textureRect.max_; vertex3.uv_ = Vector2(textureRect.max_.x_, textureRect.min_.y_); vertex0.color_ = vertex1.color_ = vertex2.color_ = vertex3.color_ = color; vertices.Push(vertex0); vertices.Push(vertex1); vertices.Push(vertex2); vertices.Push(vertex3); } worldBoundingBoxDirty_ = true; }