Jump to content
  • Advertisement

Kwizatz

Member
  • Content count

    3726
  • Joined

  • Last visited

Community Reputation

1392 Excellent

About Kwizatz

  • Rank
    GDNet+

Personal Information

Social

  • Github
    AeonGames

Recent Profile Visitors

9885 profile views
  1. Hi!,

    Just wanted to make a quick announcement. I am working on my own open source game engine at Github, it is still rather crude and non functional yet, but I'd really like to get all kinds of feedback, and if possible get the follower count up :smile:

    Thank you for your interest!

     

  2.   No, that just means that the author of assimp didn't take the necessary measures for the generated static library symbols not to be marked as __declspec(dllexport) since not adding the extra preprocessor magick causes no immediate side effects... until you try to link an executable against two dlls that both independently linked against the static symbol exporting library.   Always err on the side of laziness or ignorance before cleverness or evil doing ^_^
  3. Found this post while doing something similar for a scenegraph editor, hopefully its not too late to add more to it.         Actually that does not seem to be entirely accurate, I think removeRows should remove (delete scene nodes), such that you can use it for that specific purpose, say in a context menu or when pressing the delete key while a node is selected. What I found is that you should enable the DragDropOverrideMode on the view for it not to call remove on the original indices, DragDrop vs InternalMove seems not to make a difference to me.   Either way, the design seems to be missing something, models deal almost exclusively with QModelIndex objects, with row,column and internalPointer being the most important aspects of them, but then when drag and drop comes into the picture, you have to deal with mime types, with no alternate option to just have a "drop" method for indices or an index list. Furthermore, the information encoded in the default mime data is row, column and a map with what the data method returns for each role, no internalPointer which is most likely what you really need in this situation.   Here is a partial solution that overrides QTreeView::dropEvent in order to access the selected items, but I rather not have to create a new class that inherits from QTreeView just for that, so I am looking into options, so far, I guess the least intrusive option would be overriding QAbstractItemModel::itemData to include a UserRole with the item's internalPointer so I dont have to override QAbstractItemModel::mimeData which would be a different mess.   Either way you definitely need to override QAbstractItemModel::dropMimeData, the default implementation calls insertRows, and tries to fill the inserted rows with setData/setItemData, which is probably not what you or I want since my insertRows implementation calls new Node and we don't want a new node, we want the already existing one moved. So a call to moveRows would be much more appropriate, but you need to rebuild the source indexes from the mime data.  
  4. Kwizatz

    CMake or Custom ?

    I like CMake, its not perfect, but I wouldn't want to keep 3 or more build systems in sync for multi platform development, sure you have to change compiler flags from Linux to Windows and a lot more, but at least you do it in just one place. The fact that a lot of open source libraries use it also makes it easier to add them to your own project and build them yourself in case you like that kind of thing.   But if you're targeting Windows with VS and nothing more, I see no problem in just commiting your solution and project files onto your versioning system. Custom build systems may take time to learn/understand to use for newcomers into your project, chances are, they may already know CMake.
  5. [quote name="jnurminen" timestamp="1396975255"] 1.) Lack of solid documentation is mainly because it is a pattern, idea abstracted away from its original use-case. But keep in mind that ECS can by used to solve several problems in game / game engines. It maybe a solution to a question "How designers can create new entities without help of programmers? / How to let designers easily to modify different properties/attributes of certain entities?" or it might be a solution for problem "How to create re-usable game logic and avoid OOP inheritance problems?".   First question is more visible in Unity 3D, it exposes entity construction to designers with simple UI. You can easily create new types of entities just by adding few components. With build-in components you can get far, but gets more complex when you want to create custom components.   If you create such solution by yourself you need to pay attention how you can easily create new components with editor. One solution might be defining a metadata to describe component attributes (keys, names, descriptions, types, mix & max values, default values etc.) or you can go with fully DB backed up solution. Once this is "solved" you need to figure out that do you want to simulate game inside your editor, if yes, you need to figure out how you can make editor to run that custom system that you just created. You could easily compile new engine (dynamic lib) for editor, or you could decide that editor is just a DB/entity browser and it will communicate with your game binary via TCP/IP. You might also get a request to create prefab system to aid level designers and ton of other things...   Second question is different beast. First question was more of how to create and pass data to engine's subsystems and it normally follows subsystems' features. But in logic / behaviour component side it is all about logic and of course ton of variables to fine tune game play. Some prefer doing this with scripting language so you have ScriptComponent or similar in our engine side and this component is exposed via editor UI. ScriptComponent points to some external script assets which has the actual logic, and usually has some extra attributes for engine. In side this script asset you then have your logic, and depending you choices you can have another ECS system implemented with script language and dedicated to make logic scripting more easy. If are planning to go without scripting language then ECS behaviour system is more vital to you, it helps you to create logic with languages like C++. It is also more vital since you most probably want to expose all possible variables to editor UI to make those accessible by designers. Depending what you are doing you will most likely need a message/event system between different system,  system are depending on each other more heavily etc. But this is game implementation side of things, so it can be messy and it certainly will, but having ECS in place you will have some changes to create re-usable logic components and debugging should be more easier.   2.) I would say that it isn't naive approach to duplicate e.g. position, orientation and scale for rendering and physics components. Those are two different "world", so it is pretty much how it should go anyway. What you really need is a message/event "system" that can be used to sync data between different components. It can be something sophisticated or you can design our engine's update loop in a way that you can pass updated cache friendly continuous data blocks from system to system. Duplication also helps you to make your system concurrent, each task/job can run pretty much parallel without any problems if you keep dependencies between system low.[/quote] 1. I would say it is closer to a paradigm than a pattern, you can usually describe a pattern with a class diagram solidifying the abstract idea, with ECS, you have to mix and match concepts depending on your needs/tastes, I don't disagree with you, I just feel that what you mentioned is a sign of the idea's novelty, as it matures, a more specific approach should surface. 2. I feel that if you have to keep data in sync between 2 different components/systems, you are in part defeating the purpose of keeping systems separated and independent from one another, might as well go back to the old ways, it would be less complicated. Also I don't see how rendering position and physics position belong to different worlds, OK, physics position may be the center of gravity, while rendering position may be the mesh origin, if you keep the physics position as an offset from the rendering position, or the other way around you don't have to sync them at all.
  6. Kwizatz

    Why YOU should embed a web server in your game engine

    An alternative to Boost that I was considering is lighttpd, written in C, using the BSD license.   I had also briefly looked at Libmicrohttpd (LGPL) and Mongoose (GPL), but licenses dissuaded me.  Your relation to various licenses might differ.     I am on the same boat, the problem is lighttpd is not suitable for embedding, or the developers don't care about that, so you're on your own (reference).  Different kind of embedding... should have known.   libmicrohttpd and thttpd would be my options, myself leaning towards thttpd because of the BSD license variant, though libmicro is LGPL 2.1, so no problems with propietary code as long as it is a shared library.   The problem with both of those is that there is no Windows port, if you use cygwin, you get GPLed, so you'd pretty much would have to create the build scripts to build them with MSVC or MinGW, not that it would be impossible or too complex, but definitely extra work you were not expecting to have.
  7. My gripes with ECS have to do specifically with the lack of solid documentation, all the documents and blog posts I've read so far are too abstract and some leave important concepts just mentioned as if they were obvious to everyone. It would be nice to have an Article-Tutorial going over the concepts with actual code intertwined. I have started coding a proof of concept "ECS Framework" over at github, so perhaps I may take that endeavor myself in the future.   One thing that I realized is flimsy about ECS is the idea of less cache misses due to keeping components contiguously in memory, as phil_t mentioned, this IMO is only valid if you have one system one component, and systems are the ones managing their components use of memory, but it doesn't take too long to realize that both the rendering system as well as the physics system will require access to the position component, so who is the owner of the component? the physics system may require access to other components such as a velocity component for example, so you'll be referencing at least 2 different arrays of components for one system. The naive approach of keeping position on multiple components, say a rendering component and a physics component just complicates things as now you have to keep all of them in sync, loosing one of ECS features, independence between systems.   This, I think requires more though, I could see how interleaved component arrays (keeping heterogeneous components for a single entity together) could avoid cache misses, but then you'll have to iterate systems over entities rather than components over systems... which I don't really think is such a bad idea, unless you do want to go with the original concept of an entity being no class or struct at all but rather just a primary key in a SQL Select statement.
  8. I am sort of late to this discussion but I am looking on how to implement the pattern myself,     From what I've gathered I would say neither of those are entities, they all should be part of a map resource, referenced by a map component that is updated by a map system.   To elaborate, your map may be a XML document with cell or tile elements themselves with position (relative to the origin), id and texture (itself a reference to an image, shader and/or material) attributes. You write some code to convert the XML into a runtime resource object, which is then referenced by a map component, the component is the "instantiation" of your resource, and it will then contain information specific for that instance of the resource, for example position if your map may coexist with multiple maps snapped together.   Later on, in your game loop you may have a map system which updates any variables in your map component, and a rendering system may render it later, or a collision system may query the component which itself would query the resource for collision information, etc.
  9. Went to do the driving license test, failed without even sitting on the driver's seat because one emergency triangle was seemingly missing (it wasn't, we just didn't look hard), and then a series of events unfolded that ended with my cell phone being stolen, long story sort, I was scammed by some people who claimed they could get me a passing on the test, yeah, yeah, I should have known better, but no use crying over spilt milk, and know I know and knowing is half the battle [smile]. The worst thing is that between bureaucracy, corruption, stupid laws and poor infrastructure, these kind things become too common around here. Oh, and yeah, still looking for work.
  10. So, I find myself looking for work again, and well, I can't help but compare how looking for work online is a lot like meeting women online, something I am very familiar with. You begin by posting your information in some website, then, of course you don't get any unsolicited offers, or the ones that you do never get past the original message, so you have to get out there and try to make the first contact yourself. That's when you begin posting to the prospects that interest you, and then most never get back to you, eventually, you do get to arrange meeting which could be either awkward or a hit... either way, chances are you won't be getting a call, not even to tell you that the position has been filled by someone else, and that is when the process starts all over. Anyway, I have the option to move to the US thanks to the green card lottery, so if you know of any company willing to take me for Game Programming, anywhere in the US (NY, Chicago, Miami preferred, but would move anywhere really) by September/October 2009, let me know.
  11. YES! I finally got a PS3, I can't really say what I think of it right now as I got to hook it up at about midnight, and didn't have time to play anything, I just saw the MGS4 intro and then upgraded the firmware, but so far, I remembered why I am a Sony fanboy, and got a geekgasm. Having to install the game... odd for a console, but the line is beginning to fade, I'll be trying to get Gentoo running on it over the weekend, if I get the time. Anyway, just rambling here due to overjoy [smile].
  12. Ok, so in a nutshell I got pissed off at Softimage for pulling fast ones at indies with their "pay the cost of a PS3 for a version of XSI thats just an advertisement to upgrade to the higher end versions every year" policy, you may remember that, if not, you can read the Journal Archives [smile]. So, anyway I decided to force myself to learn the Blender UI, the UI itself is not so great or as intuitive as you may think, but once you find what you're looking for its easier to find it next time you need it. From a programmer's perspective, the program feels made by programmers for programmers,for example you don't "Freeze" transformations, you instead "apply" rotations, translations and scales, which makes sense when you realize that programatically, what its done behind the scenes is to apply a transformation matrix. The armatures system for animation is great, I think it DOES beat the one in XSI in most aspects, for example you can use and manipulate individual bone envelopes to set influences, which you can't in XSI, there you apply an envelope for the whole rig and then you weight paint the problem areas, which usually are not a few. You can also move, scale and rotate an armature and the mesh it deforms independently in object mode without it causing annoying side effects later like when you realize you had your mesh object rotated 90 degrees relative to your skeleton and then to fix it you have to re-envelope your mesh, which, if you had to do too much weight painting to fix, you'll have to do again. But right now the reason I am rejoicing on Blender is the Python API, its a bit rough, true, but when you manage to rewrite an exporter that gave you nightmares for (still ongoing) months in 2 weeks without any mayor pitfalls, I can only say "BRAVO!", in contrast, my exported animations from XSI refuse to work properly. And of course is always good to know that if you find yourself in need of a feature or find a problem with the software, you can go and fix it yourself. [smile]
  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!