Wire rendering improvements
This commit is contained in:
parent
58678bfe9d
commit
f75d1f0b5a
13
assets/opensb/player.config.patch
Normal file
13
assets/opensb/player.config.patch
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"wireConfig" : {
|
||||||
|
"innerBrightnessScale" : 20,
|
||||||
|
"firstStripeThickness" : 0.6,
|
||||||
|
"secondStripeThickness" : 0.2,
|
||||||
|
"minWireWidth" : 0.5,
|
||||||
|
"maxWireWidth" : 1,
|
||||||
|
"maxWireJitter" : 0.06,
|
||||||
|
"minWireJitter" : 0.0,
|
||||||
|
"minWireTrans" : 0.1,
|
||||||
|
"maxWireTrans" : 0.4
|
||||||
|
}
|
||||||
|
}
|
@ -22,9 +22,9 @@ WirePane::WirePane(WorldClientPtr worldClient, PlayerPtr player, WorldPainterPtr
|
|||||||
GuiReader reader;
|
GuiReader reader;
|
||||||
reader.construct(assets->json("/interface/wires/wires.config:gui"), this);
|
reader.construct(assets->json("/interface/wires/wires.config:gui"), this);
|
||||||
|
|
||||||
m_insize = Vec2F(context()->textureSize("/interface/wires/inbound.png")) / TilePixels;
|
m_inSize = Vec2F(context()->textureSize("/interface/wires/inbound.png")) / TilePixels;
|
||||||
m_outsize = Vec2F(context()->textureSize("/interface/wires/outbound.png")) / TilePixels;
|
m_outSize = Vec2F(context()->textureSize("/interface/wires/outbound.png")) / TilePixels;
|
||||||
m_nodesize = Vec2F(1.8f, 1.8f);
|
m_nodeSize = Vec2F(1.8f, 1.8f);
|
||||||
|
|
||||||
setTitle({}, "", "Wire you looking at me like that?");
|
setTitle({}, "", "Wire you looking at me like that?");
|
||||||
disableScissoring();
|
disableScissoring();
|
||||||
@ -76,13 +76,13 @@ void WirePane::renderWire(Vec2F from, Vec2F to, Color baseColor) {
|
|||||||
float m_secondStripeThickness;
|
float m_secondStripeThickness;
|
||||||
|
|
||||||
auto assets = Root::singleton().assets();
|
auto assets = Root::singleton().assets();
|
||||||
JsonObject config = assets->json("/player.config:beamGunConfig").toObject();
|
JsonObject config = assets->json("/player.config:wireConfig").toObject();
|
||||||
m_minBeamWidth = config.get("minBeamWidth").toFloat();
|
m_minBeamWidth = config.get("minWireWidth").toFloat();
|
||||||
m_maxBeamWidth = config.get("maxBeamWidth").toFloat();
|
m_maxBeamWidth = config.get("maxWireWidth").toFloat();
|
||||||
m_beamWidthDev = config.value("beamWidthDev", (m_maxBeamWidth - m_minBeamWidth) / 3).toFloat();
|
m_beamWidthDev = config.value("wireWidthDev", (m_maxBeamWidth - m_minBeamWidth) / 3).toFloat();
|
||||||
m_minBeamTrans = config.get("minBeamTrans").toFloat();
|
m_minBeamTrans = config.get("minWireTrans").toFloat();
|
||||||
m_maxBeamTrans = config.get("maxBeamTrans").toFloat();
|
m_maxBeamTrans = config.get("maxWireTrans").toFloat();
|
||||||
m_beamTransDev = config.value("beamTransDev", (m_maxBeamTrans - m_minBeamTrans) / 3).toFloat();
|
m_beamTransDev = config.value("wireTransDev", (m_maxBeamTrans - m_minBeamTrans) / 3).toFloat();
|
||||||
m_innerBrightnessScale = config.get("innerBrightnessScale").toFloat();
|
m_innerBrightnessScale = config.get("innerBrightnessScale").toFloat();
|
||||||
m_firstStripeThickness = config.get("firstStripeThickness").toFloat();
|
m_firstStripeThickness = config.get("firstStripeThickness").toFloat();
|
||||||
m_secondStripeThickness = config.get("secondStripeThickness").toFloat();
|
m_secondStripeThickness = config.get("secondStripeThickness").toFloat();
|
||||||
@ -121,7 +121,7 @@ void WirePane::renderImpl() {
|
|||||||
Vec2I position = entity->tilePosition() + entity->nodePosition({WireDirection::Input, i});
|
Vec2I position = entity->tilePosition() + entity->nodePosition({WireDirection::Input, i});
|
||||||
if (!m_worldClient->isTileProtected(position)) {
|
if (!m_worldClient->isTileProtected(position)) {
|
||||||
context()->drawQuad("/interface/wires/inbound.png",
|
context()->drawQuad("/interface/wires/inbound.png",
|
||||||
camera.worldToScreen(centerOfTile(position) - (m_insize / 2.0f)),
|
camera.worldToScreen(centerOfTile(position) - (m_inSize / 2.0f)),
|
||||||
camera.pixelRatio(), white);
|
camera.pixelRatio(), white);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -130,7 +130,7 @@ void WirePane::renderImpl() {
|
|||||||
Vec2I position = entity->tilePosition() + entity->nodePosition({WireDirection::Output, i});
|
Vec2I position = entity->tilePosition() + entity->nodePosition({WireDirection::Output, i});
|
||||||
if (!m_worldClient->isTileProtected(position)) {
|
if (!m_worldClient->isTileProtected(position)) {
|
||||||
context()->drawQuad("/interface/wires/outbound.png",
|
context()->drawQuad("/interface/wires/outbound.png",
|
||||||
camera.worldToScreen(centerOfTile(position) - (m_outsize / 2.0f)),
|
camera.worldToScreen(centerOfTile(position) - (m_outSize / 2.0f)),
|
||||||
camera.pixelRatio(), white);
|
camera.pixelRatio(), white);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -216,7 +216,7 @@ WireConnector::SwingResult WirePane::swing(WorldGeometry const& geometry, Vec2F
|
|||||||
float bestDist = 10000;
|
float bestDist = 10000;
|
||||||
for (auto entity : m_worldClient->query<WireEntity>(bounds)) {
|
for (auto entity : m_worldClient->query<WireEntity>(bounds)) {
|
||||||
for (size_t i = 0; i < entity->nodeCount(WireDirection::Input); ++i) {
|
for (size_t i = 0; i < entity->nodeCount(WireDirection::Input); ++i) {
|
||||||
RectF inbounds = RectF::withSize(centerOfTile(entity->tilePosition() + entity->nodePosition({WireDirection::Input, i})) - (m_nodesize / 2.0f), m_nodesize);
|
RectF inbounds = RectF::withSize(centerOfTile(entity->tilePosition() + entity->nodePosition({WireDirection::Input, i})) - (m_nodeSize / 2.0f), m_nodeSize);
|
||||||
if (geometry.rectContains(inbounds, pos)) {
|
if (geometry.rectContains(inbounds, pos)) {
|
||||||
if (!matchNode) {
|
if (!matchNode) {
|
||||||
matchNode = WireConnection{entity->tilePosition(), i};
|
matchNode = WireConnection{entity->tilePosition(), i};
|
||||||
@ -234,7 +234,7 @@ WireConnector::SwingResult WirePane::swing(WorldGeometry const& geometry, Vec2F
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (size_t i = 0; i < entity->nodeCount(WireDirection::Output); ++i) {
|
for (size_t i = 0; i < entity->nodeCount(WireDirection::Output); ++i) {
|
||||||
RectF outbounds = RectF::withSize(centerOfTile(entity->tilePosition() + entity->nodePosition({WireDirection::Output, i})) - (m_nodesize / 2.0f), m_nodesize);
|
RectF outbounds = RectF::withSize(centerOfTile(entity->tilePosition() + entity->nodePosition({WireDirection::Output, i})) - (m_nodeSize / 2.0f), m_nodeSize);
|
||||||
if (geometry.rectContains(outbounds, pos)) {
|
if (geometry.rectContains(outbounds, pos)) {
|
||||||
if (!matchNode) {
|
if (!matchNode) {
|
||||||
matchNode = WireConnection{entity->tilePosition(), i};
|
matchNode = WireConnection{entity->tilePosition(), i};
|
||||||
@ -281,7 +281,7 @@ WireConnector::SwingResult WirePane::swing(WorldGeometry const& geometry, Vec2F
|
|||||||
float bestDist = 10000;
|
float bestDist = 10000;
|
||||||
for (auto entity : m_worldClient->query<WireEntity>(bounds)) {
|
for (auto entity : m_worldClient->query<WireEntity>(bounds)) {
|
||||||
for (size_t i = 0; i < entity->nodeCount(WireDirection::Input); ++i) {
|
for (size_t i = 0; i < entity->nodeCount(WireDirection::Input); ++i) {
|
||||||
RectF inbounds = RectF::withSize(centerOfTile(entity->tilePosition() + entity->nodePosition({WireDirection::Input, i})) - (m_nodesize / 2.0f), m_nodesize);
|
RectF inbounds = RectF::withSize(centerOfTile(entity->tilePosition() + entity->nodePosition({WireDirection::Input, i})) - (m_nodeSize / 2.0f), m_nodeSize);
|
||||||
if (geometry.rectContains(inbounds, pos) && entity->connectionsForNode({WireDirection::Input, i}).size() > 0) {
|
if (geometry.rectContains(inbounds, pos) && entity->connectionsForNode({WireDirection::Input, i}).size() > 0) {
|
||||||
if (!matchNode) {
|
if (!matchNode) {
|
||||||
matchPosition = entity->tilePosition();
|
matchPosition = entity->tilePosition();
|
||||||
@ -299,7 +299,7 @@ WireConnector::SwingResult WirePane::swing(WorldGeometry const& geometry, Vec2F
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (size_t i = 0; i < entity->nodeCount(WireDirection::Output); ++i) {
|
for (size_t i = 0; i < entity->nodeCount(WireDirection::Output); ++i) {
|
||||||
RectF outbounds = RectF::withSize(centerOfTile(entity->tilePosition() + entity->nodePosition({WireDirection::Output, i})) - (m_nodesize / 2.0f), m_nodesize);
|
RectF outbounds = RectF::withSize(centerOfTile(entity->tilePosition() + entity->nodePosition({WireDirection::Output, i})) - (m_nodeSize / 2.0f), m_nodeSize);
|
||||||
if (geometry.rectContains(outbounds, pos) && entity->connectionsForNode({WireDirection::Output, i}).size() > 0) {
|
if (geometry.rectContains(outbounds, pos) && entity->connectionsForNode({WireDirection::Output, i}).size() > 0) {
|
||||||
if (!matchNode) {
|
if (!matchNode) {
|
||||||
matchPosition = entity->tilePosition();
|
matchPosition = entity->tilePosition();
|
||||||
|
@ -38,9 +38,9 @@ private:
|
|||||||
WireDirection m_sourceDirection;
|
WireDirection m_sourceDirection;
|
||||||
WireConnection m_sourceConnector;
|
WireConnection m_sourceConnector;
|
||||||
|
|
||||||
Vec2F m_insize;
|
Vec2F m_inSize;
|
||||||
Vec2F m_outsize;
|
Vec2F m_outSize;
|
||||||
Vec2F m_nodesize;
|
Vec2F m_nodeSize;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -147,7 +147,7 @@ void GuiContext::drawQuad(AssetPath const& texName, RectF const& screenCoords, V
|
|||||||
renderer()->immediatePrimitives().emplace_back(std::in_place_type_t<RenderQuad>(), assetTextureGroup()->loadTexture(texName), screenCoords, color, 0.0f);
|
renderer()->immediatePrimitives().emplace_back(std::in_place_type_t<RenderQuad>(), assetTextureGroup()->loadTexture(texName), screenCoords, color, 0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GuiContext::drawQuad(AssetPath const& texName, Vec2F const& screenPos, int pixelRatio, Vec4B const& color) {
|
void GuiContext::drawQuad(AssetPath const& texName, Vec2F const& screenPos, float pixelRatio, Vec4B const& color) {
|
||||||
renderer()->immediatePrimitives().emplace_back(std::in_place_type_t<RenderQuad>(), assetTextureGroup()->loadTexture(texName), screenPos, pixelRatio, color, 0.0f);
|
renderer()->immediatePrimitives().emplace_back(std::in_place_type_t<RenderQuad>(), assetTextureGroup()->loadTexture(texName), screenPos, pixelRatio, color, 0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -160,7 +160,7 @@ void GuiContext::drawQuad(AssetPath const& texName, RectF const& texCoords, Rect
|
|||||||
color, 0.0f);
|
color, 0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GuiContext::drawDrawable(Drawable drawable, Vec2F const& screenPos, int pixelRatio, Vec4B const& color) {
|
void GuiContext::drawDrawable(Drawable drawable, Vec2F const& screenPos, float pixelRatio, Vec4B const& color) {
|
||||||
if (drawable.isLine())
|
if (drawable.isLine())
|
||||||
drawable.linePart().width *= pixelRatio;
|
drawable.linePart().width *= pixelRatio;
|
||||||
|
|
||||||
|
@ -66,10 +66,10 @@ public:
|
|||||||
|
|
||||||
void drawQuad(RectF const& screenCoords, Vec4B const& color = Vec4B::filled(255));
|
void drawQuad(RectF const& screenCoords, Vec4B const& color = Vec4B::filled(255));
|
||||||
void drawQuad(AssetPath const& texName, RectF const& screenCoords, Vec4B const& color = Vec4B::filled(255));
|
void drawQuad(AssetPath const& texName, RectF const& screenCoords, Vec4B const& color = Vec4B::filled(255));
|
||||||
void drawQuad(AssetPath const& texName, Vec2F const& screenPos, int pixelRatio, Vec4B const& color = Vec4B::filled(255));
|
void drawQuad(AssetPath const& texName, Vec2F const& screenPos, float pixelRatio, Vec4B const& color = Vec4B::filled(255));
|
||||||
void drawQuad(AssetPath const& texName, RectF const& texCoords, RectF const& screenCoords, Vec4B const& color = Vec4B::filled(255));
|
void drawQuad(AssetPath const& texName, RectF const& texCoords, RectF const& screenCoords, Vec4B const& color = Vec4B::filled(255));
|
||||||
|
|
||||||
void drawDrawable(Drawable drawable, Vec2F const& screenPos, int pixelRatio, Vec4B const& color = Vec4B::filled(255));
|
void drawDrawable(Drawable drawable, Vec2F const& screenPos, float pixelRatio, Vec4B const& color = Vec4B::filled(255));
|
||||||
|
|
||||||
void drawLine(Vec2F const& begin, Vec2F const end, Vec4B const& color, float lineWidth = 1);
|
void drawLine(Vec2F const& begin, Vec2F const end, Vec4B const& color, float lineWidth = 1);
|
||||||
void drawPolyLines(PolyF const& poly, Vec4B const& color, float lineWidth = 1);
|
void drawPolyLines(PolyF const& poly, Vec4B const& color, float lineWidth = 1);
|
||||||
|
Loading…
Reference in New Issue
Block a user