v1.4.4
This commit is contained in:
commit
9c94d113d3
10260 changed files with 1237388 additions and 0 deletions
117
source/windowing/StarPortraitWidget.cpp
Normal file
117
source/windowing/StarPortraitWidget.cpp
Normal file
|
@ -0,0 +1,117 @@
|
|||
#include "StarPortraitWidget.hpp"
|
||||
#include "StarJsonExtra.hpp"
|
||||
#include "StarRoot.hpp"
|
||||
#include "StarImageMetadataDatabase.hpp"
|
||||
#include "StarAssets.hpp"
|
||||
|
||||
namespace Star {
|
||||
|
||||
PortraitWidget::PortraitWidget(PortraitEntityPtr entity, PortraitMode mode) : m_entity(entity), m_portraitMode(mode) {
|
||||
m_scale = 1;
|
||||
m_iconMode = false;
|
||||
|
||||
init();
|
||||
}
|
||||
|
||||
PortraitWidget::PortraitWidget() {
|
||||
m_entity = {};
|
||||
m_portraitMode = PortraitMode::Full;
|
||||
m_scale = 1;
|
||||
m_iconMode = false;
|
||||
|
||||
init();
|
||||
}
|
||||
|
||||
RectI PortraitWidget::getScissorRect() const {
|
||||
return noScissor();
|
||||
}
|
||||
|
||||
void PortraitWidget::renderImpl() {
|
||||
auto imgMetadata = Root::singleton().imageMetadataDatabase();
|
||||
|
||||
Vec2I offset = Vec2I();
|
||||
if (m_iconMode) {
|
||||
auto imgSize = Vec2F(imgMetadata->imageSize(m_iconImage));
|
||||
offset = Vec2I(m_scale * imgSize / 2);
|
||||
offset += m_iconOffset;
|
||||
context()->drawInterfaceQuad(m_iconImage, Vec2F(screenPosition()), m_scale);
|
||||
}
|
||||
if (m_entity) {
|
||||
List<Drawable> portrait = m_entity->portrait(m_portraitMode);
|
||||
for (auto i : portrait) {
|
||||
i.scale(m_scale);
|
||||
context()->drawInterfaceDrawable(i, Vec2F(screenPosition() + offset));
|
||||
}
|
||||
} else {
|
||||
if (m_portraitMode == PortraitMode::Bust || m_portraitMode == PortraitMode::Head) {
|
||||
Vec2I pos = offset;
|
||||
auto imgSize = Vec2F(imgMetadata->imageSize(m_noEntityImagePart));
|
||||
pos -= Vec2I(m_scale * imgSize * 0.5);
|
||||
context()->drawInterfaceQuad(m_noEntityImagePart, Vec2F(screenPosition() + pos), m_scale);
|
||||
} else {
|
||||
Vec2I pos = offset;
|
||||
auto imgSize = Vec2F(imgMetadata->imageSize(m_noEntityImageFull));
|
||||
pos -= Vec2I(m_scale * imgSize * 0.5);
|
||||
context()->drawInterfaceQuad(m_noEntityImageFull, Vec2F(screenPosition() + pos), m_scale);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void PortraitWidget::init() {
|
||||
auto assets = Root::singleton().assets();
|
||||
|
||||
m_noEntityImageFull = assets->json("/interface.config:portraitNullPlayerImageFull").toString();
|
||||
m_noEntityImagePart = assets->json("/interface.config:portraitNullPlayerImagePart").toString();
|
||||
m_iconImage = assets->json("/interface.config:portraitIconImage").toString();
|
||||
m_iconOffset = jsonToVec2I(assets->json("/interface.config:portraitIconOffset"));
|
||||
|
||||
updateSize();
|
||||
}
|
||||
|
||||
void PortraitWidget::setEntity(PortraitEntityPtr entity) {
|
||||
m_entity = entity;
|
||||
updateSize();
|
||||
}
|
||||
|
||||
void PortraitWidget::setMode(PortraitMode mode) {
|
||||
m_portraitMode = mode;
|
||||
updateSize();
|
||||
}
|
||||
|
||||
void PortraitWidget::setScale(float scale) {
|
||||
m_scale = scale;
|
||||
updateSize();
|
||||
}
|
||||
|
||||
void PortraitWidget::setIconMode() {
|
||||
m_iconMode = true;
|
||||
updateSize();
|
||||
}
|
||||
|
||||
bool PortraitWidget::sendEvent(InputEvent const&) {
|
||||
return false;
|
||||
}
|
||||
|
||||
void PortraitWidget::updateSize() {
|
||||
auto imgMetadata = Root::singleton().imageMetadataDatabase();
|
||||
|
||||
if (m_iconMode) {
|
||||
setSize(Vec2I(imgMetadata->imageSize(m_iconImage) * m_scale));
|
||||
} else {
|
||||
if (m_entity) {
|
||||
setSize(Vec2I(
|
||||
(Drawable::boundBoxAll(m_entity->portrait(m_portraitMode), false)
|
||||
.size()
|
||||
* TilePixels
|
||||
* m_scale)
|
||||
.ceil()));
|
||||
} else {
|
||||
if (m_portraitMode == PortraitMode::Bust || m_portraitMode == PortraitMode::Head)
|
||||
setSize(Vec2I(imgMetadata->imageSize(m_iconImage) * m_scale));
|
||||
else
|
||||
setSize(Vec2I(imgMetadata->imageSize(m_noEntityImageFull) * m_scale));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue