Ajout de Jolt Physics + 1ere version des factory entitecomposants - camera, transform, rigidbody, collider, renderer

This commit is contained in:
Tom Ray
2026-03-22 00:28:03 +01:00
parent 6695d46bcd
commit 48348936a8
1147 changed files with 214331 additions and 353 deletions

View File

@@ -0,0 +1,168 @@
// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
// SPDX-FileCopyrightText: 2021 Jorrit Rouwe
// SPDX-License-Identifier: MIT
#include <TestFramework.h>
#include <UI/UIStaticText.h>
#include <Renderer/Renderer.h>
#include <Renderer/Font.h>
#include <UI/UIManager.h>
JPH_IMPLEMENT_RTTI_VIRTUAL(UIStaticText)
{
JPH_ADD_BASE_CLASS(UIStaticText, UIElement)
}
void UIStaticText::CopyTo(UIElement *ioElement) const
{
UIElement::CopyTo(ioElement);
UIStaticText *element = StaticCast<UIStaticText>(ioElement);
element->mFont = mFont;
element->mText = mText;
element->mTextColor = mTextColor;
element->mDisabledTextColor = mDisabledTextColor;
element->mTextPadLeft = mTextPadLeft;
element->mTextPadRight = mTextPadRight;
element->mTextPadTop = mTextPadTop;
element->mTextPadBottom = mTextPadBottom;
element->mTextAlignment = mTextAlignment;
element->mWrap = mWrap;
}
void UIStaticText::Draw() const
{
DrawCustom(IsDisabled()? mDisabledTextColor : mTextColor);
UIElement::Draw();
}
void UIStaticText::AutoLayout()
{
UIElement::AutoLayout();
// Update size
if (mFont != nullptr)
{
Float2 size = mFont->MeasureText(GetWrappedText());
int w = int(size.x * mFont->GetCharHeight()) + mTextPadLeft + mTextPadRight;
int h = int(size.y * mFont->GetCharHeight()) + mTextPadTop + mTextPadBottom;
if (GetWidth() <= 0)
mWidth.Set(w, PIXELS);
if (GetHeight() <= 0)
mHeight.Set(h, PIXELS);
}
}
String UIStaticText::GetWrappedText() const
{
String text;
if (mWrap)
{
int width = GetWidth() - mTextPadLeft - mTextPadRight;
size_t start_pos = 0, prev_end_pos = size_t(-1);
for (;;)
{
// Find next space or end of text
size_t end_pos = mText.find(' ', prev_end_pos + 1);
if (end_pos == String::npos)
end_pos = mText.length();
// Get line to test for width
String sub = mText.substr(start_pos, end_pos - start_pos);
// Measure width
Float2 size = mFont->MeasureText(sub);
int w = int(size.x * mFont->GetCharHeight());
// Check if still fits
if (width < w)
{
// If nothing was found yet, add the last word anyhow so that we don't get into an infinite loop
if (start_pos >= prev_end_pos
|| prev_end_pos == size_t(-1))
prev_end_pos = end_pos;
// Add current line
text += mText.substr(start_pos, prev_end_pos - start_pos);
text += "\n";
// Start here for new line
start_pos = prev_end_pos + 1;
}
else
{
// Store last fitting line
prev_end_pos = end_pos;
}
// Check end
if (end_pos >= mText.length())
break;
}
// Add last line
if (start_pos < mText.length())
text += mText.substr(start_pos, mText.length() - start_pos);
}
else
{
// Don't autowrap
text = mText;
}
return text;
}
void UIStaticText::DrawCustom(ColorArg inColor) const
{
if (mFont != nullptr && !mText.empty())
{
String text = GetWrappedText();
int y = GetY() + mTextPadTop;
if (mTextAlignment == LEFT)
{
GetManager()->DrawText(GetX() + mTextPadLeft, y, text, mFont, inColor);
}
else if (mTextAlignment == CENTER)
{
// Split lines
Array<String> lines;
StringToVector(text, lines, "\n");
// Amount of space we have horizontally
int width = GetWidth() - mTextPadLeft - mTextPadRight;
// Center each line individually
for (const String &l : lines)
{
Float2 size = mFont->MeasureText(l);
int w = int(size.x * mFont->GetCharHeight());
GetManager()->DrawText(GetX() + (width - w) / 2 + mTextPadLeft, y, l, mFont, inColor);
y += mFont->GetCharHeight();
}
}
else
{
JPH_ASSERT(mTextAlignment == RIGHT);
// Split lines
Array<String> lines;
StringToVector(text, lines, "\n");
// Center each line individually
for (const String &l : lines)
{
Float2 size = mFont->MeasureText(l);
int w = int(size.x * mFont->GetCharHeight());
GetManager()->DrawText(GetX() + GetWidth() - mTextPadRight - w, y, l, mFont, inColor);
y += mFont->GetCharHeight();
}
}
}
}