• Announcements

    • khawk

      Download the Game Design and Indie Game Marketing Freebook   07/19/17

      GameDev.net and CRC Press have teamed up to bring a free ebook of content curated from top titles published by CRC Press. The freebook, Practices of Game Design & Indie Game Marketing, includes chapters from The Art of Game Design: A Book of Lenses, A Practical Guide to Indie Game Marketing, and An Architectural Approach to Level Design. The GameDev.net FreeBook is relevant to game designers, developers, and those interested in learning more about the challenges in game development. We know game development can be a tough discipline and business, so we picked several chapters from CRC Press titles that we thought would be of interest to you, the GameDev.net audience, in your journey to design, develop, and market your next game. The free ebook is available through CRC Press by clicking here. The Curated Books The Art of Game Design: A Book of Lenses, Second Edition, by Jesse Schell Presents 100+ sets of questions, or different lenses, for viewing a game’s design, encompassing diverse fields such as psychology, architecture, music, film, software engineering, theme park design, mathematics, anthropology, and more. Written by one of the world's top game designers, this book describes the deepest and most fundamental principles of game design, demonstrating how tactics used in board, card, and athletic games also work in video games. It provides practical instruction on creating world-class games that will be played again and again. View it here. A Practical Guide to Indie Game Marketing, by Joel Dreskin Marketing is an essential but too frequently overlooked or minimized component of the release plan for indie games. A Practical Guide to Indie Game Marketing provides you with the tools needed to build visibility and sell your indie games. With special focus on those developers with small budgets and limited staff and resources, this book is packed with tangible recommendations and techniques that you can put to use immediately. As a seasoned professional of the indie game arena, author Joel Dreskin gives you insight into practical, real-world experiences of marketing numerous successful games and also provides stories of the failures. View it here. An Architectural Approach to Level Design This is one of the first books to integrate architectural and spatial design theory with the field of level design. The book presents architectural techniques and theories for level designers to use in their own work. It connects architecture and level design in different ways that address the practical elements of how designers construct space and the experiential elements of how and why humans interact with this space. Throughout the text, readers learn skills for spatial layout, evoking emotion through gamespaces, and creating better levels through architectural theory. View it here. Learn more and download the ebook by clicking here. Did you know? GameDev.net and CRC Press also recently teamed up to bring GDNet+ Members up to a 20% discount on all CRC Press books. Learn more about this and other benefits here.
Sign in to follow this  
Followers 0
gamer08

AI login (state,state Machine, behaviors...) and thread in RTS game

5 posts in this topic

I everyone i have a little question about AI logic, state and thread in game in general

 

first of all some usefull infos,

 

i'm working on a rts game

langage c#

framework XNA

 

each type of unit have their own states and for the moment each state of each type is a singleton

 

each unit have a steering behavior and a state machine

 

for the moment everything is on the main thread

 

example :

 

two units of the type A are on the same state

 

when i update the logic i pass the owner of the state machine as a parameter to the state but the logic is updated on a unit after another (yes i know it's not great, the reason why i'm here)

 

What is the best way to ensure that every unit update their ai logic at the same time / almost same time ?

 

1. i think a thread per unit ?

2. threadpool ?

 

If it's not clear , i can give futher explanations

 

Any suggestions, ideas or anything is welcome !

 

thanks to help

 

0

Share this post


Link to post
Share on other sites

I'm not entirely sure if I am getting your problem, but from what I think I understand, here's something to think about:

 

You need to think about how a game loop works and how you handle your units. There is not really any other way than to go over each unit and update the needed variables to do what they have to do.

 

Multithreading will not help you in the way you expect it to help. As you're never sure when a thread is done, you will need to lock and wait for every thread to finish before continuing. On top of that, you will still need to go through an X amount of threads over and over again until all your units are updated, and as you will most likely have more units in your game than most PC can make threads, you're effectively eliminating what you're trying to fix. (but you will have better speed for you game ;))

 

If you are having issues with units not behaving properly, rethink your game logic for your units. It's perfectly fine to handle each unit individually. Something along the lines of the following is fine as a basic way of handling:

 

for(int i = 0; i < AmountOfUnits; i++)
{
   CalculatePath();
   DecideWetherToAttackOrNot();
   Attack();
   MoveUnit();
}

