-
Posts
181 -
Joined
-
Last visited
Content Type
Blogs
Forums
Store
Gallery
Videos
Everything posted by Andy90
-
i think it can be related to this bug
-
For some reasons the model prefabs get culled wrong. https://streamable.com/u6a83p Create an Prefab with an Model and place it into the scene.
-
Convert model from gltf to mdl will copy some materials
Andy90 replied to Andy90's topic in Bug Reports
Oh here is it: the gltf got 3 materials here are 6 but seems it list the material for each mesh. So it might be right. -
maybe you can set the gravity to the center of each qube.
-
I dont think so. I test it also with an new project. https://streamable.com/woxl8d you need to keep runing or waling to the wall and press jump.
-
An RTX 3060. Its kinda wired i test it in a new project without an issue. But in my game project it still occuring. Even with an empty map https://streamable.com/l5f7uw Seems its related to this line of code camera->SetRange(0.001, 1000.0); if i use this, the flickering is there. If i comment it out the flickering is starting you can see it in the video below https://streamable.com/aehnbd
-
I figured out that the colliders get lost when you load the map within the editor. So you create an collider drop the model in the scene everything is fine. When you load the map next time with the editor the colliders are lost again. You can watch the video to see what i mean. https://streamable.com/aw8ek5
-
Sometimes the colliders for the new mdl format dont load in the game.
-
For some reasons the transparent order for the models its wrong Also the alpha mask is onlny showing within the editor. In the game itself the alpha cutoff dont work
-
i testet it with the old shaders and it result in the same problem. The flickering is more intensive if the distance from the model to the center position (0,0,0) is higher.
-
Some textures are flickering. https://streamable.com/bezza2
-
This could also an bug from the model it self. Another model is working fine.
-
For some reason child entitys from mdl models dont have any tags. Even if they are assigned within the editor.
-
In this model the pbr dont get loaded correct. Whit windows 3D view everything looks fine Blue.zip
-
According to my discord post i upload here the model where the problemm happens. https://drive.google.com/file/d/1iqW0j6to9H0XicAe3CFlseViVGf46UN1/view?usp=sharing
-
Now that we have a transformation gizmo, a function or shortcut for disabling grid snapping would be helpful. So that you can position entities more precisely
-
It would be good if we could get more input options for components in the editor. Such as lists for entities, strings, floats, Vec3 and files. Like in the example bellow.
-
There is a problem with the prefabs. If you create a prefab, drag it into the scene and then save the scene, it spawns in the game in the wrong location or is not visible at all. (due to the wrong positioning)
-
It's your decision, of course, but I personally don't think it's contemporary that a scene can only have one terrain.
-
so its not possible to create an world out of multiple terrains ?
-
The importance of a game log and how to make it
Andy90 posted a blog entry in Usefull Scripts & Components
In this article, I would like to delve into the concept of "Game Logs" and explain why they play an important role. First, however, we should clarify what exactly a Game Log is. The Game Log allows us to log and temporarily store various actions in the game. Furthermore, with the help of the Game Log, we can inform independent systems about various actions. A good example of this is a simple quest system, similar to the one in World of Warcraft. In such systems, we want to complete quests by, for example, looting a specific item, killing a certain enemy, or interacting with a specific NPC. But how are the individual quests supposed to know exactly when we loot an item? Sure, one could simply search through the inventory. However, that would only work for quest types where we are supposed to loot an item, and not for those where we are supposed to kill a specific enemy or talk to an NPC. This is where the Game Log proves to be extremely useful, as our quests can simply search through the entries to update themselves accordingly. In the past few days, I have been working on implementing such a system in C++. It is important to note that this is not a component; instead, a "Global.h" file is required, where the log is defined as a global variable. GameLog.h #pragma once #include "UltraEngine.h" using namespace UltraEngine; /// <summary> /// Event types /// </summary> enum GameLogEvent { GAME_LOG_LOOT_ITEM, GAME_LOG_KILL_ENEMY }; /// <summary> /// Game Log entrys /// </summary> struct GameLogEntry { String uuid; uint64_t timestamp; GameLogEvent event; table data; }; /// <summary> /// GameLogListner forward declaration /// </summary> class GameLogListener; /// <summary> /// Handles the game log entrys /// </summary> class GameLog { private: vector<shared_ptr<GameLogListener>> m_listeners; vector<GameLogEntry> m_log; public: void Log(GameLogEvent event, table eventData); void AddListener(shared_ptr<GameLogListener> listener); void LogLootItem(String itemName, int itemCount); void LogKilledEnemy(String enemyName); void Clean(uint64_t time); vector<GameLogEntry> FetchLog(uint64_t startTime); }; GameLog.cpp #include "UltraEngine.h" #include "GameLog.h" #include "GameLogListener.h" void GameLog::Log(GameLogEvent event, table eventData) { GameLogEntry entry; entry.uuid = Uuid(); entry.timestamp = Millisecs(); entry.event = event; entry.data = eventData; m_log.push_back(entry); for (auto listener : m_listeners) { if (listener->Event == event) { listener->Callback(eventData); } } Print("Added data to gamelog"); } void GameLog::AddListener(shared_ptr<GameLogListener> listener) { m_listeners.push_back(listener); } void GameLog::LogLootItem(String itemName, int itemCount) { table data; data["itemName"] = itemName; data["itemCount"] = itemCount; Log(GAME_LOG_LOOT_ITEM, data); } void GameLog::LogKilledEnemy(String enemyName) { table data; data["enemyName"] = enemyName; Log(GAME_LOG_KILL_ENEMY, data); } void GameLog::Clean(uint64_t time) { vector<GameLogEntry> newEntrys; for (auto entry : m_log) { auto diff = Millisecs() - entry.timestamp; if (diff <= time) { newEntrys.push_back(entry); } else { Print("Entry " + entry.uuid + " out of time!"); } } m_log = newEntrys; } vector<GameLogEntry> GameLog::FetchLog(uint64_t startTime) { vector<GameLogEntry> result; for (auto entry : m_log) { if (entry.timestamp > startTime) { result.push_back(entry); } } return result; } In the file GameLog.h, we find an enum with various events, to which more can be added. Currently, there are entries for looting an item and killing an enemy. Furthermore, the structure "GameLogEntry" defines various variables, including a string for a UUID, a long variable for the timestamp, the event, and the data of the entry. Following that is the main class, which contains various functions as well as two lists. One list is for so-called hooks, and the other is for the log itself. Here's an overview of the functions: Log(): Adds entries to the log. AddListener(): Adds a callback (no callback is needed in this article). LogLootItem(): Simplifies adding a loot event to the game's log. LogKilledEnemy(): Simplifies adding a kill event. Clean(uint64_t time): Deletes all entries older than the specified parameter in milliseconds. vector<GameLogEntry> FetchLog(uint64_t startTime): Returns a list of log entries whose timestamp is greater than the start time in the parameter. If we want to determine whether we have looted an item or killed a specific enemy, we can simply retrieve the log. It is important to store the time of the last query so that we only receive the entries that are still unknown to us. void VitalUI::UpdateNotifications() { m_notifyer->ClearItems(); auto fetchTime = Millisecs() - 5000; auto log = g_log.FetchLog(fetchTime); for (auto entry : log) { if (entry.event == GAME_LOG_LOOT_ITEM) { m_notifyer->AddItem("Looted " + String(entry.data["itemName"]) + " (X" + String(entry.data["itemCount"]) + ")"); } } if (m_notifyer->items.size() > 0) { m_notifyer->Redraw(); } } To ensure that the log does not grow infinitely, it is advisable to clear it regularly. In my implementation, I clear the log every 6 minutes in the main loop. That should be sufficient to process all events. while (window->Closed() == false and window->KeyDown(KEY_ESCAPE) == false) { while (PeekEvent()) { const Event ev = WaitEvent(); g_ui->GetInterface()->ProcessEvent(ev); switch (ev.id) { case EVENT_WIDGETACTION: break; case EVENT_WINDOWCLOSE: return 0; break; } } world->Update(); world->Render(framebuffer, false, 0); g_log.Clean(60000); } As you can see, a Game Log has become extremely practical and indispensable in modern games. If you have any questions about this article, feel free to contact me. Additionally, it's worth mentioning that the log can be used for many other purposes and is not limited to just a quest system. Gamelog.zip -
I think its an issue with the model itself. Check this model Vampire.rar
-
well i my case a simple stamp tool is enough. Because right now you cant controll the height in the sculpt mode
-
okey i think this would be the easy way to do it. Instead of replace some mesh verticies. Thanks