Conflicts:
	Subsurface/Source/Characters/AI/Objectives/AIObjectiveManager.cs
This commit is contained in:
Regalis
2016-01-18 21:48:40 +02:00
7 changed files with 87 additions and 9 deletions

View File

@@ -63,6 +63,7 @@
<Compile Include="Source\Characters\AI\IndoorsSteeringManager.cs" />
<Compile Include="Source\Characters\AI\Objectives\AIObjectiveCombat.cs" />
<Compile Include="Source\Characters\AI\Objectives\AIObjectiveContainItem.cs" />
<Compile Include="Source\Characters\AI\Objectives\AIObjectiveFixLeaks.cs" />
<Compile Include="Source\Characters\AI\Order.cs" />
<Compile Include="Source\Characters\AI\CrewCommander.cs" />
<Compile Include="Source\Characters\AI\HumanAIController.cs" />

View File

@@ -9,7 +9,7 @@
<ErrorReportUrlHistory />
<FallbackCulture>en-US</FallbackCulture>
<VerifyUploadedFiles>false</VerifyUploadedFiles>
<ProjectView>ProjectFiles</ProjectView>
<ProjectView>ShowAllFiles</ProjectView>
</PropertyGroup>
<PropertyGroup>
<ReferencePath>

View File

@@ -19,5 +19,9 @@
<Order name="Operate Railgun" doingtext="Operating Railgun" targetitemtype="Turret" usecontroller="true" options="Fire at will, Hold fire" color="1.0,0.0,0.0,1.0">
<Sprite texture="Content/UI/orderSymbols.png" sourcerect="0,64,64,64"/>
</Order>
</Order>
<Order name="Fix Leaks" doingtext="Fixing Leaks" color="0.6,0.85,1.0,1.0">
<Sprite texture="Content/UI/orderSymbols.png" sourcerect="64,64,64,64"/>
</Order>
</Orders>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

View File

@@ -0,0 +1,76 @@
using Microsoft.Xna.Framework;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Barotrauma
{
class AIObjectiveFixLeaks : AIObjective
{
const float UpdateGapListInterval = 10.0f;
private float updateGapListTimer;
private List<AIObjectiveFixLeak> objectiveList;
public AIObjectiveFixLeaks(Character character)
: base (character, "")
{
objectiveList = new List<AIObjectiveFixLeak>();
}
public override bool IsCompleted()
{
return false;
}
protected override void Act(float deltaTime)
{
updateGapListTimer -= deltaTime;
if (updateGapListTimer<=0.0f)
{
UpdateGapList();
updateGapListTimer = UpdateGapListInterval;
}
if (objectiveList.Any())
{
objectiveList[objectiveList.Count-1].TryComplete(deltaTime);
if (!objectiveList[objectiveList.Count-1].CanBeCompleted || objectiveList[objectiveList.Count-1].IsCompleted())
{
objectiveList.RemoveAt(objectiveList.Count - 1);
}
}
}
private void UpdateGapList()
{
objectiveList.Clear();
foreach (Gap gap in Gap.GapList)
{
if (gap.IsRoomToRoom || gap.ConnectedDoor != null || gap.Open < 0.1f) continue;
float dist = Vector2.DistanceSquared(character.WorldPosition, gap.WorldPosition);
int index = 0;
while (index<objectiveList.Count &&
Vector2.DistanceSquared(objectiveList[index].Leak.WorldPosition, character.WorldPosition)>dist)
{
index++;
}
objectiveList.Insert(index, new AIObjectiveFixLeak(gap, character));
}
}
public override bool IsDuplicate(AIObjective otherObjective)
{
return otherObjective is AIObjectiveFixLeaks;
}
}
}

View File

@@ -54,13 +54,6 @@ namespace Barotrauma
//sort objectives according to priority
objectives.Sort((x, y) => y.GetPriority(character).CompareTo(x.GetPriority(character)));
foreach (Gap gap in Gap.GapList)
{
if (gap.IsRoomToRoom || gap.ConnectedDoor != null || gap.Open<0.01f) continue;
AddObjective(new AIObjectiveFixLeak(gap, character));
}
}
public void DoCurrentObjective(float deltaTime)
@@ -87,6 +80,10 @@ namespace Barotrauma
case "wait":
currentObjective = new AIObjectiveGoTo(character, character, true);
break;
case "fixleaks":
case "fix leaks":
currentObjective = new AIObjectiveFixLeaks(character);
break;
default:
if (order.TargetItem == null) return;

Binary file not shown.