forked from s425077/PotatoPlan
added rotation and rotation cost, RC for T2
This commit is contained in:
parent
8433934bcd
commit
5af50f8d3b
@ -44,6 +44,18 @@
|
|||||||
/processorParam:TextureFormat=Color
|
/processorParam:TextureFormat=Color
|
||||||
/build:house.png
|
/build:house.png
|
||||||
|
|
||||||
|
#begin Markers.png
|
||||||
|
/importer:TextureImporter
|
||||||
|
/processor:TextureProcessor
|
||||||
|
/processorParam:ColorKeyColor=255,0,255,255
|
||||||
|
/processorParam:ColorKeyEnabled=True
|
||||||
|
/processorParam:GenerateMipmaps=False
|
||||||
|
/processorParam:PremultiplyAlpha=True
|
||||||
|
/processorParam:ResizeToPowerOfTwo=False
|
||||||
|
/processorParam:MakeSquare=False
|
||||||
|
/processorParam:TextureFormat=Color
|
||||||
|
/build:Markers.png
|
||||||
|
|
||||||
#begin Mountain.png
|
#begin Mountain.png
|
||||||
/importer:TextureImporter
|
/importer:TextureImporter
|
||||||
/processor:TextureProcessor
|
/processor:TextureProcessor
|
||||||
|
BIN
Game1/Content/Markers.png
Normal file
BIN
Game1/Content/Markers.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 578 B |
Binary file not shown.
Before Width: | Height: | Size: 573 B After Width: | Height: | Size: 1.2 KiB |
@ -16,9 +16,11 @@ namespace Game1
|
|||||||
private Texture2D[] tile = new Texture2D[5];
|
private Texture2D[] tile = new Texture2D[5];
|
||||||
private Texture2D tractor;
|
private Texture2D tractor;
|
||||||
private Texture2D house;
|
private Texture2D house;
|
||||||
|
private Texture2D markers;
|
||||||
private Tractor tractorUnit = new Tractor();
|
private Tractor tractorUnit = new Tractor();
|
||||||
private Input input = new Input();
|
private Input input = new Input();
|
||||||
private House houseUnit = new House();
|
private House houseUnit = new House();
|
||||||
|
private Vector2 mousePosition;
|
||||||
|
|
||||||
|
|
||||||
public Game1()
|
public Game1()
|
||||||
@ -63,6 +65,7 @@ namespace Game1
|
|||||||
tractor = Content.Load<Texture2D>("Tractor");
|
tractor = Content.Load<Texture2D>("Tractor");
|
||||||
Bold = Content.Load<SpriteFont>("Font");
|
Bold = Content.Load<SpriteFont>("Font");
|
||||||
house = Content.Load<Texture2D>("house");
|
house = Content.Load<Texture2D>("house");
|
||||||
|
markers = Content.Load<Texture2D>("Markers");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -77,12 +80,19 @@ namespace Game1
|
|||||||
{
|
{
|
||||||
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
|
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
|
||||||
Exit();
|
Exit();
|
||||||
|
|
||||||
|
|
||||||
|
MouseState state = Mouse.GetState();
|
||||||
|
mousePosition = new Vector2(state.X, state.Y);
|
||||||
|
|
||||||
tractorUnit.updateSizing(input, 0, houseUnit.getVector()); //Updates the size
|
tractorUnit.updateSizing(input, 0, houseUnit.getVector()); //Updates the size
|
||||||
tractorUnit.setSpeed(input.changeSpeed(tractorUnit.getSpeed())); //Updates the Simulation Speed
|
tractorUnit.setSpeed(input.changeSpeed(tractorUnit.getSpeed())); //Updates the Simulation Speed
|
||||||
tractorUnit.setTractorSpeed(input.changeTractorSpeed(tractorUnit.getTractorSpeed(), tractorUnit.getPos())); //Updates the Tractor Speed
|
tractorUnit.setTractorSpeed(input.changeTractorSpeed(tractorUnit.getTractorSpeed(), tractorUnit.getPos())); //Updates the Tractor Speed
|
||||||
input.controlWindowSize(); //Controls the size of the screen depending on the number of tiles
|
input.controlWindowSize(); //Controls the size of the screen depending on the number of tiles
|
||||||
houseUnit.updateRectangle(input.getSize(), input.getTileSize(), input.getSpacing()); //Updates the position of the house if the house appears out of bound
|
houseUnit.updateRectangle(input.getSize(), input.getTileSize(), input.getSpacing()); //Updates the position of the house if the house appears out of bound
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
base.Update(gameTime);
|
base.Update(gameTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -100,21 +110,32 @@ namespace Game1
|
|||||||
spriteBatch.Draw(tile[tractorUnit.getFarm().getCrop(i, j).Status], new Rectangle(i * (input.getSpacingTile()), j * (input.getSpacingTile()), input.getTileSize(), input.getTileSize()), Color.White);
|
spriteBatch.Draw(tile[tractorUnit.getFarm().getCrop(i, j).Status], new Rectangle(i * (input.getSpacingTile()), j * (input.getSpacingTile()), input.getTileSize(), input.getTileSize()), Color.White);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
spriteBatch.Draw(tractor, new Rectangle((int)tractorUnit.getTargetPosition().X / input.getSpacingTile() * (input.getTileSize() + input.getSpacing()) + input.getTileSize() / 4, (int)tractorUnit.getTargetPosition().Y / input.getSpacingTile() * (input.getTileSize() + input.getSpacing()) + input.getTileSize() / 4, input.getTileSize()/2, input.getTileSize()/2), Color.Green);
|
spriteBatch.Draw(markers, new Rectangle((int)tractorUnit.getTargetPosition().X / input.getSpacingTile() * (input.getTileSize() + input.getSpacing()) + input.getTileSize() / 4, (int)tractorUnit.getTargetPosition().Y / input.getSpacingTile() * (input.getTileSize() + input.getSpacing()) + input.getTileSize() / 4, input.getTileSize()/2, input.getTileSize()/2), Color.Green);
|
||||||
for (int i = 0; i < tractorUnit.getPath().getCount() + 1; i++)
|
for (int i = 0; i < tractorUnit.getPath().getCount() + 1; i++)
|
||||||
{
|
{
|
||||||
spriteBatch.Draw(tractor, new Rectangle((int)tractorUnit.getPath().getByIndex(i).getCords().X * (input.getSpacingTile()) + input.getTileSize() / 4, (int)tractorUnit.getPath().getByIndex(i).getCords().Y * (input.getSpacingTile()) + input.getTileSize() / 4, input.getTileSize()/2, input.getTileSize()/2), Color.Green);
|
spriteBatch.Draw(markers, new Rectangle((int)tractorUnit.getPath().getByIndex(i).getCords().X * (input.getSpacingTile()) + input.getTileSize() / 4, (int)tractorUnit.getPath().getByIndex(i).getCords().Y * (input.getSpacingTile()) + input.getTileSize() / 4, input.getTileSize()/2, input.getTileSize()/2), Color.Green);
|
||||||
}
|
}
|
||||||
|
|
||||||
spriteBatch.Draw(tractor, new Rectangle((int)tractorUnit.getPos().X, (int)tractorUnit.getPos().Y, input.getTileSize(), input.getTileSize()), Color.White);
|
|
||||||
|
|
||||||
|
|
||||||
spriteBatch.Draw(house, houseUnit.GetRectangle(), Color.White);
|
spriteBatch.Draw(house, houseUnit.GetRectangle(), Color.White);
|
||||||
|
spriteBatch.Draw(markers, new Rectangle((int)tractorUnit.getPath().getFinalDest().getCords().X * (input.getSpacingTile()) + Convert.ToInt32(input.getTileSize() / 6), (int)tractorUnit.getPath().getFinalDest().getCords().Y * (input.getSpacingTile()) + Convert.ToInt32(input.getTileSize() / 6), Convert.ToInt32(input.getTileSize() / 1.5), Convert.ToInt32(input.getTileSize() / 1.5)), Color.Red); //Draws the current target of the tractor
|
||||||
|
spriteBatch.Draw(tractor, new Vector2((int)tractorUnit.getPos().X + input.getTileSize() / 2, (int)tractorUnit.getPos().Y + input.getTileSize() / 2), new Rectangle(0, 0, input.getTileSize(), input.getTileSize()), Color.White, tractorUnit.getRotation(), new Vector2(input.getTileSize() / 2, input.getTileSize() / 2), 1.0f, SpriteEffects.None, 1);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
spriteBatch.DrawString(Bold, "Speed:" + tractorUnit.getSpeed().ToString(), new Vector2(10, input.getSize().Y * (input.getTileSize() + input.getSpacing()) + 20) , Color.White); //Draws the speed value
|
spriteBatch.DrawString(Bold, "Speed:" + tractorUnit.getSpeed().ToString(), new Vector2(10, input.getSize().Y * (input.getTileSize() + input.getSpacing()) + 20) , Color.White); //Draws the speed value
|
||||||
spriteBatch.Draw(tractor, new Rectangle((int)tractorUnit.getPath().getFinalDest().getCords().X * (input.getSpacingTile()) + Convert.ToInt32(input.getTileSize() / 6), (int)tractorUnit.getPath().getFinalDest().getCords().Y * (input.getSpacingTile()) + Convert.ToInt32(input.getTileSize() / 6), Convert.ToInt32(input.getTileSize() / 1.5), Convert.ToInt32(input.getTileSize() / 1.5)), Color.Red); //Draws the current target of the tractor
|
|
||||||
spriteBatch.DrawString(Bold, "Tractor Speed:" + tractorUnit.getTractorSpeed().ToString(), new Vector2(100, input.getSize().Y * (input.getTileSize() + input.getSpacing()) + 20), Color.White);
|
spriteBatch.DrawString(Bold, "Tractor Speed:" + tractorUnit.getTractorSpeed().ToString(), new Vector2(100, input.getSize().Y * (input.getTileSize() + input.getSpacing()) + 20), Color.White);
|
||||||
spriteBatch.DrawString(Bold, "Tile Size:" + input.getTileSize().ToString() + "pix", new Vector2(10, input.getSize().Y * (input.getTileSize() + input.getSpacing()) + 40), Color.White); //Draws the tile size
|
spriteBatch.DrawString(Bold, "Tile Size:" + input.getTileSize().ToString() + "pix", new Vector2(10, input.getSize().Y * (input.getTileSize() + input.getSpacing()) + 40), Color.White); //Draws the tile size
|
||||||
spriteBatch.DrawString(Bold, "Matrix Size: " + input.getSize().X.ToString() + " X " + input.getSize().Y.ToString(), new Vector2(10, input.getSize().Y * (input.getTileSize() + input.getSpacing()) + 60), Color.White);
|
spriteBatch.DrawString(Bold, "Matrix Size: " + input.getSize().X.ToString() + " X " + input.getSize().Y.ToString(), new Vector2(10, input.getSize().Y * (input.getTileSize() + input.getSpacing()) + 60), Color.White);spriteBatch.DrawString(Bold, "Tile Size:" + input.getTileSize().ToString() + "pix", new Vector2(10, input.getSize().Y * (input.getTileSize() + input.getSpacing()) + 40), Color.White);
|
||||||
|
spriteBatch.DrawString(Bold, "Tractor Rotation:" + tractorUnit.getRotation().ToString() + " Degrees", new Vector2(250, input.getSize().Y * (input.getTileSize() + input.getSpacing()) + 20), Color.White);
|
||||||
spriteBatch.DrawString(Bold, tractorUnit.getCurrentTask(), new Vector2(10, input.getSize().Y * (input.getTileSize() + input.getSpacing()) + 80), Color.White); //Draws the tile size
|
spriteBatch.DrawString(Bold, tractorUnit.getCurrentTask(), new Vector2(10, input.getSize().Y * (input.getTileSize() + input.getSpacing()) + 80), Color.White); //Draws the tile size
|
||||||
spriteBatch.DrawString(Bold, tractorUnit.getScore().ToString(), new Vector2(10, input.getSize().Y * (input.getTileSize() + input.getSpacing()) + 100), Color.White);
|
spriteBatch.DrawString(Bold, tractorUnit.getScore().ToString(), new Vector2(10, input.getSize().Y * (input.getTileSize() + input.getSpacing()) + 100), Color.White);
|
||||||
|
|
||||||
|
spriteBatch.Draw(tractor, new Rectangle((int)mousePosition.X, (int)mousePosition.Y, input.getTileSize() / 4, input.getTileSize() / 4), Color.White);
|
||||||
|
|
||||||
spriteBatch.End();
|
spriteBatch.End();
|
||||||
|
|
||||||
base.Draw(gameTime);
|
base.Draw(gameTime);
|
||||||
|
@ -69,6 +69,7 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Content Include="Content\Crop.png" />
|
<Content Include="Content\Crop.png" />
|
||||||
<Content Include="Content\house.png" />
|
<Content Include="Content\house.png" />
|
||||||
|
<Content Include="Content\Markers.png" />
|
||||||
<Content Include="Content\Mountain.png" />
|
<Content Include="Content\Mountain.png" />
|
||||||
<Content Include="Content\Planted.png" />
|
<Content Include="Content\Planted.png" />
|
||||||
<Content Include="Content\Tile.png" />
|
<Content Include="Content\Tile.png" />
|
||||||
|
@ -41,7 +41,7 @@ class Crops
|
|||||||
}
|
}
|
||||||
else if (Status == 3)
|
else if (Status == 3)
|
||||||
{
|
{
|
||||||
return 20;
|
return 15;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -9,7 +9,7 @@ class Tractor
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
private int Spacing, sizeTile, Speed = 1;
|
private int Spacing, sizeTile, Speed = 1, Rotation = 180, rotationSpeed = 5;
|
||||||
private float tractorSpeed = 1;
|
private float tractorSpeed = 1;
|
||||||
private String currentTask;
|
private String currentTask;
|
||||||
|
|
||||||
@ -46,6 +46,7 @@ class Tractor
|
|||||||
private void updateDirection(Vector2 Size, Vector2 newPosition)
|
private void updateDirection(Vector2 Size, Vector2 newPosition)
|
||||||
{
|
{
|
||||||
Vector2 DeltaPosition = TargetPosition - Position;
|
Vector2 DeltaPosition = TargetPosition - Position;
|
||||||
|
|
||||||
if (DeltaPosition.X == 0)
|
if (DeltaPosition.X == 0)
|
||||||
{
|
{
|
||||||
if (DeltaPosition.Y == 0)
|
if (DeltaPosition.Y == 0)
|
||||||
@ -54,20 +55,20 @@ class Tractor
|
|||||||
}
|
}
|
||||||
else if (DeltaPosition.Y > 0)
|
else if (DeltaPosition.Y > 0)
|
||||||
{
|
{
|
||||||
Direction = new Vector2(0, 1) * tractorSpeed;
|
updateRotation(0);
|
||||||
}
|
}
|
||||||
else if (DeltaPosition.Y < 0)
|
else if (DeltaPosition.Y < 0)
|
||||||
{
|
{
|
||||||
Direction = new Vector2(0, -1) * tractorSpeed;
|
updateRotation(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (DeltaPosition.X > 0)
|
else if (DeltaPosition.X > 0)
|
||||||
{
|
{
|
||||||
Direction = new Vector2(1, 0) * tractorSpeed;
|
updateRotation(2);
|
||||||
}
|
}
|
||||||
else if (DeltaPosition.X < 0)
|
else if (DeltaPosition.X < 0)
|
||||||
{
|
{
|
||||||
Direction = new Vector2(-1, 0) * tractorSpeed;
|
updateRotation(3);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -79,8 +80,8 @@ class Tractor
|
|||||||
farm.updateSize(Size, sizeTile, Spacing);
|
farm.updateSize(Size, sizeTile, Spacing);
|
||||||
for (int i = 0; i < Speed; i++) //Where all the choices the tractor does comes from
|
for (int i = 0; i < Speed; i++) //Where all the choices the tractor does comes from
|
||||||
{
|
{
|
||||||
smartTractor.updateMap(Position, housePos, farm.getCrops(), Size, sizeTile, Spacing, scoreSystem.getScore());
|
smartTractor.updateMap(Position, housePos, farm.getCrops(), Size, sizeTile, Spacing, scoreSystem.getScore(), Rotation);
|
||||||
Position = Position + Direction;
|
|
||||||
updateDirection(Size, Position);
|
updateDirection(Size, Position);
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -120,7 +121,121 @@ class Tractor
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void updateRotation(int Destination)
|
||||||
|
{
|
||||||
|
if (Destination == 0)
|
||||||
|
{
|
||||||
|
if (Rotation == 0)
|
||||||
|
{
|
||||||
|
Direction = new Vector2(0, 1) * tractorSpeed;
|
||||||
|
Position = Position + Direction;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (Rotation == 0)
|
||||||
|
{
|
||||||
|
//Do nothing
|
||||||
|
}
|
||||||
|
else if (Rotation > 180)
|
||||||
|
{
|
||||||
|
if (Rotation >= 360)
|
||||||
|
{
|
||||||
|
Rotation = 0;
|
||||||
|
}
|
||||||
|
Rotation = Rotation + rotationSpeed;
|
||||||
|
}
|
||||||
|
else if (Rotation <= 180 && Rotation > 0)
|
||||||
|
{
|
||||||
|
Rotation = Rotation - rotationSpeed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Destination == 1)
|
||||||
|
{
|
||||||
|
if (Rotation == 180)
|
||||||
|
{
|
||||||
|
Direction = new Vector2(0, -1) * tractorSpeed;
|
||||||
|
Position = Position + Direction;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (Rotation == 180)
|
||||||
|
{
|
||||||
|
//Do nothing
|
||||||
|
}
|
||||||
|
else if (Rotation >= 0 && Rotation < 180)
|
||||||
|
{
|
||||||
|
Rotation = Rotation + rotationSpeed;
|
||||||
|
}
|
||||||
|
else if (Rotation < 360 && Rotation > 180)
|
||||||
|
{
|
||||||
|
Rotation = Rotation - rotationSpeed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (Destination == 2)
|
||||||
|
{
|
||||||
|
if (Rotation == 270)
|
||||||
|
{
|
||||||
|
Direction = new Vector2(1, 0) * tractorSpeed;
|
||||||
|
Position = Position + Direction;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (Rotation == 270)
|
||||||
|
{
|
||||||
|
//Do nothing
|
||||||
|
}
|
||||||
|
else if (Rotation > 90 && Rotation < 270)
|
||||||
|
{
|
||||||
|
Rotation = Rotation + rotationSpeed;
|
||||||
|
}
|
||||||
|
else if (Rotation < 90 || Rotation < 360)
|
||||||
|
{
|
||||||
|
if (Rotation <= 0)
|
||||||
|
{
|
||||||
|
Rotation = 360;
|
||||||
|
}
|
||||||
|
Rotation = Rotation - rotationSpeed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (Destination == 3)
|
||||||
|
{
|
||||||
|
if (Rotation == 90)
|
||||||
|
{
|
||||||
|
Direction = new Vector2(-1, 0) * tractorSpeed;
|
||||||
|
Position = Position + Direction;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (Rotation == 90)
|
||||||
|
{
|
||||||
|
//Do nothing
|
||||||
|
}
|
||||||
|
else if ( Rotation < 270 && Rotation > 90)
|
||||||
|
{
|
||||||
|
Rotation = Rotation - rotationSpeed;
|
||||||
|
}
|
||||||
|
else if (Rotation >= 0 || Rotation > 270)
|
||||||
|
{
|
||||||
|
if (Rotation >= 360)
|
||||||
|
{
|
||||||
|
Rotation = 0;
|
||||||
|
}
|
||||||
|
Rotation = Rotation + rotationSpeed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getRotation()
|
||||||
|
{
|
||||||
|
return MathHelper.ToRadians(Rotation);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public Vector2 getPos()
|
public Vector2 getPos()
|
||||||
{
|
{
|
||||||
|
@ -14,15 +14,16 @@ class Astar
|
|||||||
private Vector2 Size;
|
private Vector2 Size;
|
||||||
private PriorityQueue allPaths;
|
private PriorityQueue allPaths;
|
||||||
private Vector2 targetPos;
|
private Vector2 targetPos;
|
||||||
|
private int Rotation;
|
||||||
|
|
||||||
public void update(Crops[,] newCrops, Vector2 newSize, Vector2 newTractorPos, Vector2 newHousePos, Vector2 newtargetPos)
|
public void update(Crops[,] newCrops, Vector2 newSize, Vector2 newTractorPos, Vector2 newHousePos, Vector2 newtargetPos, int rotation)
|
||||||
{
|
{
|
||||||
tractorPos = new Vector2((int)newTractorPos.X, (int)newTractorPos.Y);
|
tractorPos = new Vector2((int)newTractorPos.X, (int)newTractorPos.Y);
|
||||||
housePos = new Vector2((int)newHousePos.X, (int)newHousePos.Y);
|
housePos = new Vector2((int)newHousePos.X, (int)newHousePos.Y);
|
||||||
targetPos = newtargetPos;
|
targetPos = newtargetPos;
|
||||||
crops = newCrops;
|
crops = newCrops;
|
||||||
Size = newSize;
|
Size = newSize;
|
||||||
|
Rotation = rotation;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Nodes getOptimalPath()
|
public Nodes getOptimalPath()
|
||||||
@ -30,7 +31,7 @@ class Astar
|
|||||||
return allPaths.Peek();
|
return allPaths.Peek();
|
||||||
}
|
}
|
||||||
|
|
||||||
private List <Nodes> GetAdjacentNodes(Vector2 currentPos)
|
private List<Nodes> GetAdjacentNodes(Vector2 currentPos)
|
||||||
{
|
{
|
||||||
var adjacentNodes = new List<Nodes>()
|
var adjacentNodes = new List<Nodes>()
|
||||||
|
|
||||||
@ -42,7 +43,7 @@ class Astar
|
|||||||
};
|
};
|
||||||
|
|
||||||
//check if out of range
|
//check if out of range
|
||||||
for (int i = 3; i >=0; i--)
|
for (int i = 3; i >= 0; i--)
|
||||||
{
|
{
|
||||||
if (adjacentNodes[i].getCords().X < 0 || adjacentNodes[i].getCords().Y < 0)
|
if (adjacentNodes[i].getCords().X < 0 || adjacentNodes[i].getCords().Y < 0)
|
||||||
adjacentNodes.Remove(adjacentNodes[i]);
|
adjacentNodes.Remove(adjacentNodes[i]);
|
||||||
@ -68,12 +69,26 @@ class Astar
|
|||||||
if (currDir == newDir)
|
if (currDir == newDir)
|
||||||
return 0;
|
return 0;
|
||||||
else if (Math.Abs(currDir - newDir) == 1 || Math.Abs(currDir - newDir) == 3)
|
else if (Math.Abs(currDir - newDir) == 1 || Math.Abs(currDir - newDir) == 3)
|
||||||
return 1;
|
return 3;
|
||||||
else if (Math.Abs(currDir - newDir) == 0 || Math.Abs(currDir - newDir) == 2) //its for turning back, so it never should happen anyway, remove this check then?
|
else if (Math.Abs(currDir - newDir) == 0 || Math.Abs(currDir - newDir) == 2) //its for turning back, so it never should happen anyway, remove this check then?
|
||||||
return 10;
|
return 9;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int ConvertRotation()
|
||||||
|
{
|
||||||
|
int rotation = 0;
|
||||||
|
if (Rotation == 180)
|
||||||
|
rotation = 0;
|
||||||
|
else if (Rotation == 270)
|
||||||
|
rotation = 1;
|
||||||
|
else if (Rotation == 0)
|
||||||
|
rotation = 2;
|
||||||
|
else if (Rotation == 90)
|
||||||
|
rotation = -1;
|
||||||
|
return rotation;
|
||||||
|
}
|
||||||
|
|
||||||
public Path FindPath()
|
public Path FindPath()
|
||||||
{
|
{
|
||||||
Path path = new Path();
|
Path path = new Path();
|
||||||
@ -82,10 +97,11 @@ class Astar
|
|||||||
//PriorityQueue closedList = new PriorityQueue();
|
//PriorityQueue closedList = new PriorityQueue();
|
||||||
MinHeap closedList = new MinHeap();
|
MinHeap closedList = new MinHeap();
|
||||||
Nodes target = new Nodes(targetPos);
|
Nodes target = new Nodes(targetPos);
|
||||||
Nodes startPos = new Nodes (tractorPos);
|
int direction = ConvertRotation();
|
||||||
|
Nodes startPos = new Nodes(tractorPos, direction);
|
||||||
Nodes current = null;
|
Nodes current = null;
|
||||||
int direction = 6;
|
|
||||||
int g = 0;
|
int g = 0;
|
||||||
|
//int direction = SmartTractor.update
|
||||||
|
|
||||||
//openList.Enqueue(startPos);
|
//openList.Enqueue(startPos);
|
||||||
openList.Insert(startPos);
|
openList.Insert(startPos);
|
||||||
@ -103,7 +119,7 @@ class Astar
|
|||||||
direction = current.getDirection();
|
direction = current.getDirection();
|
||||||
|
|
||||||
if (current.getCords() == target.getCords())
|
if (current.getCords() == target.getCords())
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
//if (closedList.Exists(target.getCords()))
|
//if (closedList.Exists(target.getCords()))
|
||||||
@ -111,14 +127,14 @@ class Astar
|
|||||||
|
|
||||||
var adjacentNodes = GetAdjacentNodes(current.getCords());
|
var adjacentNodes = GetAdjacentNodes(current.getCords());
|
||||||
//g++;
|
//g++;
|
||||||
foreach(var adjacentNode in adjacentNodes)
|
foreach (var adjacentNode in adjacentNodes)
|
||||||
{
|
{
|
||||||
if (closedList.Exists(adjacentNode.getCords()))
|
if (closedList.Exists(adjacentNode.getCords()))
|
||||||
continue;
|
continue;
|
||||||
g = current.getG() + crops[(int)adjacentNode.getCords().X, (int)adjacentNode.getCords().Y].getCostOnMovement() + CalculateRotationCost(direction, adjacentNode.getDirection());
|
g = current.getG() + crops[(int)adjacentNode.getCords().X, (int)adjacentNode.getCords().Y].getCostOnMovement() + CalculateRotationCost(direction, adjacentNode.getDirection());
|
||||||
if (!(openList.Exists(adjacentNode.getCords())))
|
if (!(openList.Exists(adjacentNode.getCords())))
|
||||||
{
|
{
|
||||||
|
|
||||||
adjacentNode.setG(g);
|
adjacentNode.setG(g);
|
||||||
adjacentNode.setH(ComputeHScore(adjacentNode.getCords(), target.getCords()));
|
adjacentNode.setH(ComputeHScore(adjacentNode.getCords(), target.getCords()));
|
||||||
adjacentNode.calculateF();
|
adjacentNode.calculateF();
|
||||||
@ -128,7 +144,7 @@ class Astar
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(g + adjacentNode.getH() < adjacentNode.getF())
|
if (g + adjacentNode.getH() < adjacentNode.getF())
|
||||||
{
|
{
|
||||||
adjacentNode.setG(g);
|
adjacentNode.setG(g);
|
||||||
adjacentNode.calculateF();
|
adjacentNode.calculateF();
|
||||||
@ -154,4 +170,4 @@ class Astar
|
|||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -27,7 +27,7 @@ class Nodes
|
|||||||
Direction = direction;
|
Direction = direction;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Nodes (Nodes node)
|
public Nodes(Nodes node)
|
||||||
{
|
{
|
||||||
F = node.F;
|
F = node.F;
|
||||||
G = node.G;
|
G = node.G;
|
||||||
@ -94,4 +94,4 @@ class Nodes
|
|||||||
{
|
{
|
||||||
return Direction;
|
return Direction;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -15,6 +15,7 @@ class SmartTractor
|
|||||||
private int Spacing;
|
private int Spacing;
|
||||||
private Random r = new Random();
|
private Random r = new Random();
|
||||||
private Astar astar = new Astar();
|
private Astar astar = new Astar();
|
||||||
|
private int Rotation;
|
||||||
|
|
||||||
|
|
||||||
//What to do next
|
//What to do next
|
||||||
@ -30,7 +31,7 @@ class SmartTractor
|
|||||||
//To the fields
|
//To the fields
|
||||||
getTargetPosition(r.Next(0, (int)Size.X), r.Next(0, (int)Size.Y));
|
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));
|
astar.update(crops, Size, tractorPos / (tileSize + Spacing), housePos / (tileSize + Spacing), Target/(tileSize+Spacing), Rotation);
|
||||||
//astar.FindPath();
|
//astar.FindPath();
|
||||||
return astar.FindPath();
|
return astar.FindPath();
|
||||||
}
|
}
|
||||||
@ -41,7 +42,7 @@ class SmartTractor
|
|||||||
|
|
||||||
|
|
||||||
//Updates the variables every frame
|
//Updates the variables every frame
|
||||||
public void updateMap(Vector2 newTractorPos, Vector2 newHousePos, Crops[,] newCropsStatus, Vector2 newSize, int newTileSize, int newSpacing, int newScore)
|
public void updateMap(Vector2 newTractorPos, Vector2 newHousePos, Crops[,] newCropsStatus, Vector2 newSize, int newTileSize, int newSpacing, int newScore, int rotation)
|
||||||
{
|
{
|
||||||
crops = newCropsStatus;
|
crops = newCropsStatus;
|
||||||
housePos = newHousePos;
|
housePos = newHousePos;
|
||||||
@ -50,8 +51,8 @@ class SmartTractor
|
|||||||
tileSize = newTileSize;
|
tileSize = newTileSize;
|
||||||
Spacing = newSpacing;
|
Spacing = newSpacing;
|
||||||
Score = newScore;
|
Score = newScore;
|
||||||
|
Rotation = rotation;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void getTargetPosition(int x, int y)
|
private void getTargetPosition(int x, int y)
|
||||||
|
Loading…
Reference in New Issue
Block a user