• Content count

  • Joined

  • Last visited

Community Reputation

198 Neutral

About DjMaSh

  • Rank
  1. Network bottle neck?

    [quote name='hplus0603' timestamp='1328807802' post='4911362'] select()/recv() is usually called from the main thread, not a separate thread. [/quote] But if I call select from the main thread, wont that block my render loop? I thought the point of select was you could let it set in the background on a separate thread until data arrived, which you then bubbled back up to the main thread somehow
  2. Network bottle neck?

    [quote name='Washu' timestamp='1328745863' post='4911130'] How fast is a frame? Have you disabled Nagle? [/quote] Havent got timing information yet, But disabling nagle seemed to do the trick. Though theres still lag there which I dont think should be there. Im comparing network performance to something like synergy or sharemouse which seem to do basically the same thing. [quote name='hplus0603' timestamp='1328765123' post='4911190'] Non-blocking I/O is generally not what you want. You want to use select() and recv()/send(). Or you want to use platform-specific asynchronous I/O, such as I/O completion ports on Windows, or evented I/O on Linux, or similar. [/quote] So far non-blocking does the trick. I have to update as fast as possibly anyway, plus 90% of the time there will be data to read each frame anyway. Would I gain much performance using select asynchronously? Then at the start of each frame I could just read from a buffer rather than doing a recv. Or is that effectively what recv is? Then id have to manage data transfer from the select() thread back to the main render thread :S Scary. Especially if I increase the number of clients I want. Network programming is hard! Im just doing this over a wireless using a phone rather than through a carrier network. Any other tips to speed things up???
  3. Network bottle neck?

    I should also point out, the client is running on an iphone, and the server is on a windows box, so server is using winsock, and client is using bsd
  4. Network bottle neck?

    I havent measured times exactly yet as I just got it up and running last night. I havent disabled nagle either. Ill try these things tonight. After reading a bit, it sounds like UDP might be more suitable as I require fast response times. But is it really necessary, or should I be able to get reasonable 1:1 motion using tcp?
  5. Im writing my first ever client/server model, and im finding my implementation is too slow, but im not sure what the bottle neck is. It consists of 1 client and 1 server,using BSD sockets. Both sockets are created using: [code] socket(AF_INET, SOCK_STREAM, 0); [/code] The server socket is set to non blocking using: [code] u_long iMode=1; ioctlsocket(Socket,FIONBIO,&iMode); [/code] My client repeatedly sends the mouse position every frame to the server using write. It does this when ever the mouse moves. Thats all it does, so its going pretty fast. It doesnt perform any reads. My server is in a simple loop, where each frame it: - performs a read on the connected client socket, decodes the message if there was one, then sets the position of an image to the x/y position from the message - draws the image data is read and written using send() and recv() However im finding there is significant lag. I would have thought it could handle this? Im not sure where my bottle neck is?
  6. Simple GUI suggestions

    [code] class UIObject { void HandleMouseClick(int x, int y, int button) void HandleMouseMove(int x, int y) void Draw(); int x, y, width, height } //Somewhere UIObject[] objects //On mouse click somewhere in your code foreach UIObject o in objects o.HandleMouseClick(x,y,b) //On mouse movesomewhere in your code foreach UIObject o in objects o.HandleMouseMove(x,y,b) //OnDraw somewhere in your code foreach UIObject o in objects o.Draw() [/code] Your button and text ui object would inherit from UIObject and override the handle methods. You could then raise specfic events in your derived classes that relate to that type of ui object, eg scroll bar could have 'onscroll', button could have 'onclick'.
  7. [quote name='bombshell93' timestamp='1328601181' post='4910434'] Then I used interfaces for components [/quote] Your BaseObject class should just store a list of components. You then derive different component classes, in this case: drawable, updatable, and controllable. Add instances of these components to a base object instance. Your main update loop then just iterates over the components of each BaseObject, calling 'Update' or 'Process', which your derived class would have overridden with specific functionality. eg: [code] class Component { void Update() } class BaseObject { void AddComponent(Component c) void RemoveComponent(Component c) Component components[] } //Main loop foreach(BaseObject b in objects) foreach(Component c in b.components) c.Update() [/code] PS I dont remember how to write java code properly so dont expect it to compile
  8. To me it sounds like just a layer of fuzz that doesnt really give you much, and makes everything much more indirect. Whats wrong with managing your threads manually rather than building some crazy formalised task system. i.e, if you do decide you want to split your ui and world onto diff threads just do this inside your game state task1 = RunTask(world.update()) task2 = RunTask(ui.render()) task1.wait() task2.wait() Seems like this gives you way more flexibility, and allows you to modify which things are tasks easily
  9. [quote name='Telios' timestamp='1328190406' post='4908704'] I would say there is a difference between a data-driven system and a component-based system. That article describes a component based system. [/quote] When I say data-driven im actually meaning data oriented, where data is separated into structs (components), and behaviour is separated into systems. [quote name='Telios' timestamp='1328190406' post='4908704'] Are you looking specifically for components? [/quote] Yeah, Im interested in how you break down your components and systems. Do you have a system per component-type? or do systems process multiple components at once? Do your systems process lists of entities, grabbing the needed components off each, or do they just process lists of components? Heres my example design: [b]Components:[/b] * Position - x, y * Visual - texture * Motion - velocity * Physics - mask, dimensions, shape type * Input - touch position * Identity - stores the type of object (ball, paddle, block, powerup) * Player - stores number of lives * Powerup1/2/3 - stores powerup type enum, and any state associated with the powerup (maybe a timer) [b]Systems:[/b] * RenderSystem - renders all visual components * CollisionSystem - updates velocities of motioncomponents, does collision detection and response with physics components, raises collision events * InputSystem - processes drag components, setting x-position to mouse position * CollisionEventSystem - defines what happens when a collision occurs, responds to collision events from collision system: spawns powerups, engages powerups, deletes blocks * GameSystem - processes player component, checks when lives == 0, checks when blocks == 0 * PowerupSystem - processes all powerup components What do you think? Im not sure the best way to handle events between systems. Or how to tell the type of an object, so when a circle collides with a rect, how i know that rect is a block and not a paddle. Thats wat I thought the identity component could be used for. thoughts?
  10. [font=arial, sans-serif][size=3]Hi all,[/size][/font] [font=arial, sans-serif][size=3]Id like to do an exercise to come up with a code design for the traditional game breakout game (google if unsure)[/size][/font] [font=arial, sans-serif][size=3]using an entity component system to see what designs you all come up[/size][/font] [font=arial, sans-serif][size=3]with, and to practice my designing skills =P.[/size][/font] [font=arial, sans-serif][size=3]I have my own ideas how to design it, but im more interested in the way other people think, and hopefully I might learn a thing or 2.[/size][/font] [font=arial, sans-serif][size=3]Im particularly interested in designs engineered towards a data-driven entity[/size][/font] [font=arial, sans-serif][size=3]system such as Artemis, where data and behaviour are split into components, and systems processing those components:[/size][/font] [font=arial, sans-serif][size=3]For simplicity, I want to focus on:[/size][/font] [b][font=arial, sans-serif][size=3]Objects:[/size][/font][/b] [font=arial, sans-serif][size=3]- Ball[/size][/font] [font=arial, sans-serif][size=3]- Paddle[/size][/font] [font=arial, sans-serif][size=3]- Blocks[/size][/font] [font=arial, sans-serif][size=3]- Powerups[/size][/font] - Bullet [b][font=arial, sans-serif][size=3]Behaviours:[/size][/font][/b] [font=arial, sans-serif][size=3]- Ball travels with linear velocity, initially at a random upward angle.[/size][/font] [font=arial, sans-serif][size=3]- Ball bounces off left, top, and right boundaries[/size][/font] [font=arial, sans-serif][size=3]- Ball bounces of blocks[/size][/font] [font=arial, sans-serif][size=3]- Ball bounces off paddle[/size][/font] - Paddle can move left and right [font=arial, sans-serif][size=3]- Blocks disappear when a ball touches them[/size][/font] [font=arial, sans-serif][size=3]- Blocks disappear when a bullet touches them[/size][/font] [font=arial, sans-serif][size=3]- Powerups have a chance of spawning when a block disappears[/size][/font] [font=arial, sans-serif][size=3]- Powerups travel down the screen until they hit the bottom boundary, at which point they are destroyed.[/size][/font] [font=arial, sans-serif][size=3]- A powerup is engaged when it collides with the paddle[/size][/font] [font=arial, sans-serif][size=3]- Powerups do not collide with blocks[/size][/font] [font=arial, sans-serif][size=3]- Powerup 1 - Ball sticks to paddle instead of rebounding[/size][/font] [font=arial, sans-serif][size=3]- Powerup 2 - Paddle is elongated in size[/size][/font] [font=arial, sans-serif][size=3]- Powerup 3 - Paddle can shoot bullets when fire is pressed for x seconds[/size][/font] - Bullets travel up the screen [font=arial, sans-serif][size=3]- Bullets are destroyed when they collide with a block[/size][/font] [font=arial, sans-serif][size=3]- Bullets are destroyed when they hit the top boundary[/size][/font] [font=arial, sans-serif][size=3]- 3 lives[/size][/font] [font=arial, sans-serif][size=3]- loose life when ball touches bottom boundary[/size][/font] [font=arial, sans-serif][size=3]- game over at 0 lives[/size][/font] [font=arial, sans-serif][size=3]- game win when blocks == 0[/size][/font] [font=arial, sans-serif][size=1]So yeah, if you could list the components you would use to build those 5 objects, and what systems you would use to implement those behaviours, and how those systems would process your chosen components.[/size][/font] [font=arial, sans-serif][size=1]This is all about the details![/size][/font] [font=arial, sans-serif][size=1]Hopefully someone is actually keen to give this a crack lol.[/size][/font] There are so many different ways this could be done. Im interested in your way
  11. [quote name='T e c h l o r d' timestamp='1326690288' post='4903126'] Whats wrong with using RTTI? [/quote] The topic of the thread is [b] Component Entity Model Without RTTI[/b] I think thats all thats wrong with it.
  12. Camera Far-clipping plane.

    I imagine it varies widely per game. some might want massive draw distances, others might want intense immediate surroundings. Why do you want to know?
  13. [quote] the systems would implement something like this: [CODE] //for a UI updating system: protected override void process(Entity entity) { UIComponent ui = (UIComponent) uiMapper.get(entity); ui.IUserInterface.update(entity); } //for a UI rendering system: protected override void process(Entity entity) { UIComponent ui = (UIComponent) uiMapper.get(entity); ui.IUserInterface.draw(entity); } [/CODE] [/quote] Interesting. So the ui system is a complete stand alone system that doesn't depend on the entity system. The entity system is just a thing layer on top to bind UI elements to game objects. From your code, it looks like there is a many-one mapping between systems and components. I always thought of them as a 1-1 mapping. The many-one sounds much more flexible though. Im really digging this design. In my experience, component systems have only been used to manage game objects like balls and rockets. UI, and game rules and various other 'managers' have always been implemented separately. Normally you have a 'world' which is your component system. Things external to the world are responsible for instantiating entities, like a spawn manager. This uglies things up a bit as you now have 2 worlds, the entity system, and the thing holding the entity system which contains the game rules. But what if the 'world' _was_ an entity? Game rules could be implemented as components: aispawncomponent, boobytrap component, gamerules component etc. This eliminates the outter world manager thing. To create the game you simply instantiate a world entity. in turn, that entity would create everything it needed. Also, creating a different game mode, but keeping the same core rules would just be a case of swapping components. The thing i like about this is _everything_ is always contained within the entity system. there are no other external managers. The entity system would be used to create your splash screen, intro movie, main menu, the actual game, credits screen etc. Does anyone have experience with this? It seems with this data driven design, the component systems can be anything at all. At which point does this paradigm fall over? is it possible to create EVERYTHING inside the entity system? Even create applications that dont resemble games using an entity system? One more question, how do you manage the update order of the systems?
  14. Btw im totally guessing about everything here. Just going off intuition. Right. It sounds like its not part of the overall simulation at all. Physx will take your displacement vector and perform the appropriate collision tests and to make sure it doesn't tunnel through other objects, then simply set the transform to somewhere safe. How have you constructed your forcefield? Is it basically a static trigger volume for which you handle collision events and apply forces to those objects? You might be able to subclass the character controller class to include a 'external force' member, which the forcefield sets. You could then take the value of the external force into account when calculating your displacement vector in your character controller.
  15. I've never used physx myself so I cant give you any specific details on how to implement. I dont suppose you have the source code for the character controller? So I imagine the character controller is basically a wrapper class around a rigidbody, that controls the velocity and position based on inputs from the user? Do other, non-character controller physx objects in the world successfully collide with it? can other rigid bodies knock the controller around? What might be happening is the forcefield collides with the charactercontroller, but then the character controller just stomps on any forces applied with its own. If the character controller is implemented via setting velocity each frame, applying forces to the controller wont work.