Shannon Barber

  • Content count

  • Joined

  • Last visited

Community Reputation

1681 Excellent

About Shannon Barber

  • Rank

Personal Information

  • Industry Role
  • Interests
  1. The canonical name for your 'component' is entity or boid (entities with behaviour) if you want to search for further reading. The major component implementations that realize the data in the boids are called engines. e.g. graphics engine, audio engine. physics engine
  2. Joel on Software is a good starting point for nascent project management.
  3. If everything derives from a common base-class then you can override new,delete,new[],delete[] and do book-keeping there.
  4. ... or a valid pointer to a string that is not properly null-terminated.
  5. Interface response times

    As mentioned above this is part of the contract of the interface but which way it should be designed depends on the usage of the data. If it's real-time then you might want to poll the REST data you need, cache it, and add a time-stamp to the data so you know how old it is (so you could interpolate.) If it's not real-time then just make the REST call.
  6. UDP networking

    UDP packets are supposed have priority over TCP packets. Not sure if they actually implement it that way though.
  7. std::vector and iterator question

    That's what .push_back() does.   Just use .reserve(n) to preallocate memory for your objects. If they are small and simple let them be copied. If they are complex then store pointers.
  8. Pd.D. C.S. Research Topics?

    'Efficient large-scale voxel management' is the best I got.   To really do research you'd have to move beyond the triangle-based graphics system we use today.   I forget what it was called but there was some work done to develop a system that sort of simulated little lumps of clay; instead of creating the world with flat triangles the artist put it together with 'stuff' that had volume.
  9. Basic multithread question

      Thus class you have adviced, will perform a check on a condition sparsely, to save CPU, but I gess it will be some 1ms   If we were running on i386's at 33MHz it might take 1 ms. A realistic expectation today would be 750 to 1500 ns. Condition variables are the *nix analog to Window's Event notifications. They are slightly different but can serve many of the same purposes. They are a kernel synchronization primitive not a user-code technique. Spin-locking is also available when you have an SMP kernel.
  10. Unity Why C# all of a sudden?

    For independent development C# had a lot to offer in terms of increased productivity while minimizing the performance sacrificed for it (this is what Java got wrong; it did things in essentially the most wasteful way possible instead of the least.)   For a little while it looked like C# was going open and would be ported across platforms in a meaningful way. We had cross platform OpenGL engines written in C# pretty early on around 2004. This dream is now over. Core .NET is a dilapidated product with no market. Cross-platform WinForms was deprecated many years ago. Unity and their method of Mono integration is migraine-inducing.   In the meantime C++ has added features and libraries to make up for the gap and community now appears to take maintenance more seriously with more frequent updates.   A C++/CLI bridge from your core code to a C# GUI may make sense if you want a custom editor but I think I would look into other options before committing to that (Qt, wxWidgets, GTK, et. al.).   So while there was a push to C# I would say that has run its course now (it's peaked). The C++/Lua route is proving to be the solid platform.
  11. Passing data between states in an FSM

        I would fix this problem rendering the other mute.
  12. To write code that compiles and works properly and well across the widest range of platforms you should favor int and you only ever specify a fixed size when you are working with serialized data.   You generally should not be indexing data-structures and if you must then it should be contained within the class if possible. Iteration is generally best performed by the higher-level C++ constructs or pointers.   If you have large buffers that you are sharing and must expose indices then either use size_t/ssize_t or expose your own public typedef (favored name is size_type).   If 'int' does not match the register size of the machine then that is a defect in the compiler and is your warning sign to stop using it because there will be worse problems coming.
  13. Frame skips and Object jumps problem.

    Quick fix is enable V-sync.   Long fix is separate rendering logic from physic logic and run rendering logic in real-time and physic in simulated time. There's no point in rendering twice if you get jitter but you do need to "catch up" with your physics.   If your rendering loop runs faster than your physic loop then you do simple interpolation between physics key-frames.
  14. Minecraft requires port-forwarding unless they added something fancier in the latest version.    I would suggest having a backup relay server in case hole-punching or IGD/UPnP fail. The next generation of routers may finally get to the point that hole-punching stops working. It is technically an exploit and connection hijacking. Some customers will already have more sophisticated stateful firewalls that will prevent hole-punching.   IGD is the designed solution to this problem but I haven't personally programmed code to use it so I cannot attest to it's reliability. It seems to work well. IGD will only work at home with consumer NAT/cable/dsl routers and will not function if they are using a commercial (or vanilla) NAT solution. (e.g. In college I routed our fraternity house Internet through Netware BorderManager for NAT.)   Is Steamworks fully functional if you are not greenlit? It provides hole-punching and relay if that fails but I don't know if the relay will work for anyone. If the relay does *not work for everyone and/or if you never intend to go for greenlight then consider using libijngle directly.
  15. Faster Sin and Cos

    What kind of windowing are you using?