C++ / fmt (pull_request) Failing after 5s
C++ / build (pull_request) Failing after 10s
C++ / clang-tidy (pull_request) Failing after 10s
JS/TS / fmt (pull_request) Successful in 9s
JS/TS / lint (pull_request) Successful in 25s
Python / static (pull_request) Successful in 34s
Rust / build (pull_request) Successful in 51s
Python / verify (pull_request) Failing after 1m25s
Rust / fmt (pull_request) Successful in 39s
Rust / clippy (pull_request) Successful in 59s
83 lines
1.9 KiB
C++
83 lines
1.9 KiB
C++
#pragma once
|
|
|
|
#include "blobgroup2.hpp"
|
|
|
|
#include <qmatrix4x4.h>
|
|
#include <qquickitem.h>
|
|
|
|
class BlobGroup2;
|
|
|
|
class BlobShape2 : public QQuickItem {
|
|
Q_OBJECT
|
|
Q_PROPERTY(BlobGroup2* group READ group WRITE setGroup NOTIFY groupChanged)
|
|
Q_PROPERTY(qreal radius READ radius WRITE setRadius NOTIFY radiusChanged)
|
|
Q_PROPERTY(
|
|
QMatrix4x4 deformMatrix READ deformMatrix NOTIFY deformMatrixChanged)
|
|
Q_PROPERTY(
|
|
QMatrix4x4 rawDeformMatrix READ rawDeformMatrix NOTIFY
|
|
rawDeformMatrixChanged)
|
|
|
|
friend class BlobGroup2;
|
|
|
|
public:
|
|
explicit BlobShape2(QQuickItem* parent = nullptr);
|
|
~BlobShape2() override = default;
|
|
|
|
[[nodiscard]] BlobGroup2* group() const { return m_group; }
|
|
|
|
void setGroup(BlobGroup2* g);
|
|
|
|
[[nodiscard]] qreal radius() const { return m_radius; }
|
|
|
|
void setRadius(qreal r);
|
|
|
|
[[nodiscard]] QMatrix4x4 deformMatrix() const {
|
|
return m_centeredDeformMatrix;
|
|
}
|
|
|
|
[[nodiscard]] QMatrix4x4 rawDeformMatrix() const { return m_deformMatrix; }
|
|
|
|
signals:
|
|
void groupChanged();
|
|
void radiusChanged();
|
|
void deformMatrixChanged();
|
|
void rawDeformMatrixChanged();
|
|
|
|
protected:
|
|
void componentComplete() override;
|
|
void geometryChange(
|
|
const QRectF& newGeometry, const QRectF& oldGeometry) override;
|
|
|
|
virtual bool isExcluded(const BlobShape2*) const { return false; }
|
|
|
|
virtual bool isMoving() const { return false; }
|
|
|
|
virtual bool isCornerExcluded(const BlobShape2* /*other*/) const {
|
|
return false;
|
|
}
|
|
|
|
virtual void cornerRadii(float out[4]) const;
|
|
|
|
virtual void outerCornerRadii(float out[4]) const {
|
|
out[0] = 0;
|
|
out[1] = 0;
|
|
out[2] = 0;
|
|
out[3] = 0;
|
|
}
|
|
|
|
virtual void updatePhysics() {}
|
|
|
|
virtual bool needsFrame() const { return false; }
|
|
|
|
virtual void registerWithGroup();
|
|
virtual void unregisterFromGroup();
|
|
void updateCenteredDeformMatrix();
|
|
|
|
virtual void resetDeformMatrix();
|
|
|
|
BlobGroup2* m_group = nullptr;
|
|
qreal m_radius = 0;
|
|
QMatrix4x4 m_deformMatrix; // identity by default
|
|
QMatrix4x4 m_centeredDeformMatrix;
|
|
};
|