Merge branch 'Oskar-ML' of https://git.wmi.amu.edu.pl/s425077/PotatoPlan into Oskar-ML
This commit is contained in:
commit
9e2636641f
@ -45,6 +45,11 @@ class Crops
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public float getSpeedFactor(float tractorSpeed)
|
||||||
|
{
|
||||||
|
return 1f / getCostOnMovement();
|
||||||
|
}
|
||||||
|
|
||||||
public SoilProperties getSoilProperties()
|
public SoilProperties getSoilProperties()
|
||||||
{
|
{
|
||||||
return soilProperties;
|
return soilProperties;
|
||||||
@ -103,7 +108,7 @@ class Crops
|
|||||||
// Changes the time required for the crops to be harvestable
|
// Changes the time required for the crops to be harvestable
|
||||||
public void setCropTimer()
|
public void setCropTimer()
|
||||||
{
|
{
|
||||||
if (cropType == 0) // Carrots
|
if (cropType == 1) // Barley
|
||||||
{
|
{
|
||||||
Timer = 300;
|
Timer = 300;
|
||||||
fullTimer = Timer;
|
fullTimer = Timer;
|
||||||
@ -133,25 +138,53 @@ class Crops
|
|||||||
}
|
}
|
||||||
else if (Status == 2) //dirt
|
else if (Status == 2) //dirt
|
||||||
{
|
{
|
||||||
return 16;
|
return 8;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (cropType == 0)
|
if (cropType == 1)
|
||||||
{
|
{
|
||||||
return 15; //Carrots
|
return 16; //Barley
|
||||||
}
|
|
||||||
else if (cropType == 1)
|
|
||||||
{
|
|
||||||
return 30; //Wheat
|
|
||||||
}
|
}
|
||||||
else if (cropType == 2)
|
else if (cropType == 2)
|
||||||
{
|
{
|
||||||
return 40; //Berries
|
return 16; //Cotton
|
||||||
|
}
|
||||||
|
else if (cropType == 3)
|
||||||
|
{
|
||||||
|
return 16; //Ground Nuts
|
||||||
|
}
|
||||||
|
else if (cropType == 4)
|
||||||
|
{
|
||||||
|
return 16; //Maize
|
||||||
|
}
|
||||||
|
else if (cropType == 5)
|
||||||
|
{
|
||||||
|
return 16; //Millets
|
||||||
|
}
|
||||||
|
else if (cropType == 6)
|
||||||
|
{
|
||||||
|
return 16; //Oil Seeds
|
||||||
|
}
|
||||||
|
else if (cropType == 7)
|
||||||
|
{
|
||||||
|
return 16; //Paddy
|
||||||
|
}
|
||||||
|
else if (cropType == 8)
|
||||||
|
{
|
||||||
|
return 16; //Pulses
|
||||||
|
}
|
||||||
|
else if (cropType == 9)
|
||||||
|
{
|
||||||
|
return 16; //Sugarcane
|
||||||
|
}
|
||||||
|
else if (cropType == 10)
|
||||||
|
{
|
||||||
|
return 16; //Wheat
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return 50; //Fruit Trees
|
return 16; //Tobacco
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -131,9 +131,12 @@ class Farm
|
|||||||
for (int i = 0; i < Size.X; i++)
|
for (int i = 0; i < Size.X; i++)
|
||||||
{
|
{
|
||||||
for (int j = 0; j < Size.X; j++)
|
for (int j = 0; j < Size.X; j++)
|
||||||
|
{
|
||||||
|
if (crops[i, j].getStatus() != 3)
|
||||||
{
|
{
|
||||||
int x = getHighestProductionRate(i, j);
|
int x = getHighestProductionRate(i, j);
|
||||||
crops[i,j].setCropType(x, PresetCrops.getPresetCropTypes(x));
|
crops[i, j].setCropType(x, PresetCrops.getPresetCropTypes(x));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,17 +1,24 @@
|
|||||||
using Microsoft.Xna.Framework;
|
using Microsoft.Xna.Framework;
|
||||||
|
using System;
|
||||||
|
|
||||||
class HandleRotation
|
class HandleRotation
|
||||||
{
|
{
|
||||||
int rotationSpeed = 5, Rotation = 180;
|
int rotationSpeed = 5, Rotation = 180;
|
||||||
|
private float oldSpeed, movementSpeed;
|
||||||
|
private Vector2 oldTile, oldPosition;
|
||||||
|
|
||||||
public Vector2 UpdatePosition(int Destination, float tractorSpeed, Vector2 Position)
|
public Vector2 UpdatePosition(int Destination, float tractorSpeed, Vector2 Position, Crops crops)
|
||||||
{
|
{
|
||||||
Vector2 Direction;
|
Vector2 Direction;
|
||||||
if (Destination == 0)
|
if (oldSpeed != crops.getSpeedFactor(tractorSpeed))
|
||||||
|
{
|
||||||
|
Position = new Vector2((int)Math.Round(Position.X), (int)Math.Round(Position.Y));
|
||||||
|
}
|
||||||
|
if (Destination == 0) // down
|
||||||
{
|
{
|
||||||
if (Rotation == 0)
|
if (Rotation == 0)
|
||||||
{
|
{
|
||||||
Direction = new Vector2(0, 1) * tractorSpeed;
|
Direction = new Vector2(0, 1) * movementSpeed;
|
||||||
Position = Position + Direction;
|
Position = Position + Direction;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -30,11 +37,11 @@ class HandleRotation
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (Destination == 1)
|
else if (Destination == 1) // up
|
||||||
{
|
{
|
||||||
if (Rotation == 180)
|
if (Rotation == 180)
|
||||||
{
|
{
|
||||||
Direction = new Vector2(0, -1) * tractorSpeed;
|
Direction = new Vector2(0, -1) * movementSpeed;
|
||||||
Position = Position + Direction;
|
Position = Position + Direction;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -50,11 +57,11 @@ class HandleRotation
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (Destination == 2)
|
else if (Destination == 2) // right
|
||||||
{
|
{
|
||||||
if (Rotation == 270)
|
if (Rotation == 270)
|
||||||
{
|
{
|
||||||
Direction = new Vector2(1, 0) * tractorSpeed;
|
Direction = new Vector2(1, 0) * movementSpeed;
|
||||||
Position = Position + Direction;
|
Position = Position + Direction;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -73,11 +80,11 @@ class HandleRotation
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (Destination == 3)
|
else if (Destination == 3) // left
|
||||||
{
|
{
|
||||||
if (Rotation == 90)
|
if (Rotation == 90)
|
||||||
{
|
{
|
||||||
Direction = new Vector2(-1, 0) * tractorSpeed;
|
Direction = new Vector2(-1, 0) * movementSpeed;
|
||||||
Position = Position + Direction;
|
Position = Position + Direction;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -97,6 +104,8 @@ class HandleRotation
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
oldSpeed = crops.getSpeedFactor(tractorSpeed);
|
||||||
|
oldPosition = Position;
|
||||||
return Position;
|
return Position;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -104,4 +113,19 @@ class HandleRotation
|
|||||||
{
|
{
|
||||||
return Rotation;
|
return Rotation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool checkTile(Vector2 Position, int tileSize, int Spacing, float tractorSpeed, Crops crop)
|
||||||
|
{
|
||||||
|
Vector2 newTile = new Vector2((float)Math.Round(Position.X / (tileSize + Spacing)), (float)Math.Round(Position.Y / (tileSize + Spacing)));
|
||||||
|
if (oldTile != newTile)
|
||||||
|
{
|
||||||
|
oldTile = newTile;
|
||||||
|
movementSpeed = crop.getSpeedFactor(tractorSpeed);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,12 @@
|
|||||||
using Microsoft.Xna.Framework;
|
using Microsoft.Xna.Framework;
|
||||||
using Microsoft.Xna.Framework.Graphics;
|
using Microsoft.Xna.Framework.Graphics;
|
||||||
|
using System;
|
||||||
|
|
||||||
class Tractor
|
class Tractor
|
||||||
{
|
{
|
||||||
private int Spacing, sizeTile, Speed = 1;
|
private int Spacing, sizeTile, Speed = 1;
|
||||||
private float tractorSpeed = 1;
|
private float tractorSpeed = 1;
|
||||||
private Vector2 Position, TargetPosition, Size, housePos;
|
private Vector2 Position, TargetPosition, Size, housePos, oldDeltaPosition, DeltaPosition;
|
||||||
private Path path = new Path();
|
private Path path = new Path();
|
||||||
private SmartTractor smartTractor = new SmartTractor();
|
private SmartTractor smartTractor = new SmartTractor();
|
||||||
private HandleRotation handleRotation = new HandleRotation();
|
private HandleRotation handleRotation = new HandleRotation();
|
||||||
@ -22,6 +23,7 @@ class Tractor
|
|||||||
updatePosition(input.getSize(), Status);
|
updatePosition(input.getSize(), Status);
|
||||||
housePos = newHousePos;
|
housePos = newHousePos;
|
||||||
smartTractor.UpdateCrops(Speed);
|
smartTractor.UpdateCrops(Speed);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void init(Rectangle house, Input input)
|
public void init(Rectangle house, Input input)
|
||||||
@ -30,13 +32,14 @@ class Tractor
|
|||||||
Spacing = input.getSpacing();
|
Spacing = input.getSpacing();
|
||||||
Position = housePos;
|
Position = housePos;
|
||||||
TargetPosition = new Vector2(house.X, house.Y);
|
TargetPosition = new Vector2(house.X, house.Y);
|
||||||
smartTractor.init();
|
smartTractor.init(new Vector2(house.X, house.Y));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Runs when the tractor reaches a tile
|
// Runs when the tractor reaches a tile
|
||||||
private void updateDirection(Vector2 Size, Vector2 newPosition)
|
private void updateDirection(Vector2 Size, Vector2 newPosition)
|
||||||
{
|
{
|
||||||
Vector2 DeltaPosition = TargetPosition - Position;
|
DeltaPosition = TargetPosition - Position;
|
||||||
|
handleRotation.checkTile(Position, sizeTile, Spacing, tractorSpeed, smartTractor.getFarm().getCrop((int)Math.Round(Position.X / (sizeTile + Spacing)), (int)Math.Round(Position.Y / (sizeTile + Spacing))));
|
||||||
|
|
||||||
if (DeltaPosition.X == 0)
|
if (DeltaPosition.X == 0)
|
||||||
{
|
{
|
||||||
@ -46,23 +49,24 @@ class Tractor
|
|||||||
}
|
}
|
||||||
else if (DeltaPosition.Y > 0)
|
else if (DeltaPosition.Y > 0)
|
||||||
{
|
{
|
||||||
Position = handleRotation.UpdatePosition(0, tractorSpeed, Position);
|
Position = handleRotation.UpdatePosition(0, tractorSpeed, Position, smartTractor.getFarm().getCrop((int)Math.Round(Position.X / (sizeTile + Spacing)), (int)Math.Round(Position.Y / (sizeTile + Spacing))));
|
||||||
}
|
}
|
||||||
else if (DeltaPosition.Y < 0)
|
else if (DeltaPosition.Y < 0)
|
||||||
{
|
{
|
||||||
Position = handleRotation.UpdatePosition(1, tractorSpeed, Position);
|
Position = handleRotation.UpdatePosition(1, tractorSpeed, Position, smartTractor.getFarm().getCrop((int)Math.Round(Position.X / (sizeTile + Spacing)), (int)Math.Round(Position.Y / (sizeTile + Spacing))));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (DeltaPosition.X > 0)
|
else if (DeltaPosition.X > 0)
|
||||||
{
|
{
|
||||||
Position = handleRotation.UpdatePosition(2, tractorSpeed, Position);
|
Position = handleRotation.UpdatePosition(2, tractorSpeed, Position, smartTractor.getFarm().getCrop((int)Math.Round(Position.X / (sizeTile + Spacing)), (int)Math.Round(Position.Y / (sizeTile + Spacing))));
|
||||||
}
|
}
|
||||||
else if (DeltaPosition.X < 0)
|
else if (DeltaPosition.X < 0)
|
||||||
{
|
{
|
||||||
Position = handleRotation.UpdatePosition(3, tractorSpeed, Position);
|
Position = handleRotation.UpdatePosition(3, tractorSpeed, Position, smartTractor.getFarm().getCrop((int)Math.Round(Position.X / (sizeTile + Spacing)), (int)Math.Round(Position.Y / (sizeTile + Spacing))));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void updatePosition(Vector2 Size, int Status) // updates the position
|
public void updatePosition(Vector2 Size, int Status) // updates the position
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -46,9 +46,10 @@ class SmartTractor
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void init()
|
public void init(Vector2 nHousePos)
|
||||||
{
|
{
|
||||||
ai.init();
|
ai.init();
|
||||||
|
housePos = nHousePos;
|
||||||
farm.init(new Vector2(100, (GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Height / tileSize) - 125 / tileSize), housePos / (tileSize + Spacing));
|
farm.init(new Vector2(100, (GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Height / tileSize) - 125 / tileSize), housePos / (tileSize + Spacing));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user