Fined tuned some pathfinding stuff b adding pathTo and Delay functions. As long as I don't have to cross a bridge pathfinding works.
This commit is contained in:
parent
d722144c21
commit
cd0ac16a22
|
@ -169,7 +169,7 @@ namespace StardustCore.Animations
|
|||
try
|
||||
{
|
||||
Animation ani = new Animation(new Rectangle(Convert.ToInt32(array[1]), Convert.ToInt32(array[2]), Convert.ToInt32(array[3]), Convert.ToInt32(array[4])), Convert.ToInt32(array[5]));
|
||||
ModCore.ModMonitor.Log(ani.sourceRectangle.ToString());
|
||||
// ModCore.ModMonitor.Log(ani.sourceRectangle.ToString());
|
||||
ok.Add(ani);
|
||||
}
|
||||
catch(Exception err)
|
||||
|
|
|
@ -612,7 +612,7 @@ namespace StardustCore
|
|||
else
|
||||
{
|
||||
// Game1.showRedMessage("STEP 2");
|
||||
ModCore.ModMonitor.Log(vector.ToString());
|
||||
//ModCore.ModMonitor.Log(vector.ToString());
|
||||
|
||||
Vector2 newVec = new Vector2(vector.X, vector.Y);
|
||||
// cObj.boundingBox.Inflate(32, 32);
|
||||
|
|
|
@ -0,0 +1,243 @@
|
|||
using Microsoft.Xna.Framework;
|
||||
using StarAI.PathFindingCore;
|
||||
using StardewModdingAPI;
|
||||
using StardewValley;
|
||||
using StardustCore;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using StarAI;
|
||||
|
||||
namespace StarAI
|
||||
{
|
||||
class Commands
|
||||
{
|
||||
|
||||
public static void initializeCommands()
|
||||
{
|
||||
ModCore.CoreHelper.ConsoleCommands.Add("hello", "Ok?", new Action<string, string[]>(hello));
|
||||
ModCore.CoreHelper.ConsoleCommands.Add("pathfind", "pathy?", new Action<string, string[]>(Commands.pathfind));
|
||||
ModCore.CoreHelper.ConsoleCommands.Add("pathfinding", "pathy?", new Action<string, string[]>(Commands.pathfind));
|
||||
|
||||
pathfind("Initialize Delay 0", new string[] {
|
||||
"setDelay",
|
||||
"0"
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static void pathfind(string s, string[] args)
|
||||
{
|
||||
|
||||
if (args.Length < 1)
|
||||
{
|
||||
ModCore.CoreMonitor.Log("No args passed into path finding function", LogLevel.Error);
|
||||
}
|
||||
|
||||
//Set delay code
|
||||
#region
|
||||
if (args[0]=="setDelay"|| args[0]=="delay" || args[0]=="setdelay"|| args[0] == "SetDelay")
|
||||
{
|
||||
PathFindingLogic.delay = Convert.ToInt32(args[1]);
|
||||
ModCore.CoreMonitor.Log("Pathfinding node delay set to: " + Convert.ToString(PathFindingLogic.delay) + " milliseconds.");
|
||||
}
|
||||
#endregion
|
||||
|
||||
//PathTo Code
|
||||
#region
|
||||
if (args[0]=="pathTo"|| args[0]=="pathto"|| args[0]=="PathTo"|| args[0] == "Pathto")
|
||||
{
|
||||
pathfind(s,new string[]{
|
||||
|
||||
"setStart",
|
||||
"currentPosition"
|
||||
});
|
||||
int currentX = Game1.player.getTileX();
|
||||
int currentY = Game1.player.getTileY();
|
||||
int xOffset = Convert.ToInt32(args[1]);
|
||||
int yOffset = Convert.ToInt32(args[2]);
|
||||
int destX = currentX + xOffset;
|
||||
int destY = currentY + yOffset;
|
||||
pathfind(s, new string[]
|
||||
{
|
||||
"addGoal",
|
||||
destX.ToString(),
|
||||
destY.ToString()
|
||||
|
||||
});
|
||||
|
||||
pathfind("pathfind restart", new string[]
|
||||
{
|
||||
"start"
|
||||
});
|
||||
}
|
||||
#endregion
|
||||
|
||||
//Add goal code
|
||||
#region
|
||||
if (args[0] == "addGoal" || args[0] == "setGoal")
|
||||
{
|
||||
|
||||
TileNode t = new TileNode(1, Vector2.Zero, Path.Combine("Tiles", "GenericUncoloredTile.xnb"), Path.Combine("Tiles", "TileData.xnb"), StardustCore.IlluminateFramework.Colors.invertColor(StardustCore.IlluminateFramework.ColorsList.Green));
|
||||
Vector2 pos = new Vector2((int)(Convert.ToInt32(args[1]) * Game1.tileSize), Convert.ToInt32(args[2]) * Game1.tileSize);
|
||||
bool ok = t.checkIfICanPlaceHere(t, new Vector2(pos.X, pos.Y), Game1.player.currentLocation);
|
||||
if (ok == false)
|
||||
{
|
||||
ModCore.CoreMonitor.Log("Can't place a goal point here!!!", LogLevel.Error);
|
||||
return;
|
||||
}
|
||||
t.placementAction(Game1.currentLocation, (int)pos.X, (int)pos.Y);
|
||||
PathFindingLogic.currentGoal = t;
|
||||
PathFindingLogic.goals.Add(t);
|
||||
}
|
||||
#endregion
|
||||
|
||||
//Add start
|
||||
#region
|
||||
if (args[0] == "addStart" || args[0] == "setStart")
|
||||
{
|
||||
|
||||
TileNode t = new TileNode(1, Vector2.Zero, Path.Combine("Tiles", "GenericUncoloredTile.xnb"), Path.Combine("Tiles", "TileData.xnb"), StardustCore.IlluminateFramework.Colors.invertColor(StardustCore.IlluminateFramework.ColorsList.Magenta));
|
||||
Vector2 pos;
|
||||
if (args[1] == "currentPosition")
|
||||
{
|
||||
pos = new Vector2((int)(Game1.player.getTileX() * Game1.tileSize), Game1.player.getTileY() * Game1.tileSize);
|
||||
}
|
||||
else
|
||||
{
|
||||
pos = new Vector2((int)(Convert.ToInt32(args[1]) * Game1.tileSize), Convert.ToInt32(args[2]) * Game1.tileSize);
|
||||
}
|
||||
|
||||
bool ok = t.checkIfICanPlaceHere(t, new Vector2(pos.X, pos.Y), Game1.player.currentLocation);
|
||||
if (ok == false)
|
||||
{
|
||||
ModCore.CoreMonitor.Log("Can't place a start point here!!!", LogLevel.Error);
|
||||
return;
|
||||
}
|
||||
t.placementAction(Game1.currentLocation, (int)pos.X, (int)pos.Y);
|
||||
PathFindingLogic.source = t;
|
||||
}
|
||||
#endregion
|
||||
|
||||
//Restart Code
|
||||
#region
|
||||
if (args[0] == "restart")
|
||||
{
|
||||
List<CoreObject> removalList = new List<CoreObject>();
|
||||
foreach (var v in StardustCore.ModCore.SerializationManager.trackedObjectList)
|
||||
{
|
||||
removalList.Add(v);
|
||||
}
|
||||
foreach (var v in removalList)
|
||||
{
|
||||
StardustCore.ModCore.SerializationManager.trackedObjectList.Remove(v);
|
||||
Game1.player.currentLocation.objects.Remove(v.TileLocation);
|
||||
pathfind("pathfind restart", new string[]
|
||||
{
|
||||
"addGoal",
|
||||
PathFindingLogic.currentGoal.tileLocation.X.ToString(),
|
||||
PathFindingLogic.currentGoal.tileLocation.Y.ToString(),
|
||||
}
|
||||
);
|
||||
}
|
||||
removalList.Clear();
|
||||
pathfind("pathfind restart", new string[]
|
||||
{
|
||||
"addStart",
|
||||
PathFindingLogic.source.tileLocation.X.ToString(),
|
||||
PathFindingLogic.source.tileLocation.Y.ToString(),
|
||||
}
|
||||
);
|
||||
pathfind("pathfind restart", new string[]
|
||||
{
|
||||
"start"
|
||||
}
|
||||
);
|
||||
|
||||
}
|
||||
#endregion
|
||||
|
||||
//start code
|
||||
#region
|
||||
if (args[0] == "start")
|
||||
{
|
||||
if (Game1.player == null) return;
|
||||
if (Game1.hasLoadedGame == false) return;
|
||||
// ModCore.CoreMonitor.Log(Game1.player.currentLocation.isTileLocationOpen(new xTile.Dimensions.Location((int)(Game1.player.getTileX() + 1)*Game1.tileSize, (int)(Game1.player.getTileY())*Game1.tileSize)).ToString());
|
||||
//CoreMonitor.Log(Convert.ToString(warpGoals.Count));
|
||||
if (PathFindingCore.PathFindingLogic.currentGoal == null)
|
||||
{
|
||||
ModCore.CoreMonitor.Log("NO VALID GOAL SET FOR PATH FINDING!", LogLevel.Error);
|
||||
}
|
||||
if (PathFindingCore.PathFindingLogic.source == null)
|
||||
{
|
||||
ModCore.CoreMonitor.Log("NO VALID START SET FOR PATH FINDING!", LogLevel.Error);
|
||||
}
|
||||
|
||||
if (ModCore.fun.Status == TaskStatus.Running)
|
||||
{
|
||||
ModCore.CoreMonitor.Log("TASK IS RUNNING CAN'T PATHFIND AT THE MOMENT", LogLevel.Alert);
|
||||
return;
|
||||
}
|
||||
if (ModCore.fun.Status == TaskStatus.RanToCompletion)
|
||||
{
|
||||
|
||||
ModCore.CoreMonitor.Log("TASK IS Finished PATHFINDING", LogLevel.Warn);
|
||||
ModCore.obj[0] = PathFindingLogic.source;
|
||||
ModCore.obj[1] = PathFindingLogic.currentGoal;
|
||||
ModCore.obj[2] = PathFindingLogic.queue;
|
||||
ModCore.fun = new Task(new Action<object>(PathFindingLogic.pathFindToSingleGoal), ModCore.obj);
|
||||
return;
|
||||
}
|
||||
|
||||
if (ModCore.fun.Status == TaskStatus.Created)
|
||||
{
|
||||
ModCore.CoreMonitor.Log("CREATE AND RUN A TASK!!! PATHFINDING!");
|
||||
ModCore.obj[0] = PathFindingLogic.source;
|
||||
ModCore.obj[1] = PathFindingLogic.currentGoal;
|
||||
ModCore.obj[2] = PathFindingLogic.queue;
|
||||
ModCore.fun = new Task(new Action<object>(PathFindingLogic.pathFindToSingleGoal), ModCore.obj);
|
||||
|
||||
ModCore.fun.Start();
|
||||
return;
|
||||
}
|
||||
ModCore.CoreMonitor.Log(ModCore.fun.Status.ToString());
|
||||
if (ModCore.fun.Status == TaskStatus.Faulted)
|
||||
{
|
||||
ModCore.CoreMonitor.Log(ModCore.fun.Exception.ToString());
|
||||
ModCore.CoreMonitor.Log("CREATE AND RUN A TASK!!! PATHFINDING!");
|
||||
ModCore.obj[0] = PathFindingLogic.source;
|
||||
ModCore.obj[1] = PathFindingLogic.currentGoal;
|
||||
ModCore.obj[2] = PathFindingLogic.queue;
|
||||
ModCore.fun = new Task(new Action<object>(PathFindingLogic.pathFindToSingleGoal), ModCore.obj);
|
||||
}
|
||||
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// A test function.
|
||||
/// </summary>
|
||||
/// <param name="s">This is the command's name</param>
|
||||
/// <param name="sarray">This is the parameters that follow.</param>
|
||||
public static void hello(string s, string[] sarray)
|
||||
{
|
||||
ModCore.CoreMonitor.Log(s, LogLevel.Info);
|
||||
|
||||
foreach (var word in sarray)
|
||||
{
|
||||
ModCore.CoreMonitor.Log(word, LogLevel.Info);
|
||||
}
|
||||
ModCore.CoreMonitor.Log("FUDGE");
|
||||
// Game1.player.tryToMoveInDirection(2, true, 0, false);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -21,176 +21,67 @@ namespace StarAI
|
|||
{
|
||||
public static StardewModdingAPI.IMonitor CoreMonitor;
|
||||
public static StardewModdingAPI.IModHelper CoreHelper;
|
||||
public static List<Warp> warpGoals= new List<Warp>();
|
||||
public static List<Warp> warpGoals = new List<Warp>();
|
||||
public static object[] obj = new object[3];
|
||||
|
||||
public static Task fun = new Task(new Action<object>(PathFindingLogic.pathFindToSingleGoal),obj);
|
||||
|
||||
public static Task fun = new Task(new Action<object>(PathFindingLogic.pathFindToSingleGoal), obj);
|
||||
public override void Entry(IModHelper helper)
|
||||
{
|
||||
obj[0] = PathFindingLogic.source;
|
||||
obj[1] = PathFindingLogic.currentGoal;
|
||||
obj[2] = PathFindingLogic.queue;
|
||||
CoreHelper = helper;
|
||||
helper.ConsoleCommands.Add("hello", "Ok?", new Action<string, string[]>(hello));
|
||||
helper.ConsoleCommands.Add("pathfind", "pathy?", new Action<string, string[]>(pathfind));
|
||||
string[] s = new string[10];
|
||||
|
||||
|
||||
// string[] s = new string[10];
|
||||
|
||||
CoreMonitor = this.Monitor;
|
||||
CoreMonitor.Log("Hello AI WORLD!", LogLevel.Info);
|
||||
Commands.initializeCommands();
|
||||
PathFindingCore.Utilities.initializeTileExceptionList();
|
||||
//throw new NotImplementedException();
|
||||
StardewModdingAPI.Events.SaveEvents.AfterLoad += SaveEvents_AfterLoad;
|
||||
StardewModdingAPI.Events.LocationEvents.CurrentLocationChanged += LocationEvents_CurrentLocationChanged;
|
||||
StardewModdingAPI.Events.GameEvents.SecondUpdateTick += GameEvents_SecondUpdateTick;
|
||||
|
||||
StardewModdingAPI.Events.ControlEvents.KeyPressed += ControlEvents_KeyPressed;
|
||||
StardewModdingAPI.Events.SaveEvents.AfterLoad += SaveEvents_AfterLoad;
|
||||
|
||||
StardustCore.ModCore.SerializationManager.acceptedTypes.Add("StarAI.PathFindingCore.TileNode", new StardustCore.Serialization.SerializerDataNode(new StardustCore.Serialization.SerializerDataNode.SerializingFunction(TileNode.Serialize), new StardustCore.Serialization.SerializerDataNode.ParsingFunction(TileNode.ParseIntoInventory), new StardustCore.Serialization.SerializerDataNode.WorldParsingFunction(TileNode.SerializeFromWorld), new StardustCore.Serialization.SerializerDataNode.SerializingToContainerFunction(TileNode.Serialize)));
|
||||
}
|
||||
|
||||
public void pathfind(string s, string[] args)
|
||||
private void SaveEvents_AfterLoad(object sender, EventArgs e)
|
||||
{
|
||||
if (args.Length < 1)
|
||||
loadExceptionTiles();
|
||||
}
|
||||
|
||||
public void loadExceptionTiles()
|
||||
{
|
||||
|
||||
// Process the list of files found in the directory.
|
||||
string[] fileEntries = Directory.GetFiles(Path.Combine(CoreHelper.DirectoryPath,PathFindingCore.Utilities.folderForExceptionTiles));
|
||||
foreach (string fileName in fileEntries)
|
||||
{
|
||||
CoreMonitor.Log("No args passed into path finding function",LogLevel.Error);
|
||||
}
|
||||
if (args[0] == "addGoal")
|
||||
{
|
||||
|
||||
TileNode t = new TileNode(1, Vector2.Zero, Path.Combine("Tiles", "GenericUncoloredTile.xnb"), Path.Combine("Tiles", "TileData.xnb"),StardustCore.IlluminateFramework.Colors.invertColor(StardustCore.IlluminateFramework.ColorsList.Green));
|
||||
Vector2 pos=new Vector2((int)(Convert.ToInt32(args[1]) * Game1.tileSize), Convert.ToInt32(args[2]) * Game1.tileSize);
|
||||
bool ok = t.checkIfICanPlaceHere(t, new Vector2(pos.X,pos.Y), Game1.player.currentLocation);
|
||||
if (ok == false)
|
||||
{
|
||||
CoreMonitor.Log("Can't place a goal point here!!!", LogLevel.Error);
|
||||
return;
|
||||
}
|
||||
t.placementAction(Game1.currentLocation,(int) pos.X,(int) pos.Y);
|
||||
PathFindingLogic.currentGoal = t;
|
||||
PathFindingLogic.goals.Add(t);
|
||||
}
|
||||
|
||||
if (args[0] == "addStart")
|
||||
{
|
||||
|
||||
TileNode t = new TileNode(1, Vector2.Zero, Path.Combine("Tiles", "GenericUncoloredTile.xnb"), Path.Combine("Tiles", "TileData.xnb"), StardustCore.IlluminateFramework.Colors.invertColor(StardustCore.IlluminateFramework.ColorsList.Magenta));
|
||||
Vector2 pos;
|
||||
if (args[1] == "currentPosition")
|
||||
{
|
||||
pos = new Vector2((int)(Game1.player.getTileX() * Game1.tileSize), Game1.player.getTileY() * Game1.tileSize);
|
||||
}
|
||||
else
|
||||
{
|
||||
pos = new Vector2((int)(Convert.ToInt32(args[1]) * Game1.tileSize), Convert.ToInt32(args[2]) * Game1.tileSize);
|
||||
}
|
||||
|
||||
bool ok = t.checkIfICanPlaceHere(t, new Vector2(pos.X, pos.Y), Game1.player.currentLocation);
|
||||
if (ok == false)
|
||||
{
|
||||
CoreMonitor.Log("Can't place a start point here!!!", LogLevel.Error);
|
||||
return;
|
||||
}
|
||||
t.placementAction(Game1.currentLocation, (int)pos.X, (int)pos.Y);
|
||||
PathFindingLogic.source = t;
|
||||
}
|
||||
|
||||
if (args[0] == "restart")
|
||||
{
|
||||
List<CoreObject> removalList = new List<CoreObject>();
|
||||
foreach(var v in StardustCore.ModCore.SerializationManager.trackedObjectList)
|
||||
{
|
||||
removalList.Add(v);
|
||||
}
|
||||
foreach (var v in removalList)
|
||||
{
|
||||
StardustCore.ModCore.SerializationManager.trackedObjectList.Remove(v);
|
||||
Game1.player.currentLocation.objects.Remove(v.TileLocation);
|
||||
pathfind("pathfind restart", new string[]
|
||||
{
|
||||
"addGoal",
|
||||
PathFindingLogic.currentGoal.tileLocation.X.ToString(),
|
||||
PathFindingLogic.currentGoal.tileLocation.Y.ToString(),
|
||||
}
|
||||
);
|
||||
}
|
||||
removalList.Clear();
|
||||
pathfind("pathfind restart", new string[]
|
||||
{
|
||||
"addStart",
|
||||
PathFindingLogic.source.tileLocation.X.ToString(),
|
||||
PathFindingLogic.source.tileLocation.Y.ToString(),
|
||||
}
|
||||
);
|
||||
pathfind("pathfind restart", new string[]
|
||||
{
|
||||
"start"
|
||||
}
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
if (args[0] == "start")
|
||||
{
|
||||
if (Game1.player == null) return;
|
||||
if (Game1.hasLoadedGame == false) return;
|
||||
// ModCore.CoreMonitor.Log(Game1.player.currentLocation.isTileLocationOpen(new xTile.Dimensions.Location((int)(Game1.player.getTileX() + 1)*Game1.tileSize, (int)(Game1.player.getTileY())*Game1.tileSize)).ToString());
|
||||
//CoreMonitor.Log(Convert.ToString(warpGoals.Count));
|
||||
if (PathFindingCore.PathFindingLogic.currentGoal == null)
|
||||
{
|
||||
CoreMonitor.Log("NO VALID GOAL SET FOR PATH FINDING!",LogLevel.Error);
|
||||
}
|
||||
if (PathFindingCore.PathFindingLogic.source == null)
|
||||
{
|
||||
CoreMonitor.Log("NO VALID START SET FOR PATH FINDING!", LogLevel.Error);
|
||||
}
|
||||
|
||||
if (fun.Status == TaskStatus.Running)
|
||||
{
|
||||
CoreMonitor.Log("TASK IS RUNNING CAN'T PATHFIND AT THE MOMENT", LogLevel.Alert);
|
||||
return;
|
||||
}
|
||||
if (fun.Status == TaskStatus.RanToCompletion)
|
||||
{
|
||||
|
||||
CoreMonitor.Log("TASK IS Finished PATHFINDING", LogLevel.Warn);
|
||||
obj[0] = PathFindingLogic.source;
|
||||
obj[1] = PathFindingLogic.currentGoal;
|
||||
obj[2] = PathFindingLogic.queue;
|
||||
fun = new Task(new Action<object>(PathFindingLogic.pathFindToSingleGoal), obj);
|
||||
return;
|
||||
}
|
||||
|
||||
if (fun.Status == TaskStatus.Created)
|
||||
{
|
||||
CoreMonitor.Log("CREATE AND RUN A TASK!!! PATHFINDING!");
|
||||
obj[0] = PathFindingLogic.source;
|
||||
obj[1] = PathFindingLogic.currentGoal;
|
||||
obj[2] = PathFindingLogic.queue;
|
||||
fun = new Task(new Action<object>(PathFindingLogic.pathFindToSingleGoal), obj);
|
||||
|
||||
fun.Start();
|
||||
return;
|
||||
}
|
||||
CoreMonitor.Log(fun.Status.ToString());
|
||||
if (fun.Status == TaskStatus.Faulted)
|
||||
{
|
||||
CoreMonitor.Log(fun.Exception.ToString());
|
||||
CoreMonitor.Log("CREATE AND RUN A TASK!!! PATHFINDING!");
|
||||
obj[0] = PathFindingLogic.source;
|
||||
obj[1] = PathFindingLogic.currentGoal;
|
||||
obj[2] = PathFindingLogic.queue;
|
||||
fun = new Task(new Action<object>(PathFindingLogic.pathFindToSingleGoal), obj);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
TileExceptionNode t = TileExceptionNode.parseJson(fileName);
|
||||
PathFindingCore.Utilities.tileExceptionList.Add(t);
|
||||
}
|
||||
catch(Exception err)
|
||||
{
|
||||
ModCore.CoreMonitor.Log(err.ToString(), LogLevel.Error);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void ControlEvents_KeyPressed(object sender, StardewModdingAPI.Events.EventArgsKeyPressed e)
|
||||
{
|
||||
//J key for shop
|
||||
#region
|
||||
if (e.KeyPressed == Microsoft.Xna.Framework.Input.Keys.J)
|
||||
{
|
||||
CoreMonitor.Log("OK THE J KEY WAS PRESSED!");
|
||||
List<Item> shoppingList = new List<Item>();
|
||||
TileNode t = new TileNode(1, Vector2.Zero, Path.Combine("Tiles", "GenericUncoloredTile.xnb"), Path.Combine("Tiles", "TileData.xnb"),StardustCore.IlluminateFramework.Colors.invertColor(StardustCore.IlluminateFramework.ColorsList.Aqua));
|
||||
TileNode t = new TileNode(1, Vector2.Zero, Path.Combine("Tiles", "GenericUncoloredTile.xnb"), Path.Combine("Tiles", "TileData.xnb"), StardustCore.IlluminateFramework.Colors.invertColor(StardustCore.IlluminateFramework.ColorsList.Aqua));
|
||||
if (t == null)
|
||||
{
|
||||
CoreMonitor.Log("WTF?????");
|
||||
|
@ -203,17 +94,21 @@ namespace StarAI
|
|||
}
|
||||
shoppingList.Add((Item)t);
|
||||
Game1.activeClickableMenu = new StardewValley.Menus.ShopMenu(shoppingList);
|
||||
}catch(Exception err)
|
||||
}
|
||||
catch (Exception err)
|
||||
{
|
||||
CoreMonitor.Log(Convert.ToString(err));
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
//K key for placing a tile.
|
||||
#region
|
||||
if (e.KeyPressed == Microsoft.Xna.Framework.Input.Keys.K)
|
||||
{
|
||||
CoreMonitor.Log("OK THE K KEY WAS PRESSED!");
|
||||
|
||||
TileNode t = new TileNode(1, Vector2.Zero, Path.Combine("Tiles", "GenericUncoloredTile.xnb"), Path.Combine("Tiles", "TileData.xnb"),StardustCore.IlluminateFramework.Colors.randomColor());
|
||||
|
||||
TileNode t = new TileNode(1, Vector2.Zero, Path.Combine("Tiles", "GenericUncoloredTile.xnb"), Path.Combine("Tiles", "TileData.xnb"), StardustCore.IlluminateFramework.Colors.randomColor());
|
||||
if (t == null)
|
||||
{
|
||||
CoreMonitor.Log("WTF?????");
|
||||
|
@ -224,184 +119,72 @@ namespace StarAI
|
|||
{
|
||||
return;
|
||||
}
|
||||
CoreMonitor.Log(new Vector2(Game1.player.getTileX()*Game1.tileSize,Game1.player.getTileY()*Game1.tileSize).ToString());
|
||||
CoreMonitor.Log(new Vector2(Game1.player.getTileX() * Game1.tileSize, Game1.player.getTileY() * Game1.tileSize).ToString());
|
||||
|
||||
int xPos = (int)(Game1.player.getTileX()) * Game1.tileSize;
|
||||
int yPos = (int)(Game1.player.getTileY()) * Game1.tileSize;
|
||||
Rectangle r = new Rectangle(xPos, yPos, Game1.tileSize, Game1.tileSize);
|
||||
Vector2 pos = new Vector2(r.X, r.Y);
|
||||
bool ok = t.checkIfICanPlaceHere(t,pos,Game1.player.currentLocation);
|
||||
bool ok = t.checkIfICanPlaceHere(t, pos, Game1.player.currentLocation);
|
||||
if (ok == false) return;
|
||||
t.placementAction(Game1.currentLocation, Game1.player.getTileX()*Game1.tileSize, Game1.player.getTileY()*Game1.tileSize);
|
||||
t.setAdjacentTiles(true);
|
||||
t.placementAction(Game1.currentLocation, Game1.player.getTileX() * Game1.tileSize, Game1.player.getTileY() * Game1.tileSize);
|
||||
//t.setAdjacentTiles(true);
|
||||
}
|
||||
catch (Exception err)
|
||||
{
|
||||
CoreMonitor.Log(Convert.ToString(err));
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
public static Vector2 parseCenterFromTile(int tileX, int tileY)
|
||||
{
|
||||
int x = (tileX * Game1.tileSize) + Game1.tileSize / 2;
|
||||
int y = (tileY * Game1.tileSize) + Game1.tileSize / 2;
|
||||
return new Vector2(x, y);
|
||||
}
|
||||
|
||||
public static void calculateMovement()
|
||||
{
|
||||
bool xTargetReached = false;
|
||||
bool yTargetReached = false;
|
||||
while (warpGoals.Count > 0)
|
||||
if (e.KeyPressed == Microsoft.Xna.Framework.Input.Keys.O)
|
||||
{
|
||||
Warp w = warpGoals[0];
|
||||
if (Game1.player.getTileX() == w.X && Game1.player.getTileY() == w.Y)
|
||||
|
||||
foreach (var v in Game1.player.currentLocation.map.TileSheets)
|
||||
{
|
||||
warpGoals.Remove(w);
|
||||
CoreMonitor.Log("LOOOP", LogLevel.Debug);
|
||||
// return;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
Vector2 center = parseCenterFromTile(w.X, w.Y);
|
||||
while (Game1.player.position.X > center.X && xTargetReached==false)
|
||||
foreach (var q in Game1.player.currentLocation.map.Layers)
|
||||
{
|
||||
if (isWithinRange(Game1.player.position.X, center.X, 12) == true)
|
||||
string[] s = q.ToString().Split(':');
|
||||
string layer = s[1].Trim();
|
||||
if (Game1.player.currentLocation.map.GetLayer(layer) == null)
|
||||
{
|
||||
ModCore.CoreMonitor.Log("XXXXXXXtargetReached");
|
||||
xTargetReached = true;
|
||||
InputSimulator.SimulateKeyUp(VirtualKeyCode.VK_A);
|
||||
//InputSimulator.SimulateKeyUp(VirtualKeyCode.VK_D);
|
||||
//InputSimulator.SimulateKeyUp(VirtualKeyCode.UP);
|
||||
//InputSimulator.SimulateKeyUp(VirtualKeyCode.DOWN);
|
||||
//break;
|
||||
continue;
|
||||
|
||||
ModCore.CoreMonitor.Log("SHITTTTTT: " + layer, LogLevel.Error);
|
||||
}
|
||||
//CoreMonitor.Log(Convert.ToString(Game1.player.position.X), LogLevel.Debug);
|
||||
//CoreMonitor.Log(Convert.ToString(center.X), LogLevel.Warn);
|
||||
InputSimulator.SimulateKeyDown(VirtualKeyCode.VK_A);
|
||||
//InputSimulator.SimulateKeyUp(VirtualKeyCode.VK_D);
|
||||
//InputSimulator.SimulateKeyUp(VirtualKeyCode.UP);
|
||||
//InputSimulator.SimulateKeyUp(VirtualKeyCode.DOWN);
|
||||
}
|
||||
while (Game1.player.position.X < center.X && xTargetReached==false)
|
||||
{
|
||||
if (isWithinRange(Game1.player.position.X, center.X, 6) == true)
|
||||
int tileIndex = Game1.player.currentLocation.getTileIndexAt((int)Game1.player.getTileX() / Game1.tileSize, (int)Game1.player.getTileY() / Game1.tileSize, layer);
|
||||
if (tileIndex == -1) continue;
|
||||
//ModCore.CoreMonitor.Log("Position: " + (Game1.player.getTileLocation() / Game1.tileSize).ToString(), LogLevel.Warn);
|
||||
//ModCore.CoreMonitor.Log("Layer: " + layer, LogLevel.Warn);
|
||||
//ModCore.CoreMonitor.Log("Index: " + tileIndex.ToString(), LogLevel.Warn);
|
||||
//ModCore.CoreMonitor.Log("Image Source: " + v.ImageSource, LogLevel.Warn);
|
||||
|
||||
if (layer == "Buildings")
|
||||
{
|
||||
xTargetReached = true;
|
||||
ModCore.CoreMonitor.Log("XXXXXXXtargetReached");
|
||||
//InputSimulator.SimulateKeyUp(VirtualKeyCode.VK_A);
|
||||
InputSimulator.SimulateKeyUp(VirtualKeyCode.VK_D);
|
||||
//InputSimulator.SimulateKeyUp(VirtualKeyCode.UP);
|
||||
//InputSimulator.SimulateKeyUp(VirtualKeyCode.DOWN);
|
||||
//break;
|
||||
continue;
|
||||
TileExceptionNode tileException = new TileExceptionNode(v.ImageSource, tileIndex);
|
||||
foreach(var tile in PathFindingCore.Utilities.tileExceptionList)
|
||||
{
|
||||
if (tile.imageSource == tileException.imageSource && tile.index == tileException.index)
|
||||
{
|
||||
ModCore.CoreMonitor.Log("Tile exception already initialized!");
|
||||
return; //tile is already initialized.
|
||||
}
|
||||
}
|
||||
PathFindingCore.Utilities.tileExceptionList.Add(tileException);
|
||||
tileException.serializeJson(Path.Combine(ModCore.CoreHelper.DirectoryPath, PathFindingCore.Utilities.folderForExceptionTiles));
|
||||
//StardustCore.ModCore.SerializationManager.
|
||||
}
|
||||
//CoreMonitor.Log(Convert.ToString(Game1.player.position.X), LogLevel.Debug);
|
||||
//CoreMonitor.Log(Convert.ToString(center.X), LogLevel.Warn);
|
||||
InputSimulator.SimulateKeyDown(VirtualKeyCode.VK_D);
|
||||
//InputSimulator.SimulateKeyUp(VirtualKeyCode.VK_A);
|
||||
//InputSimulator.SimulateKeyUp(VirtualKeyCode.UP);
|
||||
//InputSimulator.SimulateKeyUp(VirtualKeyCode.DOWN);
|
||||
}
|
||||
ModCore.CoreMonitor.Log("Run???");
|
||||
while (Game1.player.position.Y < center.Y && yTargetReached==false)
|
||||
{
|
||||
ModCore.CoreMonitor.Log("banana");
|
||||
if (isWithinRange(Game1.player.position.Y, center.Y, 6) == true)
|
||||
{
|
||||
yTargetReached = true;
|
||||
ModCore.CoreMonitor.Log("YYYYYYYYYtargetReached");
|
||||
//InputSimulator.SimulateKeyUp(VirtualKeyCode.VK_A);
|
||||
//InputSimulator.SimulateKeyUp(VirtualKeyCode.VK_D);
|
||||
InputSimulator.SimulateKeyUp(VirtualKeyCode.VK_S);
|
||||
//InputSimulator.SimulateKeyUp(VirtualKeyCode.DOWN);
|
||||
//break;
|
||||
continue;
|
||||
}
|
||||
//CoreMonitor.Log(Convert.ToString(Game1.player.position.X), LogLevel.Debug);
|
||||
//CoreMonitor.Log(Convert.ToString(center.X), LogLevel.Warn);
|
||||
InputSimulator.SimulateKeyDown(VirtualKeyCode.VK_S);
|
||||
//InputSimulator.SimulateKeyUp(VirtualKeyCode.VK_A);
|
||||
//InputSimulator.SimulateKeyUp(VirtualKeyCode.VK_D);
|
||||
//InputSimulator.SimulateKeyUp(VirtualKeyCode.DOWN);
|
||||
}
|
||||
ModCore.CoreMonitor.Log("Or no???");
|
||||
while (Game1.player.position.Y > center.Y&& yTargetReached==false)
|
||||
{
|
||||
ModCore.CoreMonitor.Log("potato");
|
||||
if (isWithinRange(Game1.player.position.Y, center.Y, 6) == true)
|
||||
{
|
||||
yTargetReached = true;
|
||||
ModCore.CoreMonitor.Log("YYYYYYYYYtargetReached");
|
||||
//InputSimulator.SimulateKeyUp(VirtualKeyCode.VK_A);
|
||||
//InputSimulator.SimulateKeyUp(VirtualKeyCode.VK_D);
|
||||
//InputSimulator.SimulateKeyUp(VirtualKeyCode.UP);
|
||||
InputSimulator.SimulateKeyUp(VirtualKeyCode.VK_W);
|
||||
//break;
|
||||
continue;
|
||||
}
|
||||
//CoreMonitor.Log(Convert.ToString(Game1.player.position.X), LogLevel.Debug);
|
||||
//CoreMonitor.Log(Convert.ToString(center.X), LogLevel.Warn);
|
||||
InputSimulator.SimulateKeyDown(VirtualKeyCode.VK_W);
|
||||
//InputSimulator.SimulateKeyUp(VirtualKeyCode.VK_A);
|
||||
//InputSimulator.SimulateKeyUp(VirtualKeyCode.VK_D);
|
||||
//InputSimulator.SimulateKeyUp(VirtualKeyCode.UP);
|
||||
}
|
||||
/*
|
||||
while (Game1.player.getTileX() < w.X)
|
||||
{
|
||||
InputSimulator.SimulateKeyDown(VirtualKeyCode.VK_D);
|
||||
}
|
||||
|
||||
if (Game1.player.getTileX() == w.X)
|
||||
{
|
||||
warpGoals.Remove(w);
|
||||
InputSimulator.SimulateKeyUp(VirtualKeyCode.VK_A);
|
||||
InputSimulator.SimulateKeyUp(VirtualKeyCode.VK_D);
|
||||
return;
|
||||
}
|
||||
*/
|
||||
|
||||
if (xTargetReached == true && yTargetReached == true)
|
||||
{
|
||||
warpGoals.Remove(w);
|
||||
InputSimulator.SimulateKeyUp(VirtualKeyCode.VK_A);
|
||||
InputSimulator.SimulateKeyUp(VirtualKeyCode.VK_D);
|
||||
InputSimulator.SimulateKeyUp(VirtualKeyCode.VK_W);
|
||||
InputSimulator.SimulateKeyUp(VirtualKeyCode.VK_S);
|
||||
//return;
|
||||
CoreMonitor.Log("Reached goal!", LogLevel.Error);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
CoreMonitor.Log("UNCAUGHT EXCEPTION", LogLevel.Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Used to calculate center of a tile with varience.
|
||||
/// </summary>
|
||||
/// <param name="position"></param>
|
||||
/// <param name="goal"></param>
|
||||
/// <param name="tolerance"></param>
|
||||
/// <returns></returns>
|
||||
public static bool isWithinRange(float position,float goal, int tolerance)
|
||||
{
|
||||
if (position >= goal - tolerance && position <= goal + tolerance) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
private void GameEvents_SecondUpdateTick(object sender, EventArgs e)
|
||||
{
|
||||
if (Game1.player == null) return;
|
||||
if (Game1.hasLoadedGame == false) return;
|
||||
// ModCore.CoreMonitor.Log(Game1.player.currentLocation.isTileLocationOpen(new xTile.Dimensions.Location((int)(Game1.player.getTileX() + 1)*Game1.tileSize, (int)(Game1.player.getTileY())*Game1.tileSize)).ToString());
|
||||
// ModCore.CoreMonitor.Log(Game1.player.currentLocation.isTileLocationOpen(new xTile.Dimensions.Location((int)(Game1.player.getTileX() + 1)*Game1.tileSize, (int)(Game1.player.getTileY())*Game1.tileSize)).ToString());
|
||||
//CoreMonitor.Log(Convert.ToString(warpGoals.Count));
|
||||
if (warpGoals.Count == 0) return;
|
||||
if (fun.Status == TaskStatus.Running)
|
||||
|
@ -413,7 +196,7 @@ namespace StarAI
|
|||
{
|
||||
|
||||
//CoreMonitor.Log("TASK IS Finished", LogLevel.Warn);
|
||||
fun=new Task(new Action(calculateMovement));
|
||||
fun = new Task(new Action(PathFindingCore.Utilities.calculateMovement));
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -423,45 +206,25 @@ namespace StarAI
|
|||
fun.Start();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void LocationEvents_CurrentLocationChanged(object sender, StardewModdingAPI.Events.EventArgsCurrentLocationChanged e)
|
||||
{
|
||||
CoreMonitor.Log("LOCATION CHANGED!");
|
||||
CoreMonitor.Log(Game1.player.currentLocation.name);
|
||||
foreach(var v in Game1.player.currentLocation.warps)
|
||||
foreach (var v in Game1.player.currentLocation.warps)
|
||||
{
|
||||
string s ="X: " +Convert.ToString(v.X) + " Y: " + Convert.ToString(v.Y) + " TargetX: " + Convert.ToString(v.TargetX) + " TargetY: " + Convert.ToString(v.TargetY) + " TargetLocationName: " + Convert.ToString(v.TargetName);
|
||||
string s = "X: " + Convert.ToString(v.X) + " Y: " + Convert.ToString(v.Y) + " TargetX: " + Convert.ToString(v.TargetX) + " TargetY: " + Convert.ToString(v.TargetY) + " TargetLocationName: " + Convert.ToString(v.TargetName);
|
||||
CoreMonitor.Log(s);
|
||||
//warpGoals.Add(v); Disabled for now
|
||||
}
|
||||
//GameLocation loc=Game1.getLocationFromName("location name")
|
||||
//
|
||||
}
|
||||
|
||||
|
||||
private void SaveEvents_AfterLoad(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="s">This is the command's name</param>
|
||||
/// <param name="sarray">This is the parameters that follow.</param>
|
||||
public void hello(string s,string[] sarray)
|
||||
{
|
||||
CoreMonitor.Log(s, LogLevel.Info);
|
||||
|
||||
foreach(var word in sarray)
|
||||
{
|
||||
CoreMonitor.Log(word, LogLevel.Info);
|
||||
}
|
||||
CoreMonitor.Log("FUDGE");
|
||||
// Game1.player.tryToMoveInDirection(2, true, 0, false);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@ namespace StarAI.PathFindingCore
|
|||
public static List<TileNode> queue=new List<TileNode>();
|
||||
public static int totalPathCost;
|
||||
public static TileNode currentGoal;
|
||||
public static int delay;
|
||||
|
||||
public static List<TileNode> path=new List<TileNode>();
|
||||
public static int index = 0;
|
||||
|
@ -87,7 +88,7 @@ namespace StarAI.PathFindingCore
|
|||
if (node.parent == null)
|
||||
{
|
||||
ModCore.CoreMonitor.Log("I DONT UNDERSTAND!");
|
||||
System.Threading.Thread.Sleep(50);
|
||||
System.Threading.Thread.Sleep(delay);
|
||||
}
|
||||
//ModCore.CoreMonitor.Log("ok checking adj:" + node.tileLocation.ToString());
|
||||
|
||||
|
@ -169,7 +170,7 @@ namespace StarAI.PathFindingCore
|
|||
}
|
||||
currentNode.parent.animationManager.enableAnimation();
|
||||
currentNode = currentNode.parent;
|
||||
System.Threading.Thread.Sleep(200);
|
||||
System.Threading.Thread.Sleep(delay);
|
||||
if (currentNode.parent == null)
|
||||
{
|
||||
currentNode.drawColor = StardustCore.IlluminateFramework.Colors.invertColor(StardustCore.IlluminateFramework.ColorsList.Red); //Working
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
using Newtonsoft.Json.Linq;
|
||||
using StarAI.PathFindingCore;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace StarAI.PathFindingCore
|
||||
{
|
||||
public class TileExceptionNode
|
||||
{
|
||||
public string imageSource;
|
||||
public int index;
|
||||
|
||||
|
||||
public TileExceptionNode()
|
||||
{
|
||||
}
|
||||
|
||||
public TileExceptionNode(string ImageSource, int TileIndex)
|
||||
{
|
||||
imageSource = ImageSource;
|
||||
index = TileIndex;
|
||||
}
|
||||
|
||||
public static TileExceptionNode parseJson(string s)
|
||||
{
|
||||
dynamic obj = JObject.Parse(s);
|
||||
TileExceptionNode t = new TileExceptionNode();
|
||||
t.imageSource = obj.imageSource;
|
||||
t.index = obj.index;
|
||||
return t;
|
||||
}
|
||||
|
||||
public void serializeJson(string s)
|
||||
{
|
||||
StardustCore.ModCore.SerializationManager.WriteToJsonFile(Path.Combine(s, "tileExceptionData"+ this.index.ToString() + ".json"), (TileExceptionNode)this);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -74,39 +74,38 @@ namespace StarAI.PathFindingCore
|
|||
cry = true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
if (t.thisLocation.isObjectAt((int)pos.X, (int)pos.Y))
|
||||
{
|
||||
ModCore.CoreMonitor.Log("F!: " + t.thisLocation.name, LogLevel.Warn);
|
||||
ModCore.CoreMonitor.Log("Object at this tile position!: " + t.thisLocation.name, LogLevel.Warn);
|
||||
if (cry == true) this.thisLocation = null;
|
||||
return false;
|
||||
}
|
||||
if (t.thisLocation.isTileOccupied(pos / Game1.tileSize))
|
||||
{
|
||||
ModCore.CoreMonitor.Log("K!!!!: " + t.thisLocation.name, LogLevel.Error);
|
||||
ModCore.CoreMonitor.Log("Tile occupied!: " + t.thisLocation.name, LogLevel.Error);
|
||||
if (cry == true) this.thisLocation = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (t.thisLocation.isTilePlaceable(pos) == false)
|
||||
{
|
||||
ModCore.CoreMonitor.Log("C!!!!: " + t.thisLocation.name, LogLevel.Error);
|
||||
if (cry == true) this.thisLocation = null;
|
||||
return false;
|
||||
}
|
||||
if (t.thisLocation.isTilePlaceable(pos / Game1.tileSize) == false)
|
||||
{
|
||||
ModCore.CoreMonitor.Log("J!!!!: " + t.thisLocation.name, LogLevel.Error);
|
||||
ModCore.CoreMonitor.Log("Tile Not placeable at location. " + t.thisLocation.name, LogLevel.Error);
|
||||
if (cry == true) this.thisLocation = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (t.thisLocation.isTilePassable(new xTile.Dimensions.Location((int)(pos.X/Game1.tileSize), (int)(pos.Y/Game1.tileSize)), Game1.viewport)==false)
|
||||
{
|
||||
ModCore.CoreMonitor.Log("Y!!!!: " + t.thisLocation.name, LogLevel.Error);
|
||||
ModCore.CoreMonitor.Log("Tile not passable check 2?????!!!!: " + t.thisLocation.name, LogLevel.Error);
|
||||
if (cry == true) this.thisLocation = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (cry == true) this.thisLocation = null;
|
||||
|
@ -120,8 +119,8 @@ namespace StarAI.PathFindingCore
|
|||
if (f == false) return;
|
||||
else
|
||||
{
|
||||
ModCore.CoreMonitor.Log("Adding a child!");
|
||||
System.Threading.Thread.Sleep(50);
|
||||
// ModCore.CoreMonitor.Log("Adding a child!");
|
||||
System.Threading.Thread.Sleep(PathFindingCore.PathFindingLogic.delay);
|
||||
TileNode child = new TileNode(1, Vector2.Zero, t.texturePath,t.dataPath,StardustCore.IlluminateFramework.Colors.invertColor(StardustCore.IlluminateFramework.ColorsList.Cyan));
|
||||
child.seenState = (int)stateEnum.NotVisited;
|
||||
child.parent = t;
|
||||
|
@ -164,6 +163,8 @@ namespace StarAI.PathFindingCore
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
//Unused????
|
||||
public static void setAdjacentTiles(Vector2 position, GameLocation loc)
|
||||
{
|
||||
Vector2 startPosition = position;
|
||||
|
@ -185,28 +186,28 @@ namespace StarAI.PathFindingCore
|
|||
ModCore.CoreMonitor.Log("THIS IS MY LOCATION!!!: " +loc.name);
|
||||
if (loc.isObjectAt((int)pos.X, (int)pos.Y))
|
||||
{
|
||||
ModCore.CoreMonitor.Log("F!: " + loc.name, LogLevel.Warn);
|
||||
// ModCore.CoreMonitor.Log("F!: " + loc.name, LogLevel.Warn);
|
||||
continue;
|
||||
}
|
||||
if (loc.isTileOccupied(pos / Game1.tileSize))
|
||||
{
|
||||
ModCore.CoreMonitor.Log("K!!!!: " + loc.name, LogLevel.Error);
|
||||
//ModCore.CoreMonitor.Log("K!!!!: " + loc.name, LogLevel.Error);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (loc.isTilePlaceable(pos) == false)
|
||||
{
|
||||
ModCore.CoreMonitor.Log("C!!!!: " + loc.name, LogLevel.Error);
|
||||
continue;
|
||||
//ModCore.CoreMonitor.Log("C!!!!: " + loc.name, LogLevel.Error);
|
||||
//continue;
|
||||
}
|
||||
if (loc.isTilePlaceable(pos / Game1.tileSize) == false)
|
||||
{
|
||||
ModCore.CoreMonitor.Log("J!!!!: " + loc.name, LogLevel.Error);
|
||||
continue;
|
||||
// ModCore.CoreMonitor.Log("J!!!!: " + loc.name, LogLevel.Error);
|
||||
// continue;
|
||||
}
|
||||
|
||||
|
||||
if (loc.isTilePassable(new Rectangle(xPos, yPos, Game1.tileSize, Game1.tileSize), Game1.viewport) == true && loc.isTileLocationOpen(new xTile.Dimensions.Location((int)(pos.X), (int)(pos.Y))) == true && loc.isObjectAt((int)(pos.X), (int)(pos.Y)) == false) ; //&& Game1.currentLocation.isTileLocationOpen(new xTile.Dimensions.Location((int)startPosition.X+x,(int)startPosition.Y+y)))
|
||||
if (loc.isTilePassable(new Rectangle(xPos, yPos, Game1.tileSize, Game1.tileSize), Game1.viewport) == true && loc.isTileLocationOpen(new xTile.Dimensions.Location((int)(pos.X), (int)(pos.Y)))) ; //&& Game1.currentLocation.isTileLocationOpen(new xTile.Dimensions.Location((int)startPosition.X+x,(int)startPosition.Y+y)))
|
||||
{
|
||||
//TileNode child = new TileNode(1, Vector2.Zero, this.texturePath, this.drawColor);
|
||||
//child.placementAction(Game1.currentLocation, xPos, yPos);
|
||||
|
@ -462,7 +463,7 @@ namespace StarAI.PathFindingCore
|
|||
{
|
||||
// Game1.showRedMessage("Why2?");
|
||||
// this.heldObject = new TileNode(parentSheetIndex, Vector2.Zero);
|
||||
Utilities.addItemToInventoryAndCleanTrackedList(this,StardustCore.ModCore.SerializationManager);
|
||||
StardustCore.Utilities.addItemToInventoryAndCleanTrackedList(this,StardustCore.ModCore.SerializationManager);
|
||||
this.flaggedForPickUp = true;
|
||||
this.thisLocation = null;
|
||||
this.locationsName = "";
|
||||
|
@ -480,7 +481,7 @@ namespace StarAI.PathFindingCore
|
|||
else
|
||||
{
|
||||
// this.heldObject = new TileNode(parentSheetIndex, Vector2.Zero);
|
||||
Utilities.addItemToInventoryAndCleanTrackedList(this,StardustCore.ModCore.SerializationManager);
|
||||
StardustCore.Utilities.addItemToInventoryAndCleanTrackedList(this,StardustCore.ModCore.SerializationManager);
|
||||
// this.heldObject.performRemoveAction(this.tileLocation, who.currentLocation);
|
||||
// this.heldObject = null;
|
||||
Game1.playSound("coin");
|
||||
|
@ -496,7 +497,7 @@ namespace StarAI.PathFindingCore
|
|||
// Game1.showRedMessage("Why3?");
|
||||
this.heldObject.performRemoveAction(this.tileLocation, who.currentLocation);
|
||||
this.heldObject = null;
|
||||
Utilities.addItemToInventoryAndCleanTrackedList(this,StardustCore.ModCore.SerializationManager);
|
||||
StardustCore.Utilities.addItemToInventoryAndCleanTrackedList(this,StardustCore.ModCore.SerializationManager);
|
||||
Game1.playSound("coin");
|
||||
this.thisLocation = null;
|
||||
this.locationsName = "";
|
||||
|
@ -751,7 +752,7 @@ namespace StarAI.PathFindingCore
|
|||
this.updateDrawPosition();
|
||||
try
|
||||
{
|
||||
bool f = Utilities.placementAction(this, location, x, y, StardustCore.ModCore.SerializationManager, who);
|
||||
bool f = StardustCore.Utilities.placementAction(this, location, x, y, StardustCore.ModCore.SerializationManager, who);
|
||||
this.thisLocation = Game1.player.currentLocation;
|
||||
return f;
|
||||
}
|
||||
|
@ -970,11 +971,11 @@ namespace StarAI.PathFindingCore
|
|||
d.rotations = obj.rotations;
|
||||
d.currentRotation = obj.currentRotation;
|
||||
string s1 = Convert.ToString(obj.sourceRect);
|
||||
d.sourceRect = Utilities.parseRectFromJson(s1);
|
||||
d.sourceRect = StardustCore.Utilities.parseRectFromJson(s1);
|
||||
string s2 = Convert.ToString(obj.defaultSourceRect);
|
||||
d.defaultSourceRect = Utilities.parseRectFromJson(s2);
|
||||
d.defaultSourceRect = StardustCore.Utilities.parseRectFromJson(s2);
|
||||
string s3 = Convert.ToString(obj.defaultBoundingBox);
|
||||
d.defaultBoundingBox = Utilities.parseRectFromJson(s3);
|
||||
d.defaultBoundingBox = StardustCore.Utilities.parseRectFromJson(s3);
|
||||
d.description = obj.description;
|
||||
d.flipped = obj.flipped;
|
||||
d.flaggedForPickUp = obj.flaggedForPickUp;
|
||||
|
@ -1004,7 +1005,7 @@ namespace StarAI.PathFindingCore
|
|||
d.heldObject = obj.heldObject;
|
||||
d.minutesUntilReady = obj.minutesUntilReady;
|
||||
string s4 = Convert.ToString(obj.boundingBox);
|
||||
d.boundingBox = Utilities.parseRectFromJson(s4);
|
||||
d.boundingBox = StardustCore.Utilities.parseRectFromJson(s4);
|
||||
d.scale = obj.scale;
|
||||
d.lightSource = obj.lightSource;
|
||||
d.shakeTimer = obj.shakeTimer;
|
||||
|
|
|
@ -0,0 +1,133 @@
|
|||
using Microsoft.Xna.Framework;
|
||||
using StardewModdingAPI;
|
||||
using StardewValley;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using WindowsInput;
|
||||
|
||||
namespace StarAI.PathFindingCore
|
||||
{
|
||||
public class Utilities
|
||||
{
|
||||
|
||||
public static List<TileExceptionNode> tileExceptionList = new List<TileExceptionNode>();
|
||||
public static string folderForExceptionTiles="ExceptionTilesData";
|
||||
|
||||
public static Vector2 parseCenterFromTile(int tileX, int tileY)
|
||||
{
|
||||
int x = (tileX * Game1.tileSize) + Game1.tileSize / 2;
|
||||
int y = (tileY * Game1.tileSize) + Game1.tileSize / 2;
|
||||
return new Vector2(x, y);
|
||||
}
|
||||
|
||||
public static void initializeTileExceptionList()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static void calculateMovement()
|
||||
{
|
||||
bool xTargetReached = false;
|
||||
bool yTargetReached = false;
|
||||
while (ModCore.warpGoals.Count > 0)
|
||||
{
|
||||
Warp w = ModCore.warpGoals[0];
|
||||
if (Game1.player.getTileX() == w.X && Game1.player.getTileY() == w.Y)
|
||||
{
|
||||
ModCore.warpGoals.Remove(w);
|
||||
ModCore.CoreMonitor.Log("LOOOP", LogLevel.Debug);
|
||||
// return;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
Vector2 center = parseCenterFromTile(w.X, w.Y);
|
||||
while (Game1.player.position.X > center.X && xTargetReached == false)
|
||||
{
|
||||
if (isWithinRange(Game1.player.position.X, center.X, 12) == true)
|
||||
{
|
||||
ModCore.CoreMonitor.Log("XXXXXXXtargetReached");
|
||||
xTargetReached = true;
|
||||
InputSimulator.SimulateKeyUp(VirtualKeyCode.VK_A);
|
||||
//break;
|
||||
continue;
|
||||
}
|
||||
InputSimulator.SimulateKeyDown(VirtualKeyCode.VK_A);
|
||||
}
|
||||
while (Game1.player.position.X < center.X && xTargetReached == false)
|
||||
{
|
||||
if (isWithinRange(Game1.player.position.X, center.X, 6) == true)
|
||||
{
|
||||
xTargetReached = true;
|
||||
ModCore.CoreMonitor.Log("XXXXXXXtargetReached");
|
||||
InputSimulator.SimulateKeyUp(VirtualKeyCode.VK_D);
|
||||
continue;
|
||||
}
|
||||
InputSimulator.SimulateKeyDown(VirtualKeyCode.VK_D);
|
||||
}
|
||||
ModCore.CoreMonitor.Log("Run???");
|
||||
while (Game1.player.position.Y < center.Y && yTargetReached == false)
|
||||
{
|
||||
ModCore.CoreMonitor.Log("banana");
|
||||
if (isWithinRange(Game1.player.position.Y, center.Y, 6) == true)
|
||||
{
|
||||
yTargetReached = true;
|
||||
ModCore.CoreMonitor.Log("YYYYYYYYYtargetReached");
|
||||
InputSimulator.SimulateKeyUp(VirtualKeyCode.VK_S);
|
||||
continue;
|
||||
}
|
||||
InputSimulator.SimulateKeyDown(VirtualKeyCode.VK_S);
|
||||
}
|
||||
ModCore.CoreMonitor.Log("Or no???");
|
||||
while (Game1.player.position.Y > center.Y && yTargetReached == false)
|
||||
{
|
||||
ModCore.CoreMonitor.Log("potato");
|
||||
if (isWithinRange(Game1.player.position.Y, center.Y, 6) == true)
|
||||
{
|
||||
yTargetReached = true;
|
||||
ModCore.CoreMonitor.Log("YYYYYYYYYtargetReached");
|
||||
InputSimulator.SimulateKeyUp(VirtualKeyCode.VK_W);
|
||||
continue;
|
||||
}
|
||||
InputSimulator.SimulateKeyDown(VirtualKeyCode.VK_W);
|
||||
}
|
||||
|
||||
|
||||
if (xTargetReached == true && yTargetReached == true)
|
||||
{
|
||||
ModCore.warpGoals.Remove(w);
|
||||
InputSimulator.SimulateKeyUp(VirtualKeyCode.VK_A);
|
||||
InputSimulator.SimulateKeyUp(VirtualKeyCode.VK_D);
|
||||
InputSimulator.SimulateKeyUp(VirtualKeyCode.VK_W);
|
||||
InputSimulator.SimulateKeyUp(VirtualKeyCode.VK_S);
|
||||
//return;
|
||||
ModCore.CoreMonitor.Log("Reached goal!", LogLevel.Error);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
ModCore.CoreMonitor.Log("UNCAUGHT EXCEPTION", LogLevel.Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Used to calculate center of a tile with varience.
|
||||
/// </summary>
|
||||
/// <param name="position"></param>
|
||||
/// <param name="goal"></param>
|
||||
/// <param name="tolerance"></param>
|
||||
/// <returns></returns>
|
||||
public static bool isWithinRange(float position, float goal, int tolerance)
|
||||
{
|
||||
if (position >= goal - tolerance && position <= goal + tolerance) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -56,9 +56,12 @@
|
|||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Commands.cs" />
|
||||
<Compile Include="ModCore.cs" />
|
||||
<Compile Include="PathFindingCore\PathFindingLogic.cs" />
|
||||
<Compile Include="PathFindingCore\TileExceptionNode.cs" />
|
||||
<Compile Include="PathFindingCore\TileNodeObject.cs" />
|
||||
<Compile Include="PathFindingCore\Utilities.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
|
Loading…
Reference in New Issue