mirror of
https://github.com/zeldaret/ss
synced 2026-07-10 06:26:47 -04:00
Link d2d (#145)
This commit is contained in:
+36
-38
@@ -1,15 +1,15 @@
|
||||
#include "d/lyt/d2d.h"
|
||||
|
||||
#include "d/d_font_manager.h"
|
||||
#include "d/d_textunk.h"
|
||||
#include "d/lyt/d_textbox.h"
|
||||
#include "d/lyt/d_window.h"
|
||||
#include "egg/gfx/eggScreen.h"
|
||||
#include "nw4r/lyt/lyt_bounding.h"
|
||||
#include "nw4r/lyt/lyt_group.h"
|
||||
#include "nw4r/lyt/lyt_pane.h"
|
||||
#include "nw4r/lyt/lyt_picture.h"
|
||||
#include "nw4r/lyt/lyt_textBox.h"
|
||||
#include "nw4r/lyt/lyt_utils.h"
|
||||
#include "nw4r/lyt/lyt_window.h"
|
||||
#include "sized_string.h"
|
||||
|
||||
using namespace nw4r::lyt;
|
||||
@@ -200,15 +200,15 @@ void Multi_c::calcAfter() {
|
||||
|
||||
extern "C" bool NeedsScreenAdjustment();
|
||||
|
||||
// Largerly copied from m2d::Simple_c::draw
|
||||
// Largely copied from m2d::Simple_c::draw
|
||||
void Multi_c::draw() {
|
||||
nw4r::ut::Rect r = mLayout.GetLayoutRect();
|
||||
f32 near = 0.0f;
|
||||
f32 far = 500.0f;
|
||||
EGG::Screen s;
|
||||
bool needsAdjust = NeedsScreenAdjustment();
|
||||
f32 f1 = EGG::Screen::GetSizeXMax(EGG::Screen::TV_MODE_UNK_3);
|
||||
f32 f2 = EGG::Screen::GetSizeXMax(EGG::Screen::TV_MODE_16_9);
|
||||
f32 f1 = EGG::Screen::GetSizeXMax(EGG::Screen::TV_MODE_16_9);
|
||||
f32 f2 = EGG::Screen::GetSizeXMax(EGG::Screen::TV_MODE_4_3);
|
||||
|
||||
f32 left = needsAdjust ? f1 * r.left / f2 : r.left;
|
||||
f32 right = needsAdjust ? f1 * r.right / f2 : r.right;
|
||||
@@ -445,8 +445,6 @@ extern "C" const char *fn_801B2600(const char *);
|
||||
extern "C" void fn_800AF930(dTextBox_c *, const char *);
|
||||
extern "C" void fn_800B0F40(dTextBox_c *);
|
||||
|
||||
// NOTE: This function uses `textBox->GetTranslateX1()` as a general placeholder to figure
|
||||
// out the details first. In reality these are all different functions!
|
||||
void LytBase_c::setProperties(nw4r::lyt::Pane *pane, f32 posX, f32 posY, f32 scale, f32 spaceX, f32 spaceY) {
|
||||
if (pane->GetName()[0] != 'T') {
|
||||
return;
|
||||
@@ -475,41 +473,40 @@ void LytBase_c::setProperties(nw4r::lyt::Pane *pane, f32 posX, f32 posY, f32 sca
|
||||
}
|
||||
|
||||
nw4r::math::VEC3 t2 = textBox->GetTranslate();
|
||||
t2.x += textBox->GetTranslateX1();
|
||||
t2.y += textBox->GetTranslateX1();
|
||||
t2.x += UnkTextThing::getFn800B2030();
|
||||
t2.y += UnkTextThing::getFn800B2040();
|
||||
textBox->SetTranslate(t2);
|
||||
|
||||
if (scale != -9999.0f) {
|
||||
const nw4r::ut::Font *f = textBox->GetFont();
|
||||
if (f != nullptr) {
|
||||
// VEC2 internally copied via GPRs here, should be FPRs
|
||||
textBox->SetScale(scale * 0.01f);
|
||||
scale *= 0.01f;
|
||||
textBox->SetScale(scale);
|
||||
}
|
||||
} else {
|
||||
const nw4r::ut::Font *f = textBox->GetFont();
|
||||
if (f != nullptr) {
|
||||
// VEC2 internally copied via GPRs here, should be FPRs
|
||||
textBox->SetScale(textBox->GetTranslateX1());
|
||||
textBox->SetScale(UnkTextThing::getFn800B1FD0());
|
||||
}
|
||||
}
|
||||
|
||||
f32 f4 = 0.0f;
|
||||
f32 f6 = 0.0f;
|
||||
f32 f4 = 0.0f;
|
||||
|
||||
if (spaceX != -9999.0f) {
|
||||
textBox->SetCharSpace(spaceX);
|
||||
} else {
|
||||
f6 = textBox->GetTranslateX1();
|
||||
f6 = UnkTextThing::getFn800B2010();
|
||||
}
|
||||
|
||||
if (spaceY != -9999.0f) {
|
||||
textBox->SetLineSpace(spaceY);
|
||||
} else {
|
||||
f4 = textBox->GetTranslateX1();
|
||||
f4 = UnkTextThing::getFn800B1FF0();
|
||||
}
|
||||
|
||||
textBox->SetCharSpace(f6 + textBox->GetCharSpace() + textBox->GetTranslateX1());
|
||||
textBox->SetLineSpace(f4 + textBox->GetLineSpace() + textBox->GetTranslateX1());
|
||||
textBox->SetCharSpace(textBox->GetCharSpace() + UnkTextThing::getFn800B2020() + f6);
|
||||
textBox->SetLineSpace(textBox->GetLineSpace() + UnkTextThing::getFn800B2000() + f4);
|
||||
fn_800AB930(textBox);
|
||||
}
|
||||
|
||||
@@ -595,7 +592,7 @@ bool LytBase_c::fn_800ABB80(dTextBox_c *textbox1, dTextBox_c *textbox2, int arg)
|
||||
bool LytBase_c::fn_800ABCE0(
|
||||
const nw4r::lyt::res::ExtUserData *userDatum, dTextBox_c *textbox1, dTextBox_c *textbox2, int arg
|
||||
) {
|
||||
int userDatInt = userDatum->GetInt();
|
||||
s32 userDatInt = userDatum->GetInt();
|
||||
SizedString<0x40> str1;
|
||||
SizedString<0x40> str2;
|
||||
|
||||
@@ -605,11 +602,9 @@ bool LytBase_c::fn_800ABCE0(
|
||||
if (arg != -1) {
|
||||
userDatInt = arg;
|
||||
}
|
||||
str2.sprintf(":%02d", userDatInt);
|
||||
// TODO this operator is not behaving correctly here - there's
|
||||
// an additional null check, and the source string address is
|
||||
// computed twice via stack instead of once.
|
||||
str1 += str2;
|
||||
SizedString<0x40> &fmt = str2;
|
||||
fmt.sprintf(":%02d", userDatInt);
|
||||
str1.append(fmt);
|
||||
}
|
||||
|
||||
const char *text = LMS_GetTextByLabel(getMsbtInfo(), str1);
|
||||
@@ -693,17 +688,15 @@ extern "C" void fn_800AF840(dTextBox_c *textbox1, MsbtInfo *, const char *, int
|
||||
bool LytBase_c::fn_800AC1AC(
|
||||
const nw4r::lyt::res::ExtUserData *userDatum, dTextBox_c *textbox1, dTextBox_c *textbox2, int arg, void *unk
|
||||
) {
|
||||
int userDatInt = userDatum->GetInt();
|
||||
s32 userDatInt = userDatum->GetInt();
|
||||
SizedString<0x40> str1;
|
||||
SizedString<0x40> str2;
|
||||
|
||||
str1 = textbox2->GetName();
|
||||
if (userDatInt != 0) {
|
||||
str2.sprintf(":%02d", 0);
|
||||
// TODO this operator is not behaving correctly here - there's
|
||||
// an additional null check, and the source string address is
|
||||
// computed twice via stack instead of once.
|
||||
str1 += str2;
|
||||
SizedString<0x40> &fmt = str2;
|
||||
fmt.sprintf(":%02d", 0);
|
||||
str1.append(fmt);
|
||||
}
|
||||
|
||||
fn_800AF840(textbox1, getMsbtInfo(), str1, arg, unk);
|
||||
@@ -754,18 +747,17 @@ bool hasSameBaseName(const char *left, const char *right) {
|
||||
char *sRef = "ref";
|
||||
|
||||
void dSubPane::linkMeters(nw4r::lyt::Group *group, d2d::SubPaneList *meterGroup) {
|
||||
// single regswap
|
||||
nw4r::ut::LinkList<d2d::SubPaneListNode, 0>::Iterator beginIt = meterGroup->GetBeginIter();
|
||||
nw4r::ut::LinkList<d2d::SubPaneListNode, 0>::Iterator endIt = meterGroup->GetEndIter();
|
||||
SubPaneList::Iterator beginIt = meterGroup->GetBeginIter();
|
||||
SubPaneList::Iterator endIt = meterGroup->GetEndIter();
|
||||
|
||||
for (nw4r::lyt::PaneList::Iterator paneIt = group->GetPaneList()->GetBeginIter();
|
||||
paneIt != group->GetPaneList()->GetEndIter(); ++paneIt) {
|
||||
nw4r::lyt::PaneList::Iterator paneEndIt = group->GetPaneList()->GetEndIter();
|
||||
|
||||
for (nw4r::lyt::PaneList::Iterator paneIt = group->GetPaneList()->GetBeginIter(); paneIt != paneEndIt; ++paneIt) {
|
||||
nw4r::lyt::Pane *pane = paneIt->mTarget;
|
||||
int num = pane->GetExtUserDataNum();
|
||||
if (num != 0) {
|
||||
if (pane->GetExtUserDataNum()) {
|
||||
const nw4r::lyt::res::ExtUserData *dat = pane->FindExtUserDataByName(sRef);
|
||||
if (dat != nullptr && dat->GetType() == nw4r::lyt::res::TYPE_STRING) {
|
||||
for (nw4r::ut::LinkList<d2d::SubPaneListNode, 0>::Iterator it = beginIt; it != endIt; ++it) {
|
||||
for (SubPaneList::Iterator it = beginIt; it != endIt; ++it) {
|
||||
d2d::dSubPane *meter = it->mpLytPane;
|
||||
if (!meter->LytMeter0x24()) {
|
||||
if (hasSameBaseName(dat->GetString(), meter->getName())) {
|
||||
@@ -895,6 +887,12 @@ void AnmGroupBase_c::setBackward() {
|
||||
mpFrameCtrl->setBackward();
|
||||
}
|
||||
|
||||
void pushToEnd(nw4r::lyt::Pane *pane) {
|
||||
nw4r::lyt::Pane *parent = pane->GetParent();
|
||||
parent->RemoveChild(pane);
|
||||
parent->AppendChild(pane);
|
||||
}
|
||||
|
||||
bool AnmGroups::init(
|
||||
d2d::AnmGroup_c *pGroups, const LytBrlanMapping *mappings, u32 num, m2d::ResAccIf_c *acc, d2d::Layout_c *layout
|
||||
) {
|
||||
|
||||
Reference in New Issue
Block a user