121 lines
3.2 KiB
C#
121 lines
3.2 KiB
C#
using System;
|
|
using Microsoft.Xna.Framework;
|
|
using System;
|
|
|
|
class SmartTractor
|
|
{
|
|
private Crops[,] crops;
|
|
private Vector2 housePos;
|
|
private Vector2 tractorPos;
|
|
private Vector2 Size;
|
|
private Vector2 Target;
|
|
private Path path;
|
|
private int tileSize;
|
|
private int Score;
|
|
private int Spacing;
|
|
private Random r = new Random();
|
|
private Astar astar = new Astar();
|
|
private int Rotation;
|
|
|
|
|
|
//What to do next
|
|
public Path returnChoice(int task)
|
|
{
|
|
if (task == 0)
|
|
{
|
|
//To the house
|
|
getTargetPosition((int)housePos.X / (tileSize + Spacing), (int)housePos.Y / (tileSize + Spacing));
|
|
}
|
|
else
|
|
{
|
|
//To the fields
|
|
getTargetPosition(r.Next(0, (int)Size.X), r.Next(0, (int)Size.Y));
|
|
}
|
|
astar.update(crops, Size, tractorPos / (tileSize + Spacing), housePos / (tileSize + Spacing), Target/(tileSize+Spacing), Rotation);
|
|
//astar.FindPath();
|
|
return astar.FindPath();
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Updates the variables every frame
|
|
public void updateMap(Vector2 newTractorPos, Vector2 newHousePos, Crops[,] newCropsStatus, Vector2 newSize, int newTileSize, int newSpacing, int newScore, int rotation)
|
|
{
|
|
crops = newCropsStatus;
|
|
housePos = newHousePos;
|
|
tractorPos = newTractorPos;
|
|
Size = newSize;
|
|
tileSize = newTileSize;
|
|
Spacing = newSpacing;
|
|
Score = newScore;
|
|
Rotation = rotation;
|
|
|
|
}
|
|
|
|
private void getTargetPosition(int x, int y)
|
|
{
|
|
Target = new Vector2(x, y) * (tileSize + Spacing);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
//Only for testing without obstacles
|
|
private void createPath()
|
|
{
|
|
path = new Path();
|
|
Vector2 targetPos = Target / (tileSize + Spacing);
|
|
Vector2 currentPath = tractorPos / tileSize;
|
|
currentPath.X = (float)Math.Round(currentPath.X);
|
|
currentPath.Y = (float)Math.Round(currentPath.Y);
|
|
do
|
|
{
|
|
if (currentPath.X == targetPos.X)
|
|
{
|
|
//found X pos
|
|
if (currentPath.Y == targetPos.Y)
|
|
{
|
|
//found y pos
|
|
}
|
|
else if (currentPath.Y < targetPos.Y)
|
|
{
|
|
currentPath = new Vector2(currentPath.X, currentPath.Y + 1);
|
|
path.setNode(currentPath, crops);
|
|
}
|
|
else if (currentPath.Y > targetPos.Y)
|
|
{
|
|
currentPath = new Vector2(currentPath.X, currentPath.Y - 1);
|
|
path.setNode(currentPath, crops);
|
|
}
|
|
}
|
|
else if (currentPath.X < targetPos.X)
|
|
{
|
|
currentPath = new Vector2(currentPath.X + 1, currentPath.Y);
|
|
path.setNode(currentPath, crops);
|
|
}
|
|
else if (currentPath.X > targetPos.X)
|
|
{
|
|
currentPath = new Vector2(currentPath.X - 1, currentPath.Y);
|
|
path.setNode(currentPath, crops);
|
|
}
|
|
} while (currentPath != targetPos);
|
|
|
|
|
|
}
|
|
|
|
public void setNode(Vector2 newNode, Crops[,] Crop)
|
|
{
|
|
|
|
nodes[Count] = new Nodes(Crop[(int)newNode.X, (int)newNode.Y].getCostOnMovement(), newNode);
|
|
Count++;
|
|
}
|
|
|
|
*/
|
|
}
|