Jump to content

Andy90

Members
  • Posts

    181
  • Joined

  • Last visited

Everything posted by Andy90

  1. i think it can be related to this bug
  2. 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.
  3. 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.
  4. maybe you can set the gravity to the center of each qube.
  5. 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.
  6. 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
  7. 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
  8. Sometimes the colliders for the new mdl format dont load in the game.
  9. 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
  10. 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.
  11. Some textures are flickering. https://streamable.com/bezza2
  12. Andy90

    PBR Bug

    This could also an bug from the model it self. Another model is working fine.
  13. For some reason child entitys from mdl models dont have any tags. Even if they are assigned within the editor.
  14. Andy90

    PBR Bug

    In this model the pbr dont get loaded correct. Whit windows 3D view everything looks fine Blue.zip
  15. According to my discord post i upload here the model where the problemm happens. https://drive.google.com/file/d/1iqW0j6to9H0XicAe3CFlseViVGf46UN1/view?usp=sharing
  16. 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
  17. 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.
  18. 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)
  19. It's your decision, of course, but I personally don't think it's contemporary that a scene can only have one terrain.
  20. so its not possible to create an world out of multiple terrains ?
  21. 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
  22. I think its an issue with the model itself. Check this model Vampire.rar
  23. well i my case a simple stamp tool is enough. Because right now you cant controll the height in the sculpt mode
  24. okey i think this would be the easy way to do it. Instead of replace some mesh verticies. Thanks
×
×
  • Create New...