Git Product home page Git Product logo

u3d-community / u3d Goto Github PK

View Code? Open in Web Editor NEW
153.0 14.0 25.0 164.28 MB

Open-source, cross-platform 2D and 3D game engine built in C++

Home Page: https://u3d.io

License: MIT License

CMake 2.87% C++ 77.68% Mustache 0.01% MAXScript 0.69% Objective-C 0.05% Lua 4.35% Kotlin 0.05% Batchfile 0.14% GLSL 1.22% HLSL 1.42% AngelScript 10.70% ActionScript 0.16% Shell 0.17% HTML 0.09% SCSS 0.01% Python 0.02% MDX 0.38%
game-engine gamedev multi-platform open-source game-development game

u3d's Introduction

U3D Logo

U3D

android ios linux macos windows GitHub Discord

U3D is a open source, lightweight, cross-platform 2D and 3D game engine implemented in C++ and released under the MIT license. Forked from Urho3D and greatly inspired by OGRE and Horde3D.

Main website: https://u3d.io/

License

Licensed under the MIT license, see LICENSE for details.

Features

U3D Screenshot

  • Cross-platform support: Windows, Linux, macOS, iOS, tvOS, Android, Raspberry Pi (and other generic ARM boards), and Web with Emscripten
  • Powerful and configurable rendering pipeline, with implementations for forward, light pre-pass and deferred rendering
  • OpenGL, OpenGL ES, WebGL and Direct3D11
  • All-in-one editor built with ActionScript, allowing you to easily customize the editor to your game needs
  • Two scripting languages available for creating game logic: Lua and AngelScript
  • UI, localization and database subsystems
  • Component based scene model
  • Skeletal, vertex morph and node animation
  • Point, spot and directional lights
  • Cascaded shadow maps
  • Particle rendering
  • Geomipmapped terrain
  • Static and skinned decals
  • LODs
  • Automatic instancing
  • Software rasterized occlusion culling
  • Post-processing
  • HDR and PBR rendering
  • 2D sprites and particles that integrate into the 3D scene
  • Task-based multithreading
  • Hierarchical performance profiler
  • Scene, object and prefab load/save in binary, XML and JSON formats
  • Keyframe animation of object attributes
  • Background loading of resources
  • Keyboard, mouse, joystick and touch input
  • High-performance math library
  • Physics powered by Bullet and Box2D
  • Networking powered by SLikeNet
  • Pathfinding and Crowd Simulation via Recast/Detour
  • Supported images: JPEG, PNG, TGA, BMP, PSD, GIF, HDR
  • Compressed image support: DDS, KTX, PVR
  • Import virtually any 3D file format via Assimp
  • 2D and 3D audio playblack, Ogg Vorbis and WAV support
  • TrueType font rendering
  • Built as a single external library, can be linked statically or dynamically

Design Goals

  • Productive: Do not reinvent the wheel. Engine should reduce development time. Less yak shaving, more game making.
  • Fast: Compile and run fast. Parallelize when possible.
  • Modular: Only use what you need. Flexibility for power users.

Conventions

U3D uses the following conventions and principles:

  • Left-handed coordinates. Positive X, Y & Z axes point to the right, up, and forward, and positive rotation is clockwise.
  • Degrees are used for angles.
  • Clockwise vertices define a front face.
  • Audio volume is specified from 0.0 (silence) to 1.0 (full volume)
  • Path names use slash instead of backslash. Paths will be converted internally into the necessary format when calling into the operating system.
  • In the script API, properties are used whenever appropriate instead of Set...() and Get...() functions. If the setter and getter require index parameters, the property will use array-style indexing, and its name will be in plural. For example model->SetMaterial(0, myMaterial) in C++ would become model.materials[0] = myMaterial in script.
  • Raw pointers are used whenever possible in the classes' public API. This simplifies exposing functions & classes to script, and is relatively safe, because SharedPtr & WeakPtr use intrusive reference counting.
  • When an object's public API allows assigning a reference counted object to it through a Set...() function, this implies ownership through a SharedPtr. For example assigning a Material to a StaticModel, or a Viewport to Renderer. To end the assignment and free the reference counted object, call the Set...() function again with a null argument.
  • No C++ exceptions. Error return values (false / null pointer / dummy reference) are used instead. Script exceptions are used when there is no other sensible way, such as with out of bounds array access.
  • Feeding illegal data to public API functions, such as out of bounds indices or null pointers, should not cause crashes or corruption. Instead errors are logged as appropriate.
  • Third party libraries are included as source code for the build process. They are however hidden from the public API as completely as possible.

