implemented moving towards attack targets

This commit is contained in:
devZoGok
2023-10-14 17:17:13 +03:00
parent f0b44a50ac
commit f8328a540f
6 changed files with 38 additions and 6 deletions
+1
View File
@@ -35,6 +35,7 @@ units = {
health = {500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500},
cost = {500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500},
range = {15, 15, 14, 14, 13, 13, 12, 12, 15, 25},
rateOfFire = {100, 100, 100, 100, 100, 100, 100},
unitCornerPoints = {
{
+1 -2
View File
@@ -14,9 +14,8 @@ namespace battleship{
void build(Order);
private:
vb01::s64 lastIncrementTime = 0;
int incrementRate = 50;
bool canIncrementStructureStatus(){return vb01::getTime() - lastIncrementTime > incrementRate;}
bool canIncrementStructureStatus(){return vb01::getTime() - lastIncrementTime > rateOfFire;}
};
}
+1
View File
@@ -49,6 +49,7 @@ namespace battleship{
health = SOL_LUA_STATE["health"][id + 1];
maxHealth = health;
rateOfFire = SOL_LUA_STATE["rateOfFire"][id + 1];
range = SOL_LUA_STATE["range"][id + 1];
lineOfSight = SOL_LUA_STATE["lineOfSight"][id + 1];
unitClass = (UnitClass)SOL_LUA_STATE["unitClass"][id + 1];
+2 -2
View File
@@ -83,8 +83,8 @@ namespace battleship{
vb01::Vector2 screenPos;
std::vector<Order> orders;
vb01::Vector3 corners[8];
int health, maxHealth, cost, id, playerId, lenHpBar = 200;
s64 orderLineDispTime = 0;
int health, maxHealth, cost, id, playerId, lenHpBar = 200, rateOfFire;
s64 orderLineDispTime = 0, lastFireTime = 0;
bool working = true;
float lineOfSight, range;
+29 -1
View File
@@ -29,7 +29,9 @@ namespace battleship{
void Vehicle::halt(){
Unit::halt();
removeAllPathpoints();
patrolPointId = 0;
pursuingTarget = false;
}
void Vehicle::addOrder(Order order){
@@ -151,7 +153,9 @@ namespace battleship{
vector<Map::Cell> &cells = map->getCells();
int source = map->getCellId(pos);
int dest = map->getCellId(order.targets[0].pos);
Order::Target targ = order.targets[0];
int dest = map->getCellId(targ.unit ? targ.unit->getPos() : targ.pos);
if(type == UnitType::UNDERWATER || type == UnitType::SEA_LEVEL || type == UnitType::LAND){
Map::Cell::Type cellType = (type == UnitType::LAND ? Map::Cell::LAND : Map::Cell::WATER);
@@ -187,10 +191,34 @@ namespace battleship{
delete debugPathPointNode;
pathPoints.erase(pathPoints.begin() + i);
if(pathPoints.empty())
pursuingTarget = false;
}
void Vehicle::removeAllPathpoints(){
while(!pathPoints.empty())
removePathpoint();
}
void Vehicle::attack(Order order){
Order::Target target = order.targets[0];
float distToTarg = pos.getDistanceFrom(target.unit ? target.unit->getPos() : target.pos);
float minDist = range;
if(distToTarg > minDist){
if(!pursuingTarget){
preparePathpoints(order);
pursuingTarget = true;
}
navigate(order, .5 * Map::getSingleton()->getCellSize().x);
}
else{
pursuingTarget = false;
if(getTime() - lastFireTime > rateOfFire)
fire();
}
}
}
+4 -1
View File
@@ -13,6 +13,7 @@ namespace battleship{
Vehicle(Player*, int, vb01::Vector3, vb01::Quaternion);
void move(Order);
private:
bool pursuingTarget = false;
int patrolPointId = 0;
float speed, maxTurnAngle, anglePrecision;
vb01::Material *debugMat = nullptr;
@@ -21,7 +22,7 @@ namespace battleship{
inline int getNextPatrolPointId(int numPoints) {return patrolPointId == numPoints - 1 ? 0 : patrolPointId + 1;}
void halt();
void turn(float);
void addOrder(Order order);
void addOrder(Order);
void initProperties();
void advance(float, MoveDir = MoveDir::FORW);
void preparePathpoints(Order);
@@ -32,6 +33,8 @@ namespace battleship{
void navigate(Order, float = 0.);
void alignToSurface();
void attack(Order);
void fire(){}
};
}