Add utility AI (#806)

Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
Co-authored-by: Metal Gear Sloth <metalgearsloth@gmail.com>
Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com>
This commit is contained in:
metalgearsloth
2020-06-18 22:52:44 +10:00
committed by GitHub
parent 9b8cedf6c6
commit 5391d3c72a
211 changed files with 10335 additions and 527 deletions

View File

@@ -0,0 +1,22 @@
using System.Collections;
using System.Collections.Generic;
using Content.Server.AI.Utility.Actions;
using Robust.Shared.Interfaces.GameObjects;
namespace Content.Server.AI.Utility.BehaviorSets
{
/// <summary>
/// AKA DecisionMaker in IAUS. Just a group of actions that can be dynamically added or taken away from an AI.
/// </summary>
public abstract class BehaviorSet
{
protected IEntity Owner;
public BehaviorSet(IEntity owner)
{
Owner = owner;
}
public IEnumerable<IAiUtility> Actions { get; protected set; }
}
}

View File

@@ -0,0 +1,27 @@
using Content.Server.AI.Utility.Actions;
using Content.Server.AI.Utility.ExpandableActions.Clothing.Gloves;
using Content.Server.AI.Utility.ExpandableActions.Clothing.Head;
using Content.Server.AI.Utility.ExpandableActions.Clothing.OuterClothing;
using Content.Server.AI.Utility.ExpandableActions.Clothing.Shoes;
using Robust.Shared.Interfaces.GameObjects;
namespace Content.Server.AI.Utility.BehaviorSets
{
public sealed class ClothingBehaviorSet : BehaviorSet
{
public ClothingBehaviorSet(IEntity owner) : base(owner)
{
Actions = new IAiUtility[]
{
new EquipAnyHeadExp(),
new EquipAnyOuterClothingExp(),
new EquipAnyGlovesExp(),
new EquipAnyShoesExp(),
new PickUpAnyNearbyHeadExp(),
new PickUpAnyNearbyOuterClothingExp(),
new PickUpAnyNearbyGlovesExp(),
new PickUpAnyNearbyShoesExp(),
};
}
}
}

View File

@@ -0,0 +1,20 @@
using System.Collections.Generic;
using Content.Server.AI.Utility.Actions;
using Content.Server.AI.Utility.Actions.Nutrition;
using Content.Server.AI.Utility.ExpandableActions.Nutrition;
using Robust.Shared.Interfaces.GameObjects;
namespace Content.Server.AI.Utility.BehaviorSets
{
public sealed class HungerBehaviorSet : BehaviorSet
{
public HungerBehaviorSet(IEntity owner) : base(owner)
{
Actions = new IAiUtility[]
{
new PickUpNearbyFoodExp(),
new UseFoodInInventoryExp(),
};
}
}
}

View File

@@ -0,0 +1,18 @@
using Content.Server.AI.Utility.Actions;
using Content.Server.AI.Utility.Actions.Idle;
using Robust.Shared.Interfaces.GameObjects;
namespace Content.Server.AI.Utility.BehaviorSets
{
public class IdleBehaviorSet : BehaviorSet
{
public IdleBehaviorSet(IEntity owner) : base(owner)
{
Actions = new IAiUtility[]
{
new CloseLastEntityStorage(Owner),
new WanderAndWait(Owner),
};
}
}
}

View File

@@ -0,0 +1,17 @@
using Content.Server.AI.Utility.Actions;
using Content.Server.AI.Utility.Actions.Test;
using Robust.Shared.Interfaces.GameObjects;
namespace Content.Server.AI.Utility.BehaviorSets
{
public sealed class PathingDummyBehaviorSet : BehaviorSet
{
public PathingDummyBehaviorSet(IEntity owner) : base(owner)
{
Actions = new IAiUtility[]
{
new MoveRightAndLeftTen(owner),
};
}
}
}

View File

@@ -0,0 +1,37 @@
using System.Collections.Generic;
using Content.Server.AI.Utility.Actions;
using Content.Server.AI.Utility.Actions.Combat.Ranged;
using Content.Server.AI.Utility.Actions.Combat.Ranged.Ballistic;
using Content.Server.AI.Utility.Actions.Combat.Ranged.Hitscan;
using Content.Server.AI.Utility.ExpandableActions.Combat;
using Content.Server.AI.Utility.ExpandableActions.Combat.Melee;
using Content.Server.AI.Utility.ExpandableActions.Combat.Ranged;
using Content.Server.AI.Utility.ExpandableActions.Combat.Ranged.Ballistic;
using Content.Server.AI.Utility.ExpandableActions.Combat.Ranged.Hitscan;
using Robust.Shared.Interfaces.GameObjects;
namespace Content.Server.AI.Utility.BehaviorSets
{
public sealed class SpirateBehaviorSet : BehaviorSet
{
public SpirateBehaviorSet(IEntity owner) : base(owner)
{
Actions = new IAiUtility[]
{
new PickUpRangedExp(),
// TODO: Reload Ballistic
new DropEmptyBallisticExp(),
// TODO: Ideally long-term we should just store the weapons in backpack
new DropEmptyHitscanExp(),
new EquipMeleeExp(),
new EquipBallisticExp(),
new EquipHitscanExp(),
new PickUpHitscanFromChargersExp(),
new ChargeEquippedHitscanExp(),
new RangedAttackNearbySpeciesExp(),
new PickUpMeleeWeaponExp(),
new MeleeAttackNearbySpeciesExp(),
};
}
}
}

View File

@@ -0,0 +1,18 @@
using Content.Server.AI.Utility.Actions;
using Content.Server.AI.Utility.ExpandableActions.Nutrition;
using Robust.Shared.Interfaces.GameObjects;
namespace Content.Server.AI.Utility.BehaviorSets
{
public sealed class ThirstBehaviorSet : BehaviorSet
{
public ThirstBehaviorSet(IEntity owner) : base(owner)
{
Actions = new IAiUtility[]
{
new PickUpNearbyDrinkExp(),
new UseDrinkInHandsExp(),
};
}
}
}