This is just a simple example with imaginary functions, but you should get the an idea of where I'm going.

0

Share this post


Link to post
Share on other sites

Multi-threading is usually used as a performance optimization; it doesn't solve any of your problems here, and would only complicate things. Despite what you think, you actually want a predictable update sequence.

 

I don't understand why your different types of state are singletons. Instead, just make a new instance of the state data for each unit instance.

0

Share this post


Link to post
Share on other sites

What is the best way to ensure that every unit update their ai logic at the same time / almost same time ?

 

You can't, not even threads can accomplish this.  You still need to update the AI behavior, one unit at a time, because computers can only run one line of code at a time.

 

What about those RTS games, you ask?  They still update their units one at a time, all within one frame (one iteration of your main loop).  Once all units AI are updated, then they are presented to the screen all at once so they appear independent.

0

Share this post


Link to post
Share on other sites

You can't, not even threads can accomplish this. You still need to update the AI behavior, one unit at a time, because computers can only run one line of code at a time.

Hmm... in times of multi-core systems running multiple AIs concurrently isn't a bad idea.

 

I'm currently refactoring my AI system and the biggest show-stopper of multi-threaded AI is the interaction with the other entities. E.g. if unit A shots at unit B which shots at unit C while walking etc. , updating this concurrently without using standard synchronization tools (e.g. OS mutex which are often avoided in real-time games) can get messy really quickly.

 

To break AI a little bit up, you can divide it into decision making and action execution. The latter manipulates the world and/or other entities and is therefor more critical. The former is much easier to handle, because it often only scans the world, or better only a (partly) copy of the world (read-only access), or manipulates the according entity.

 

Well, a basic idea would be, to use multithreading for decision making and a single stable world on a single thread for action execution. There are really several ways to implement it, e.g. use a threadpool and a dispatcher for the AI decision making, add the actions to a lock-less array(queue) and execute the actions afterwards on a single thread.

 

But,mutlithreading is one of the fastest way to kill of your game, if you aren't really familiar with MT programming, AI etc., so think carefully about using it.

Edited by Ashaman73
2

Share this post


Link to post
Share on other sites

You can't, not even threads can accomplish this. You still need to update the AI behavior, one unit at a time, because computers can only run one line of code at a time.

Hmm... in times of multi-core systems running multiple AIs concurrently isn't a bad idea.

 

I'm currently refactoring my AI system and the biggest show-stopper of multi-threaded AI is the interaction with the other entities. E.g. if unit A shots at unit B which shots at unit C while walking etc. , updating this concurrently without using standard synchronization tools (e.g. OS mutex which are often avoided in real-time games) can get messy really quickly.

 

To break AI a little bit up, you can divide it into decision making and action execution. The latter manipulates the world and/or other entities and is therefor more critical. The former is much easier to handle, because it often only scans the world, or better only a (partly) copy of the world (read-only access), or manipulates the according entity.

 

Well, a basic idea would be, to use multithreading for decision making and a single stable world on a single thread for action execution. There are really several ways to implement it, e.g. use a threadpool and a dispatcher for the AI decision making, add the actions to a lock-less array(queue) and execute the actions afterwards on a single thread.

 

But,mutlithreading is one of the fastest way to kill of your game, if you aren't really familiar with MT programming, AI etc., so think carefully about using it.

Yes i've alreday check for parallel threadings via threadpool or something else, but to be honest i'm not an expert in multithreads. I already used it but not in a game development. Parallel AI is something i'd like acheive   

 

My problem is that i use a message system to communicate between different type and the handling is in the state and sometimes a unit instance doesn't receive the message because " it's not is turn " to evaluate the logic so i need a way to parallelize some stuff

 

so any ideas is welcome

 

 

Multi-threading is usually used as a performance optimization; it doesn't solve any of your problems here, and would only complicate things. Despite what you think, you actually want a predictable update sequence.

 

I don't understand why your different types of state are singletons. Instead, just make a new instance of the state data for each unit instance.

 

Each different state instance is singleton because i just want to save a bit of memory. But to be honest i don't check the impact or the difference if each state machine have their own state instance

Edited by gamer08
0

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0