Search Unity

Tactical Shooter AI - Asset Store Pack

Discussion in 'Works In Progress - Archive' started by squared55, Mar 2, 2015.

  1. squared55

    squared55

    Joined:
    Aug 28, 2012
    Posts:
    1,818
    I quickly tested this in the editor. It looks as though shutting off the Navmesh agent causes problems (I assume that it cancels the current path and waits for a new one to be called, which can take a while depending on the behavior in question).

    Aside from just manually switching off every script and renderer you can, it would probably be a good idea for me to add a simple "Disable" method that you can call that pauses the agent and switches them back on later.

    A dynamic object sounds like your best bet here. Details can be found in the manual, and there is an example prefab that makes agents on a given team knock over a table/wall to create cover- you could adapt it to have the agents set off an alarm instead.
     
  2. hopeful

    hopeful

    Joined:
    Nov 20, 2013
    Posts:
    5,685
    I'm sure you realize this, but you can disable the weapon renderers as well. Essentially, if the character is not in view you can disable the renderers and thus reduce the burden on the GPU. If you have the colliders and AI still enabled, the NPCs can continue to patrol or whatever, and the only burden is on the CPU. This kind of setup is quite reasonable, I think, if the NPCs are often concealed by walls or other obstacles, so long as your occlusion method doesn't cause a lot of popping when the characters come into view.
     
  3. Lumos

    Lumos

    Joined:
    Feb 11, 2013
    Posts:
    49
    Course I know I can disable the guns as well, issue is that I don't want to either keep track of every non-rig model added to an agent, or to run the DFS search on everything in the hierarchy to look for a renderer. Pretty sure the floating gun meshes are okay, given that nobody is supposed to be watching them anyway. :p
     
  4. ApexofReality

    ApexofReality

    Joined:
    Feb 14, 2016
    Posts:
    102
    Is there any major difference between this and rfps's standard ai?
     
  5. Lumos

    Lumos

    Joined:
    Feb 11, 2013
    Posts:
    49
    Scratch that, the issue still remains. Agents will occasionally simply fail to acquire targets (the "listOfCurrentlyNoticedTargets" is empty even before being filtered out during target noticing), and I'm not sure why. As far as I'm concerned, this is a bug. Will continue digging.
     
  6. squared55

    squared55

    Joined:
    Aug 28, 2012
    Posts:
    1,818
    You're using procedural levels, right? If so, the agents may not be attaching themselves to the right AI Controller, if any. Would it be possible to start the AI as inactive, and then enable them after starting the game, thus ensuring they all get the same AI Controller?
     
  7. PicturesInDark

    PicturesInDark

    Joined:
    Jun 13, 2013
    Posts:
    89
    Since 1.2 version I've been unable to update the asset. This is because Tactical AI enemies approach my user (UFPS) at a distance superior to melee distance and stay aiming, there is no movement towards my user that makes the tactical AI enemies launch melee atack. What have happened to melee attack, have you forgive to program this?
     
  8. Lumos

    Lumos

    Joined:
    Feb 11, 2013
    Posts:
    49
    Controller is fine. The sight issues got resolved by forcing the "shouldCheck360Degrees" property to true in certain cases, but this produced a different bug, where the agent would sit still, look to nowhere in particular, yet occasionally exercise limited movement. That in turn was caused by the "isCurrentlyRotating" property of the AnimationScript set to false by the dodging logic. Disabling dodging for the affected agents resolved the issue, seemingly (and hopefully) for good.

    It's probably worth noting that, after more testing, these issues only seemed to appear when using timescales higher than 1.
     
  9. squared55

    squared55

    Joined:
    Aug 28, 2012
    Posts:
    1,818
    I added a variable in the base script that would stop the agents from getting too close to the target- "Minimum distance to target if not in cover", under "Show Cover Parameters", in the "BaseScript".

    Decrease this variable as appropriate (maybe even set it to 0).

    Thanks, I'll try and recreate the issue and see what can be done about it.

    Also, in the RotateToAimGunScript, try disabling Stop For Cover, if you have it enabled. That's caused issues in the past, currently trying to figure out where exactly this variable goes wrong.
     
  10. PicturesInDark

    PicturesInDark

    Joined:
    Jun 13, 2013
    Posts:
    89
    Thanks squared55. I imagined something like this, but it's not intuitive its location. Thank you very much for your excelent job. I will try it
     
  11. Novacane89

    Novacane89

    Joined:
    May 3, 2013
    Posts:
    15
    @Intelligent_pie There is a big difference between this and rfps standard AI, But i use both in my game depending on the situation, for AI's i interact with speech and cinematics i use the rfps AI because i figured out how to over-ride it with IK scripts and custom actions. For ambush and squad face-off's i use tactical AI's that can flank and take cover rather than just charging at you if they notice you.

    @magique Can you please tell me what you did to fix the Time.scale = 0 menu problem with rfps and TSAI? I found a fix which was to set fps player component defaultMenuTime to 1 instead of 0, meaning the game does not pause anymore.

    But ideally if i want to alter the time.scale(or pause by setting time scale to 0 briefly) at runtime i do not want the TSAI animator params to get stuck on NaN..You mentioned you had a fix? i saw that piece of code but which other places did you use it?
     
  12. ricogs400

    ricogs400

    Joined:
    Aug 4, 2017
    Posts:
    13
    squared55, could you tell me if there are a lot of dependencies between the scripts after 1.72 that would mean I need to update every script if upgrading from 1.72 to current?

    The release notes mention a performance improvement to the Animation script in 1.80 and that would be great to have if I could just update the Animation script. I have TacticalAI integrated and working nicely with CoreGameKit and if I update, I'm afraid of breaking my current working state and adding days of work (I'm a part time indie dev) fixing scripts and troubleshooting to get them working again.
    What is your opinion on updating from 1.72 to 1.82. Is it a performance boost that is worth it? Would I need to import every script and write over all the ones I have tweaked for CGK integration.

    Thanks. And like I've said before, great asset.
     
  13. squared55

    squared55

    Joined:
    Aug 28, 2012
    Posts:
    1,818
    In the Navmesh Interface script, whenever it divides by Time.deltaTime, add an if statement that checks to make sure that Time.deltaTime is greater than 0, so you don't get a divide by 0 error.

    Here's the animation script fix. Replace the Start/Stop Sprinting methods in the animation script with the following.

    Code (CSharp):
    1.  
    2. public void StartSprinting()
    3.         {
    4.             if (!sprinting)
    5.             {
    6.                 sprinting = true;
    7.                 //Make sure the animation in question exists.
    8.                 //If the trigger is not found, no animation is played, but no error is thrown.
    9.                 for (int i = 0; i < animator.parameters.Length; i++)
    10.                 {
    11.                     if (animator.parameters[i].name == "Sprinting")
    12.                     {
    13.                         animator.SetBool(sprintingHash, true);
    14.                     }
    15.                 }
    16.             }
    17.         }
    18.  
    19. public void StopSprinting()
    20.         {
    21.             if (sprinting)
    22.             {
    23.                 sprinting = false;
    24.                 //Make sure the animation in question exists.
    25.                 //If the trigger is not found, no animation is played, but no error is thrown.
    26.                 for (int i = 0; i < animator.parameters.Length; i++)
    27.                 {
    28.                     if (animator.parameters[i].name == "Sprinting")
    29.                     {
    30.                         animator.SetBool(sprintingHash, false);
    31.                     }
    32.                 }
    33.             }
    34.         }
     
    Last edited: Feb 6, 2018
  14. mjunaidch

    mjunaidch

    Joined:
    Oct 23, 2016
    Posts:
    7
    @squared55 Do you support FPS Weapons Integration ??
     
  15. squared55

    squared55

    Joined:
    Aug 28, 2012
    Posts:
    1,818
    Unfortunately, I do not offer official support for FPS Weapons. The only two assets I officially support are UFPS and RFPS.
     
  16. RoyalAllen

    RoyalAllen

    Joined:
    Oct 17, 2012
    Posts:
    205
    Sorry I haven't replied to this. I plan on doing a updated working version of this. I am working on new updated solution. I don't have a ETA yet though. Trying to do the work for us. No need to edit a bunch of scripts. But thanks @squared55 .
     
  17. RoyalAllen

    RoyalAllen

    Joined:
    Oct 17, 2012
    Posts:
    205
  18. Barry100

    Barry100

    Joined:
    Nov 12, 2014
    Posts:
    200
    hi - I am having an issue where the AI dont see my guy at all. My guy is instantiated after the game has started. I have tried changing the awake in controllerscript to Start so that I can turn it on after I have instantiated my player but this makes no difference. I have also tried turning off the AI guy and then turning him on once my player has been instantiated as well. Can you please help?

    I have added the target script to my player but it seems to get turned off when the player is instantiated. When I turn it back on it makes no difference.
     
    Last edited: Feb 18, 2018
  19. RoyalAllen

    RoyalAllen

    Joined:
    Oct 17, 2012
    Posts:
    205

    I have tried this method before

    Try creating a new script to enable the the target script.

    using Tactical AI.

    Example Script : Mono
    {

    Private TargetScript _TargetScript;

    void OnEnable
    { _TargetScript = gameObject.GetComponent <TargetScript>();

    _TargetScript.enabled = True;
    }

    }

    Hopefullythis helps
     
  20. RoyalAllen

    RoyalAllen

    Joined:
    Oct 17, 2012
    Posts:
    205
    Be sure to put it on the player
     
  21. Barry100

    Barry100

    Joined:
    Nov 12, 2014
    Posts:
    200
    @RoyalAllen I got it working a different way.. I have a new issue.. the AI doesnt chase the guy? Its weird. They will partol and wander as expected but once they have engaged my guy, I and I run away from them or behind a wall, they will not chase after me or try to find me.. Any idea why this would happen?
     
  22. Barry100

    Barry100

    Joined:
    Nov 12, 2014
    Posts:
    200
    Also to let you know, I am also still using the old Shooter AI which chase you all over the place relentlessly which is much more fun!
     
  23. squared55

    squared55

    Joined:
    Aug 28, 2012
    Posts:
    1,818
    The AI should work fine with instantiated targets without any code modifications- see the Spawner demo. If the target script is turning itself off by itself, there're probably an error. If you are getting any error messages in the console, could you please post them?

    I'm guessing your AI Controller layermask doesn't include your level parts. Thus, your agents can see through walls and they don't approach because they think they already have line of sight. Modifying the layermask should fix things. Alternatively, maybe they've taken cover and are waiting for the target to come back to them. It's tough to say without more details.

    All that being said, if you set the AI Type to Berserker (in the base script), they should relentlessly chase the player upon seeing them.
     
    Last edited: Feb 20, 2018
  24. Barry100

    Barry100

    Joined:
    Nov 12, 2014
    Posts:
    200
    @squared55 I have the controller script layermask set to "Everything". Should I not have it set to this ?
     
  25. squared55

    squared55

    Joined:
    Aug 28, 2012
    Posts:
    1,818
    That should be fine, if the agents are firing at the player. Are there any errors, and have you tried setting the AI type to Berserker?
     
  26. Pauloxande

    Pauloxande

    Joined:
    Feb 8, 2014
    Posts:
    110
    friend would like to know if there is a way to put an event that after dying, open the event disolve shader
    As it happens in the AI of the TPS INVECTOR
     

    Attached Files:

  27. squared55

    squared55

    Joined:
    Aug 28, 2012
    Posts:
    1,818
    OnAIDeath() is called on all scripts on the AI's base object when it dies. You could use that method in a new script to trigger other effects/functions.
     
  28. qpJaKeWaGGqp

    qpJaKeWaGGqp

    Joined:
    May 18, 2017
    Posts:
    23
    If anyone wants a better version of the guard behavior (one that rotates to forward position at the key transform) I will post it here. Gave me a headache, but I just had to do a little testing to get it. Lemme know if there is a better/cleaner/better looking/more efficient/etc. way!
    Code (CSharp):
    1. namespace TacticalAI
    2. {
    3.     public class MoveToTransform : TacticalAI.CustomAIBehaviour
    4.     {
    5.         Transform guardspot;
    6.  
    7.         Vector3 rotationTarget;
    8.  
    9.         bool adjustRotation = false;
    10.         float step;
    11.         public override void Initiate()
    12.         {
    13.             base.Initiate();
    14.         }
    15.  
    16.         public override void AICycle()
    17.         {
    18.             if (baseScript.keyTransform)
    19.             {
    20.                 targetVector = baseScript.keyTransform.position;
    21.                 if (navI.GetRemainingDistance() < 2)
    22.                 {
    23.                     adjustRotation = true;
    24.                 }
    25.             }
    26.         }
    27.  
    28.         public override void EachFrame()
    29.         {
    30.             step = rotateToAimGunScript.rotationSpeed * Time.deltaTime;
    31.             guardspot = baseScript.keyTransform;
    32.             rotationTarget = guardspot.forward;
    33.             if (adjustRotation)
    34.             {
    35.                 Vector3 newDir = Vector3.RotateTowards(myTransform.forward, rotationTarget, step, 00.0F);
    36.                 myTransform.rotation = Quaternion.LookRotation(newDir);
    37.                 if (myTransform.rotation == guardspot.rotation)
    38.                 {
    39.                     adjustRotation = false;
    40.                 }
    41.             }
    42.         }
    43.     }
    44. }
     
    tcmeric likes this.
  29. hellobard

    hellobard

    Joined:
    Sep 26, 2012
    Posts:
    140
    I have an issue where my agents aren't spawning at the correct spawn points, they just jump to a random place on the navmesh when the spawners are placed at certain positions. Some spawner positions work, but most don't. I believe there's an issue with the navmesh agent not finding the navmesh at the time of spawning.

    Is there a way to delay the navmesh-navigation by say a second?
     
    Last edited: Feb 22, 2018
  30. squared55

    squared55

    Joined:
    Aug 28, 2012
    Posts:
    1,818
    You could try adding a timer to the code in the Navmesh interface that would stop SetDestination() from being called until a second or so has fast. Set the timer in Initialize(), and then count down in Update.

    Try moving the spawner slightly above the navmesh as well.
    Here's how I would do it:

    Code (CSharp):
    1.  
    2. namespace TacticalAI
    3. {
    4.     public class MoveToTransform : TacticalAI.CustomAIBehaviour
    5.     {
    6.         public override void Initiate()
    7.         {
    8.             base.Initiate();
    9.         }
    10.  
    11.         public override void AICycle()
    12.         {
    13.             if (baseScript.keyTransform)
    14.                 targetVector = baseScript.keyTransform.position;
    15.         }
    16.  
    17.         public override void EachFrame()
    18.         {
    19.             float distToFaceDirection = 2.0f;
    20.             if (navI.GetRemainingDistance() < distToFaceDirection)
    21.             {
    22.                 Vector3 goalRotVector = baseScript.keyTransform.forward;
    23.                 goalRotVector.y = 0;
    24.                 transform.rotation = Quaternion.LookRotation(goalRotVector, Vector3.up);
    25.             }
    26.         }
    27.     }
    28. }
    29.  
    The main difference between yours and mine (besides a checks that stops the distance check in yours from happening after it's occured) is that you don't need to use RotateTowards- you can just snap the agent base's transform to the desired rotation and the AI body will gradually follow automatically via the AnimationScript at the rotation speed set there.
     
    Last edited: Feb 23, 2018
    hopeful likes this.
  31. qpJaKeWaGGqp

    qpJaKeWaGGqp

    Joined:
    May 18, 2017
    Posts:
    23
    True. Good stuff, a little less writing too! Thanks for info, ill implement it now.
     
  32. hellobard

    hellobard

    Joined:
    Sep 26, 2012
    Posts:
    140
    Great, thank you! I'll give that a try :)
     
  33. hellobard

    hellobard

    Joined:
    Sep 26, 2012
    Posts:
    140

    So here's what I did:
    Code (CSharp):
    1.         private float Timer = 0;
    2.  
    3.         UnityEngine.AI.NavMeshAgent agent;
    4.         Vector3 lastPos;
    5.         Vector3 returnVel;
    6.         Transform myTransform;
    7.  
    8.         public virtual void Initialize(GameObject gameObject)
    9.         {
    10.  
    11.  
    12.  
    13.             myTransform = gameObject.GetComponent<AnimationScript>().myAIBodyTransform;
    14.             myTransform = transform;
    15.             lastPos = myTransform.position;
    16.  
    17.             if (gameObject.GetComponent<UnityEngine.AI.NavMeshAgent>() != null){
    18.                 agent = gameObject.GetComponent<UnityEngine.AI.NavMeshAgent>();
    19.             }
    20.             else
    21.             {
    22.                 UnityEngine.Debug.Log("No Agent Found!");
    23.             }
    24.         }
    25.  
    26.         void Update()
    27.         {
    28.  
    29.             Timer += Time.deltaTime;
    30.  
    31.             if (Time.timeScale > 0.0f)
    32.             {
    33.                 returnVel = (myTransform.position - lastPos) / Time.deltaTime;
    34.                 lastPos = myTransform.position;
    35.             }
    36.         }
    37.    
    38.         public virtual void SetDestination(Vector3 v){
    39.             if (Timer > 5.0f) {        //bardcode
    40.        
    41.                 if(agent.enabled)
    42.                     agent.SetDestination(v);
    43.                 //Debug.DrawLine(transform.position, v);
    44.                 //Debug.Break();
    45.             }
    46.         }
    47.  
    Unfortunately that didn't solve the issue for me. Is this the correct way to do it?
     
  34. squared55

    squared55

    Joined:
    Aug 28, 2012
    Posts:
    1,818
    Does your issue occur in the demo scenes? Additionally, can your provide steps to duplicate it? A screenshot of your scene would be useful as well. :)
     
  35. Fortitude3D

    Fortitude3D

    Joined:
    Sep 7, 2017
    Posts:
    155
    Goodjob, nice project ;)
     
  36. spark-man

    spark-man

    Joined:
    May 22, 2013
    Posts:
    96
    any video or playable demo showing how tactical AI works? and how well enemy take cover?
     
  37. hellobard

    hellobard

    Joined:
    Sep 26, 2012
    Posts:
    140
    Does not occur in demo scenes, just my game scenes.
    This is the issue explained here: https://answers.unity.com/questions/771908/navmesh-issue-with-spawning-players.html

    Solving it required me to turn off the NavMeshAgent component and then activating it after a delay.

    If anyone encounters the same issue, here's the script I added to my enemies:
    Code (CSharp):
    1. public class EnableNavMeshAfterDelay : MonoBehaviour {
    2.  
    3.     public float Delay = 0.1f;
    4.     private NavMeshAgent NavMeshConnector;
    5.  
    6.     void Start () {
    7.         NavMeshConnector = gameObject.GetComponent<NavMeshAgent> ();
    8.         NavMeshConnector.enabled = false;
    9.         StartCoroutine ("DelayTheStart");
    10.  
    11.     }
    12.  
    13.     IEnumerator DelayTheStart() {
    14.         yield return new WaitForSeconds (Delay);
    15.         NavMeshConnector.enabled = true;
    16.         yield return null;
    17.  
    18.  
    19.     }
    20. }
     
  38. squared55

    squared55

    Joined:
    Aug 28, 2012
    Posts:
    1,818
    Not at the moment, but I'll see if I can record a quick video sometime in the next few days.

    Glad to hear the issue is resolved!
     
  39. qpJaKeWaGGqp

    qpJaKeWaGGqp

    Joined:
    May 18, 2017
    Posts:
    23
    Here's an interesting bug I've stumbled upon. For some reason, when I load in a new scene, the agents no longer use the walking animations. They can still move (more like a slide now without the animation), shoot, detect me, reload, melee, everything like that, just not walk. It works fine on the initial scene. The weirdest thing is if I start from the title screen, and go to a level. It works. But then if I go from that level to another, they don't walk. So I don't believe it has to do with loading a scene, but rather maybe clearing out the old one? Not entirely sure, I will look more into it though.
    EDIT #1:
    It only happens when I go from one "playable" level to another. It does not happen if I go from the main menu to one, or from the tutorial (which does have some AI on it as well). Only from mission A to mission B. I can go from A to the main menu to B and it works fine. Would be because I am loading asynchronously? (Due to my loading bar I have to.)
    EDIT #2:
    When I do 'Debug.Log(animator.GetFloat(forwardsMoveHash));' I get a return value of NaN. Just to keep the situation updated on what I have found. I believe it does not have to do with the async as I said before. Still trying to figure it out however. I've been doing some research and what it seems is that NaN means I am getting a value of #/0 or Infinity.
    EDIT #3:
    With a bit of research, I fixed my issue (at least from what I have seen).
    Here is the code I put in the LateUpdate() of the AnimationScript:
    Code (CSharp):
    1.          
    2. if(float.IsNaN(animator.GetFloat(forwardsMoveHash)))
    3.             {
    4.                 animator.SetFloat(forwardsMoveHash, 0);
    5.             }
    6.             if(float.IsNaN(animator.GetFloat(sidewaysMoveHash)))
    7.             {
    8.                 animator.SetFloat(sidewaysMoveHash, 0);
    9.             }
    Feel free to post better fixes. I just did if it gives me NaN, revert it back to 0.
     
    Last edited: Mar 1, 2018
  40. squared55

    squared55

    Joined:
    Aug 28, 2012
    Posts:
    1,818
    Which version of TSAI are you using?

    I ask because I fixed a NaN bug one or two updates ago, but I'm not sure if it's the same one as yours. It happened if you set the timeScale to 0, which gave a divide by 0 error in the Navmesh Interface, breaking the animator. Fixed by checking in the Navmesh interface whether Timescale is 0 before proceeding.
     
    Last edited: Mar 2, 2018
  41. qpJaKeWaGGqp

    qpJaKeWaGGqp

    Joined:
    May 18, 2017
    Posts:
    23
    I am using version 1.8.1. The issue was in fact caused by setting the TimeScale to 0. It didn't seem to catch it for me though. So I had to do that myself. I believe your fix may only work if it is set to 0 during a current scene? I'm not sure, but my scene switches from A being at timescale of 0 to scene B with a timescale of 1. Again, not sure. But whatever gets it fixed is good enough for me!
     
    Last edited: Mar 1, 2018
  42. squared55

    squared55

    Joined:
    Aug 28, 2012
    Posts:
    1,818
    Thanks. I'll look into the issue.
     
    qpJaKeWaGGqp likes this.
  43. PicturesInDark

    PicturesInDark

    Joined:
    Jun 13, 2013
    Posts:
    89
    Hi Everybody

    I present you my videogame website http://www.andromedavideogame.com/

    I use Tactical shhoter AI for my main AI and f12.png f33.png Puppet Master and FinalIk in all project. Thanks for you feedback
     
    f1chris likes this.
  44. penta_d

    penta_d

    Joined:
    Sep 23, 2015
    Posts:
    2
    How to make TacAI Agents aware of the UFPS Grenade nearby? TacAI agents get alerted on TacAI Grenades. How can i work around with UFPS Grenade?
     
  45. twangydave

    twangydave

    Joined:
    Mar 30, 2017
    Posts:
    41
    The very best demonstration is the playable demo that was available. That showcases all the behaviours and is SERIOUSLY hard.

    Happy to post a bit of video of my hobby project if it helps - it's an old fashioned maze shooter inspired by my love of 'Indiana Jones V The Nazis' type environments. I'm only up to the earliest levels so I've had to dial back the effectiveness of the AI quite heavily to make a fair challenge for the player. It probably gives a better idea of the AI's flanking and assaulting behaviour rather than cover as I wanted the AI not to be too hard at the start.

    I'm a first timer just using this, RFPS and (mostly) free assets to learn Unity so if you see anything you don't like it going to be my fault rather than any fault of the package. My game is set in a Matrix type universe so I've tweaked the AI to make them more artificial as they are supposed to be cyborg type enemies - that's why you see the fast rotations and large scale, it's meant to be creepy! The clipping through walls is my fault due to badly placed cover nodes - also the kill house bit at the end is what I'm working on at the mo so is heavily WIP and has no cover set up or obstacles yet.

    Hope it helps!

     
    Last edited: Mar 26, 2018
    CityGen3D and spark-man like this.
  46. GWStudio

    GWStudio

    Joined:
    Sep 27, 2016
    Posts:
    109
    hi everyone ... how to make the ai hear the bullet sound and bullet impact near him .. using rfps 1.44
     
  47. Prefab

    Prefab

    Joined:
    May 14, 2013
    Posts:
    68
    Hi @squared55 , looking to purchase this asset but just wondering whether there are any plans for ladder support and also network multiplayer at any stage?
     
  48. squared55

    squared55

    Joined:
    Aug 28, 2012
    Posts:
    1,818
    Try attaching the SoundMaker script to the bullet impact effect prefab, and configuring it as appropriate.

    I currently do not have any plans to add support for those, no.
     
  49. f1chris

    f1chris

    Joined:
    Sep 21, 2013
    Posts:
    335
    What are the plans or roadmap for this asset ? any new features coming or development is stopped ?
     
  50. squared55

    squared55

    Joined:
    Aug 28, 2012
    Posts:
    1,818
    I don't have a concrete roadmap for the asset. The next feature I want to implement is having agents lead their targets, but I've been pretty busy with unrelated things recently so I don't know when I'll have a chance to implement it.
     
    Last edited: Apr 9, 2018
    qpJaKeWaGGqp likes this.