Community

U3D's development is community-driven and completely independent, empowering developers to build and design better tools to help indie game development. We invite you to familiarize yourself with our Code of Conduct and get to know us on:

If you'd like to help build U3D, we have a guide just for you! Check it out: Contributor Guide.

Credits

U3D is greatly inspired by Urho3D, OGRE and Horde3D. Additional inspiration & research used:

U3D uses the following third-party libraries:

Media credits

  • Jack and mushroom models from the realXtend project. (https://www.realxtend.org)
  • Ninja model and terrain, water, smoke, flare and status bar textures from OGRE.
  • BlueHighway font from Larabie Fonts.
  • Anonymous Pro font by Mark Simonson.
  • NinjaSnowWar sounds by Veli-Pekka Tätilä.
  • PBR textures from Substance Share. (https://share.allegorithmic.com)
  • IBL textures from HDRLab's sIBL Archive.
  • Dieselpunk Moto model by allexandr007.
  • Mutant & Kachujin models from Mixamo.
  • Skies from Polyhaven. (https://polyhaven.com/license)

License / copyright information included with the assets as necessary. All other assets (including shaders) by U3D authors and licensed similarly as the engine itself.

Contributors

u3d's People

Contributors

1vank avatar alexparlett avatar arnislielturks avatar aster2013 avatar cadaver avatar cosmy1 avatar darwikey avatar enhex avatar eugeneko avatar friesencr avatar hjmediastudios avatar iainmerrick avatar juj avatar klaussilveira avatar konstantintomashevich avatar lumak avatar mike3d avatar monkeyfirst avatar ninjastone avatar orefkov avatar plasmadev5 avatar predatormf avatar rokups avatar sirnate0 avatar superwangkai avatar svifylabs avatar szamq avatar thecomet avatar urho3d-travis-ci avatar weitjong avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

u3d's Issues

CMake Generation is very slow for Xcode.

The CMake step of the CI runs take about 7 minutes for MacOS, and about 12 minutes for iOS. In contrast, it takes about 1.5 minutes on Windows and 0.25 minutes on Linux. Just watching the builds progressing, it seems to be that the tests for headers/functions/macros is fairly slow (a couple seconds each, maybe).

Possibly we should consider caching some of the results of the header/function/macro checks, e.g. using something like https://github.com/cristianadam/cmake-checks-cache.

Additionally/alternatively, we can see if some of the checks can be grouped together CHECK_INCLUDE_FILES instead of CHECK_INCLUDE_FILE to reduce the total number of checks.

Samples use Contradictory Titles

The samples set two different window titles:

In Sample::Setup():

engineParameters_[EP_WINDOW_TITLE] = GetTypeName();

In Sample::Start() (via Sample::SetWindowTitleAndIcon())

graphics->SetWindowTitle("Urho3D Sample");

Hardly a breaking issue, but one of them should be removed. I would prefer the second, but only because I use a sample as a base for my own projects, and I can overwrite the samples engineParameters_ in my own Setup() function.

ObjectAnimation as a Resource only loads XML

ObjectAnimation supports saving to/from XML and JSON. However, when loaded as a resource through BeginLoad (e.g. through the ResourceCache), it will only load it as XML, even if you pass a JSON file. It should instead check the filename extension to deduce whether it is xml or json (or maybe even the content).

Migrate String Formating to fmt

I much prefer the fmt library's style of formatting with {} over the traditional printf style formatting with %s, %d, %f, etc. Mainly it's not an issue, as there's already some code I use to add it to Urho, but all of the formatted log macros like URHO3D_LOGDEBUGF use the printf style.

Rather than directly replacing them, an alternative would be something like URHO3D_LOGDEBUGFMT, but that is a really long name. If we're fine with some breaking changes, I would prefer renaming the old one, possibly to something like URHO3D_LOGDEBUGX, and use URHO3D_LOGDEBUGF for the fmt-style formatting.

CI Environment Variable Magic

There is a fairly large amount of special behavior in our build system that is conditional on the CI environment variable. When github executes the workflows, this is set to true, but when running a build locally this is unlikely to be the case.

Is there a reason for this difference?

If not, I would propose that we remove as many of them as feasible, as it should make debugging failed workflow runs simpler, as the logic will be the same between a local machine and the remote machine without having to specifically try to emulate the CI environment.

Improve QA Workflow

I think there are several options to improve the QA workflow (which I'm pretty sure just fails each time at present).

  1. We can improve the .clang-format file to better reflect Urho's conventions, as well as update it for more modern clang-format (some of the parameters have changed, at least compared to version 14 I have on my laptop).
    • I suspect that at least one commit will need to be made that will apply many style changes throughout the code, but hopefully we can keep that "many" fairly small.
  2. We can actually have the QA run push a commit that applies the clang-format results to the code when we have PRs. This means developers do not have to install clang-format themselves, and keeps behavior consistent with the version of clang-format used by the Github Actions runner. The following actions seem to allow it, though there may be other better ones:
  3. We can enable clang-tidy linting, though I suspect that may also require some work to have it not needlessly flag lots of existing Urho code.

STL Containers?

An issue to discuss switching to STL containers for 2.x.

From the project description, we are aiming to be (emphasis added)

Productive: Do not reinvent the wheel. Engine should reduce development time

Switching to the STL means that users have to reinvent the wheel slightly less when looking for code snippets on the internet. But it is also a significant break in compatibility with existing code, as our containers use CamelCase methods, while the STL uses snake_case.


Some questions to start off:

  1. Yes or No to switching for 2.x?
  2. Which containers (e.g. do we include String)?
  3. Which STL (the STL, EASTL, etc.)?
  4. Backwards compatibility: Is there anything to aid the user in the transition?
  5. What about where the STL is less convenient? E.g. Vector::Contains

State of AngelScript bindings

Currently U3D has AngelScript in the same state as it was in Urho3D 1.8 -- half refactored, half WIP.
1vanK did quite a lot of work on binding generator and this work spanned years.

Since U3D forked from the middle of this work, AS is in weird state here. Bindings are not manual, but they use unfinished generator.

So I think U3D should either abandon AS at some point, rollback AS binding generator and restore manual AS bindings, or cherry-pick AS binding generator updates from Urho3D 1.8-1.9

Ambiguous meaning for CustomVariantValue::Compare

The meaning of CustomVariantValue::Compare is ambiguous. What does returning true indicate? From the Variant::operator == code (below) we can infer that true means equal, but from the name and documentation within CustomVariantValue it is not obvious whether true means "Equal" or "Less", etc.

bool Variant::operator ==(const Variant& rhs) const
{
if (type_ == VAR_VOIDPTR || type_ == VAR_PTR)
return GetVoidPtr() == rhs.GetVoidPtr();
else if (IsCustom() && rhs.IsCustom())
return GetCustomVariantValuePtr()->Compare(*rhs.GetCustomVariantValuePtr());


At the very least, the documentation should be improved. Alternatively, the function name could be changed to Equals, which would itself clear up the ambiguity.

AnimatedSprite2D breaks on OpenGL context lost

( This is a copy of issue urho3d/urho3d#2784 )
Some AnimatedSprite2D elements disappear or become weird squares after the OpenGL context is lost. This is most easily reproducible in the web samples (it immediately happens if the window isn't 1024x768), but can also be reproduced by enabling/disabling full screen in OpenGL desktop builds.

The issue does not seem to happen if the AnimationSet2D file uses a spritesheet (it's the case of the Orc in samples 49 and 50).

Github workflow deletes home directory folders

I set up a self-hosted github actions runner on my mac. The "Scaffolding - cleanup" step of the macos.yml workflow deleted my projects folder on my mac.

      - name: Scaffolding - cleanup
        run: rm -rf ~/{.urho3d,projects}

This should not happen. Fortunately, I had nothing of importance in that folder, just a recently checked out copy of U3D with no important changes. But our workflow should not be creating/deleting these directories in the home folder. The directory should be chosen inside whatever "_work" directory the github runner uses, rather than in the home directory.

That, or we need to provide documentation warning of this possibility. Let's just say that if this had happened on my laptop instead of this new computer I would have been extremely unhappy.

Add ability to be included as a submodule in CMake projects

The engine should be able to be included as a submodule in a CMake project. This allows the game developer to use his own build system, or VCS, to manage engine versions. It also gives him the ability to patch any bugs in the engine without major workflow disruptions.

Relevant discussion: https://discourse.urho3d.io/t/embedding-the-engine-as-a-submodule-and-cmake-module/1636
How rbfx does it: https://github.com/rbfx/sample-project/blob/master/CMakeLists.txt#L40

CollisionShape::UpdateShape() is private

CollisionShape supports being overloaded to allow users to wrap additional btCollisionShapes through UpdateDerivedShape. In working on a MultiSphereHullShape (for btMultiSphereShape), I realized the API could be improved - the UpdateShape function that is called that actually updates the shape_ member is private. This can be worked around by calling SetShapeType twice, but that updates the shape twice rather than once. Instead, I think we should just make UpdateShape protected. Possibly also MarkShapeDirty.


I intend to share the MultiSphereHullShape code as well, so remind me if I forget. Using some geometry nodes with modern Blender, I have a fairly decent workflow for creating them using an edge to mark the position and diameter of each sphere that make up the hull. They have proven fairly useful in generating complex close-fitting collision shapes to detect damage to my game's creatures, while in theory (I have not tested much) remaining more performant than mesh-based alternatives.

Logo on Github Dark Background

The present logo does not work well on a dark background. E.g.
image

It stands out better with a light stroke applied to it, though I'm not sure that I'd say it looks better. I will leave it to the artists to figure out.

u3d

Circular dependency in tolua++ bin

I may be misunderstanding something, but it seems to me that this produces an implicit circular dependency:

# Define target name
set (TARGET_NAME tolua++)
# Define generated source files
if (URHO3D_UPDATE_SOURCE_TREE)
set (UPDATE_COMMAND COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_BINARY_DIR}/generated/toluabind.c ${CMAKE_CURRENT_SOURCE_DIR}/toluabind.c)
endif ()
file (GLOB TOLUA lua/*.lua)
add_custom_command (OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/generated/toluabind.c
COMMAND ${CMAKE_BINARY_DIR}/bin/tool/tolua++ -o ${CMAKE_CURRENT_BINARY_DIR}/generated/toluabind.c -H ${CMAKE_CURRENT_BINARY_DIR}/generated/toluabind.h -n tolua tolua_scons.pkg 2>${NULL_DEVICE} || ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/toluabind.c ${CMAKE_CURRENT_BINARY_DIR}/generated/toluabind.c
${UPDATE_COMMAND}
DEPENDS ${TOLUA} tolua_scons.pkg
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Generating toluabind.c and toluabind.h")
# Define source files
define_source_files (EXTRA_CPP_FILES tolua.c ${CMAKE_CURRENT_BINARY_DIR}/generated/toluabind.c)

The target is tolua++, which has a source file ${CMAKE_CURRENT_BINARY_DIR}/generated/toluabind.c, yet this file is the output of the custom command that uses tolua++ to produce the output (though CMake is not actually told that tolua++ is a dependency of the generated file).

Can not import 3d model with multiple materials

Hi gurus,
I started to learn programming games with the great framework U3D (Urho3D), and in progress of learning the engine I faced some problems. And searched the whole web for the solution, and no luck.

I exported 3D scene made in Blender to .obj, then imported to the U3D Editor.sh. Every thing looks good but the shadows not exactly what I expect to look, but that's not the serious problem I faced. Then saved the file.

The big and serious problem is when imported it to U3D it's look like couldn't find other than one of the material files or the textures exported with it.

Here is the scene I made in Blender:
Scene in Blender

And here is when imported to the U3D Editor.sh, every thing in place, but the shadows not settled as it in blender:
Scene in Urho3D Editor sh

And eventually here is what the scene look when imported the my app, there is just one material with it's texture image for all the objects in the scene:
Scene after Urho3D

And here is the code I used to create the scene and imported materials:
////////////////////////////////////////////////////////////////////////////////
// (4-1) Create sci-fi scene static model
{
scifi = scene_->CreateChild("scifiPlanet");
//scifi->SetPosition(Vector3(-1, 1.6, -3));
scifi->SetPosition(Vector3::ZERO);
scifi->Scale(1);

    StaticModel* object = scifi->CreateComponent<StaticModel>();
    object->SetModel(cache->GetResource<Model>("Models/Sci-fi.mdl"));
    object->SetMaterial(cache->GetResource<Material>("Materials/Corridor_ways_mat.xml"));
    object->SetCastShadows(true);

    RigidBody* scifiBody = scifi->CreateComponent<RigidBody>();
    scifiBody->SetCollisionLayer(2);

    CollisionShape* shape = scifi->CreateComponent<CollisionShape>();
    shape->SetBox(Vector3::ONE);
}

////////////////////////////////////////////////////////////////////////////////

So, where is the wrong here. What mistake I did in the code please?

Audio fails on web without user interaction

The audio fails unless the user clicks the page before the game starts. Firefox reports the following warning in the console:

An AudioContext was prevented from starting automatically. It must be created or resumed after a user gesture on the page.

The issue happens on Sample 14: SoundEffects, so I don't think it's just an issue with my code.


Discussed upstream in SDL here: libsdl-org/SDL#6385

Infinite Loop in `script/cmake_generic.bat`

It is easy to reach an infinite loop when using the windows cmake scripts. For example, if you call script\cmake_vs2022.bat build -DURHO3D_HOME="C:\Path\To\U3D\Build", you will get such a loop, as cmake_generic.bat only recognizes -D options when they are followed by a space.

The loop

:loop
if not "%~1" == "" (
    if "%~1" == "-D" (
        if "%~2" == "MINGW" if "%~3" == "1" set "OPTS=-G "MinGW Makefiles""
        if "%~2" == "URHO3D_64BIT" if "%~3" == "1" set "arch=-A x64"
        if "%~2" == "URHO3D_64BIT" if "%~3" == "0" set "arch=-A Win32"
        set "BUILD_OPTS=%BUILD_OPTS% -D %~2=%~3"
        shift
        shift
        shift
    )
    if "%~1" == "-VS" (
        set "OPTS=-G "Visual Studio %~2" %arch% %TOOLSET%"
        shift
        shift
    )
    if "%~1" == "-G" (
        set "OPTS=%OPTS% -G %~2"
        shift
        shift
    )
    goto loop
)

should be changed to something like

:loop
if not "%~1" == "" (
    if "%~1" == "-D" (
        if "%~2" == "MINGW" if "%~3" == "1" set "OPTS=-G "MinGW Makefiles""
        if "%~2" == "URHO3D_64BIT" if "%~3" == "1" set "arch=-A x64"
        if "%~2" == "URHO3D_64BIT" if "%~3" == "0" set "arch=-A Win32"
        set "BUILD_OPTS=%BUILD_OPTS% -D %~2=%~3"
        shift
        shift
        shift
    )
    else if "%~1" == "-VS" (
        set "OPTS=-G "Visual Studio %~2" %arch% %TOOLSET%"
        shift
        shift
    )
    else if "%~1" == "-G" (
        set "OPTS=%OPTS% -G %~2"
        shift
        shift
    )
    else (
        set "OPTS=%OPTS% %~1"
        shift
    )
    goto loop
)

to prevent the possibility of endlessly looping on an unrecognized argument.

Web Build Slowed by Log Output

I recently traced a performance issue in the web build of my game down to doing logging during a character's attack. My build used the default shell (constructed by the UrhoCommon.cmake module from the default emscripten shell.html), which renders the console output both to the java script console and to an element on the page, which it then scrolls to the end of. This triggers a reflow of the text to get the element height, and since the log gets longer and longer, this takes a longer and longer amount of time, dropping frame rate drastically (down to ~3FPS).

The Urho3D shell.html file does not have this problem, as it just prints to the JS console (here).

I think the best solution to this issue is to use the Urho shell file by default in user projects, and not one based on the emscripten default. As a bonus, this shell looks much prettier and is more suited for games (full window, with simply a button to make it full screen) than the default shell (which is also meant to support console apps and such).

Python support please?

Can we add python support to u3d?We can use python as the script of u3d rather than AngelScript because AS is really difficult to learn.I think that could be more convenient to noobs and popularize u3d.
Besides,python should be easier when we want to implement something need multi-thread(like DirectX11,it can implement multi-thread rendering at a high level,of course the efficiency can not compare with Vulkan,but it can also provide us more convenience if u3d support Vulkan in the future)
I think we should keep pace with the times since we separated from urho3d.Maybe we should just abandon AngelScript because the difficulty of AS just like C++,but the performance of it just like lua and the coding efficiency of it is too low to compare with lua.

win-gcc Builds Failing

https://github.com/u3d-community/U3D/actions/runs/3949612987

CMake Error at cmake/Modules/FindDirectX.cmake:86 (message):
  Could not find MinGW system root.  Use MINGW_SYSROOT environment variable
  or build option to specify the location of system root.
Call Stack (most recent call first):
  cmake/Modules/UrhoCommon.cmake:504 (find_package)
  CMakeLists.txt:33 (include)


-- Configuring incomplete, errors occurred!
See also "D:/a/U3D/U3D/build/ci/CMakeFiles/CMakeOutput.log".
script/cmake_mingw.bat "build/ci"  -D URHO3D_EXTRAS=1 -D URHO3D_DOCS=0 -D URHO3D_DATABASE_SQLITE=1 
    -D URHO3D_TESTING=1 -D URHO3D_OPENGL=1 -D URHO3D_LIB_TYPE=SHARED -D URHO3D_DEPLOYMENT_TARGET=generic 
    -D CMAKE_INSTALL_PREFIX=C:/Users/runneradmin/.urho3d/install/win-mingw
Error: Process completed with exit code 1.

Surround Sound

Presently we only support mono and stereo audio. SDL seems to support up to 7.1 surround sound, and I don't think it would be that much work to add support for it.

  • Opening the sound device would become a little more complicated, as we presently open stereo and fall back to mono if that fails. I think we would just replace this with decreasing the number of channels by 1 until we get to mono or succeed in opening the device with whatever the user requested.
  • Mixing would need to be rewritten. Presently we have separate functions for each combination of (from mono|stereo)(to mono|stereo)(interpolated or not). I think we could probably rewrite these into only a couple functions with template parameters specifying these (from channels, to channels, interpolated).
  • Panning would need an additional dimension for Front/Back. And while we are at it, we might want to just make it a Vector3 to support full spatial audio in the future. Presently it is only possible to pan a mono source sound, and I think it should remain this way, and stereo/surround sound audio should be handled as is (the user can always separate multi channel audio into mono tracks if they really need the per-channel panning control).

UI: Loading UI layout with wordwrap Text inside vertical layout adds huge spaces

Layout as set up in editor, and saved:
Urho3DPlayer_2024-02-29_16-14-04

Layout after loading the saved data:
Urho3DPlayer_2024-02-29_16-14-33

The texts inside the layout in the pictures do not have a fixed width (I haven't set their max and min widths).

Any update to the layout after the load, like manually editing the text in any of the entries in the editor, corrects the spaces, but the vertical layout can remain huge if there is an element, like a button, set with infinite max vertical scale.

A word-wrapped text does not set its own width based on its content, so, when not inside a layout, it becomes a very tall zero-width column until you set a different width for it. This width also won't be saved unless you make it fixed (set min and max width to the same value).

Fixing the text's width also does not cause the spaces to appear in a vertical layout, so it's one of the ways to avoid the problem. However, I find it a bit cumbersome to fix all texts' widths inside a layout, especially when the layout seems to already handle that for you (all elements are stretched to fit horizontally if you don't limit their widths... including word-wrapped texts)

Update runner to replace set-output

Github is deprecating set-output in their runners: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/

Starting 1st June 2023 workflows using save-state or set-output commands via stdout will fail with an error.

We use this in checking the source checksum in the build runner

- name: Source checksum
id: source_checksum
run: rake source_checksum

U3D/rakefile

Lines 338 to 344 in 3d0d370

task :source_checksum do
require 'digest'
sha256_final = Digest::SHA256.new
sha256_iter = Digest::SHA256
Dir['Source/**/*.{c,h}*'].each { |it| sha256_final << sha256_iter.file(it).hexdigest }
puts "::set-output name=hexdigest::#{sha256_final.hexdigest}"
end

Presently this just produces the following warning, but the end-date is listed above.

Warning: The set-output command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/

Renaming URHO3D to U3D?

Since the repository was renamed, do we want to shorten the namespace, macro, and folder names as well?

I vote yes for at least the macro names, I don't have much of an opinion on the rest. Though I think we should keep Urho3D is in the copyright statements in the code/license.

Script serializer bug

It is impossible to save in Serializable in scripts, all Write functions return a false ( void Save(Serializer& serializer) ). For example, if I run 18_CharacterDemo.as by Urho3DPlayer.exe from batch file and save&load a scene there is also doesn't work saving, the character just rotate to 0 yaw and 0 pitch. If I run CharacterDemo from C++ it works because there are URHO3D_ATTRIBUTE.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.