_________ __ __ / _____// |_____________ _/ |______ ____ __ __ ______ \_____ \\ __\_ __ \__ \\ __\__ \ / ___\| | \/ ___/ / \| | | | \// __ \| | / __ \_/ /_/ > | /\___ \ /_______ /|__| |__| (____ /__| (____ /\___ /|____//____ > \/ \/ \//_____/ \/ ______________________ ______________________ T H E W A R B E G I N S Stratagus - A free fantasy real time strategy game engine
#include "stratagus.h"
#include "unit.h"
#include "action/action_attack.h"
#include "actions.h"
#include "ai.h"
#include "animation.h"
#include "commands.h"
#include "construct.h"
#include "game.h"
#include "editor.h"
#include "interface.h"
#include "luacallback.h"
#include "map.h"
#include "missile.h"
#include "network.h"
#include "pathfinder.h"
#include "player.h"
#include "script.h"
#include "settings.h"
#include "sound.h"
#include "sound_server.h"
#include "spells.h"
#include "tileset.h"
#include "translate.h"
#include "ui.h"
#include "unit_find.h"
#include "unit_manager.h"
#include "unitsound.h"
#include "unittype.h"
#include "upgrade.h"
#include "video.h"
#include <math.h>
Classes | |
class | _UnmarkUnitFieldFlags |
unit.cpp - The units. | |
enum | { W_NORTH = 0x10, W_WEST = 0x20, W_SOUTH = 0x40, W_EAST = 0x80 } |
bool | EnableTrainingQueue |
Show unit's name for some time. More... | |
bool | EnableBuildingCapture |
Config: training queues enabled. More... | |
bool | RevealAttacker |
Config: capture buildings enabled. More... | |
int | ResourcesMultiBuildersMultiplier = 0 |
Config: reveal attacker enabled. More... | |
static unsigned long | HelpMeLastCycle |
Config: spend resources for building with multiple workers. More... | |
static int | HelpMeLastX |
Last cycle HelpMe sound played. More... | |
static int | HelpMeLastY |
Last X coordinate HelpMe sound played. More... | |
static void | RemoveUnitFromContainer (CUnit &unit) |
Last Y coordinate HelpMe sound played. More... | |
int | ExtraDeathIndex (const char *death) |
Get the suitable animation frame depends of unit's damaged type. More... | |
CUnit * | MakeUnit (const CUnitType &type, CPlayer *player) |
Create a new unit. More... | |
static void | MapMarkUnitSightRec (const CUnit &unit, const Vec2i &pos, int width, int height, MapMarkerFunc *f, MapMarkerFunc *f2) |
CUnit * | GetFirstContainer (const CUnit &unit) |
void | MapMarkUnitSight (CUnit &unit) |
Mark on vision table the Sight of the unit. More... | |
void | MapUnmarkUnitSight (CUnit &unit) |
Unmark on vision table the Sight of the unit. More... | |
void | MapRefreshUnitsSight (const Vec2i &tilePos, const bool resetSight) |
Mark/Unmark on vision table the Sight for the units around the tilePos. More... | |
void | MapRefreshUnitsSight (const bool resetSight) |
Mark/Unmark on vision table the Sight for all units on the map. More... | |
void | UpdateUnitSightRange (CUnit &unit) |
Update unit->CurrentSightRange. More... | |
void | MarkUnitFieldFlags (const CUnit &unit) |
currently selected units More... | |
void | UnmarkUnitFieldFlags (const CUnit &unit) |
Unmark the field with the FieldFlags. More... | |
static void | UnitInXY (CUnit &unit, const Vec2i &pos) |
CUnit * | MakeUnitAndPlace (const Vec2i &pos, const CUnitType &type, CPlayer *player) |
Create a new unit and place on map. More... | |
void | FindNearestDrop (const CUnitType &type, const Vec2i &goalPos, Vec2i &resPos, int heading) |
Find the nearest position at which unit can be placed. More... | |
void | UnitLost (CUnit &unit) |
Handle the loss of a unit (food,...) More... | |
void | UnitClearOrders (CUnit &unit) |
Remove the Orders of a Unit. More... | |
void | UpdateForNewUnit (const CUnit &unit, int upgrade) |
void | NearestOfUnit (const CUnit &unit, const Vec2i &pos, Vec2i *dpos) |
static void | UnitFillSeenValues (CUnit &unit) |
void | CorrectWallDirections (CUnit &unit) |
Correct directions for placed wall. More... | |
void | CorrectWallNeighBours (CUnit &unit) |
Correct the surrounding walls. More... | |
void | UnitGoesUnderFog (CUnit &unit, const CPlayer &player) |
Call when an Unit goes under fog. More... | |
void | UnitGoesOutOfFog (CUnit &unit, const CPlayer &player) |
Call when an Unit goes out of fog. More... | |
void | UnitCountSeen (CUnit &unit) |
Does a recount for VisCount. More... | |
static bool | IsMineAssignedBy (const CUnit &mine, const CUnit &worker) |
static void | ChangePlayerOwner (CPlayer &oldplayer, CPlayer &newplayer) |
void | RescueUnits () |
Check for rescue each second. More... | |
static int | myatan (int val) |
int | DirectionToHeading (const Vec2i &delta) |
Convert direction (dx,dy) to heading (0-255) More... | |
int | DirectionToHeading (const PixelDiff &delta) |
Convert direction (dx,dy) to heading (0-255) More... | |
void | UnitUpdateHeading (CUnit &unit) |
Update frame from heading. More... | |
void | UnitHeadingFromDeltaXY (CUnit &unit, const Vec2i &delta) |
Heading and frame from delta direction. More... | |
void | DropOutOnSide (CUnit &unit, int heading, const CUnit *container) |
void | DropOutNearest (CUnit &unit, const Vec2i &goalPos, const CUnit *container) |
void | DropOutAll (const CUnit &source) |
Drop out all units in the unit. More... | |
CUnit * | UnitOnScreen (int x, int y) |
Get unit under cursor. More... | |
void | LetUnitDie (CUnit &unit, bool suicide) |
Let a unit die. More... | |
void | DestroyAllInside (CUnit &source) |
Destroy all units inside another unit. More... | |
int | ThreatCalculate (const CUnit &unit, const CUnit &dest) |
Calculate some value to measure the unit's priority for AI. More... | |
int | TargetPriorityCalculate (const CUnit *const attacker, const CUnit *const dest) |
bool | InReactRange (const CUnit &unit, const CUnit &target) |
Is target within reaction range of this unit? More... | |
bool | InAttackRange (const CUnit &unit, const CUnit &target) |
Is target within attack range of this unit? More... | |
bool | InAttackRange (const CUnit &unit, const Vec2i &tilePos) |
Is tile within attack range of this unit? More... | |
Vec2i | GetRndPosInDirection (const Vec2i &srcPos, const CUnit &dirUnit, const bool dirFrom, const int minRange, const int devRadius, const int rangeDev) |
Return randomly selected position in direction (to/from) dirUnit from srcPos. More... | |
Vec2i | GetRndPosInDirection (const Vec2i &srcPos, const Vec2i &dirPos, const bool dirFrom, const int minRange, const int devRadius, const int rangeDev) |
Return randomly selected position in direction (to/from) dirPos from srcPos. More... | |
static void | HitUnit_LastAttack (const CUnit *attacker, CUnit &target) |
static bool | HitUnit_IsUnitWillDie (const CUnit *attacker, const CUnit &target, int damage) |
static void | HitUnit_IncreaseScoreForKill (CUnit &attacker, CUnit &target) |
static void | HitUnit_ApplyDamage (CUnit *attacker, CUnit &target, int damage) |
static void | HitUnit_BuildingCapture (CUnit *attacker, CUnit &target, int damage) |
static void | HitUnit_ShowDamageMissile (const CUnit &target, int damage) |
static void | HitUnit_ShowImpactMissile (const CUnit &target) |
static void | HitUnit_ChangeVariable (CUnit &target, const Missile &missile) |
static void | HitUnit_Burning (CUnit &target) |
static void | HitUnit_RunAway (CUnit &target, const CUnit &attacker) |
static void | HitUnit_AttackBack (CUnit &attacker, CUnit &target) |
void | HitUnit (CUnit *attacker, CUnit &target, int damage, const Missile *missile) |
Hit unit with damage, if destroyed give attacker the points. More... | |
int | MapDistanceBetweenTypes (const CUnitType &src, const Vec2i &pos1, const CUnitType &dst, const Vec2i &pos2) |
Returns the map distance between to unittype as locations. More... | |
int | ViewPointDistance (const Vec2i &pos) |
Calculate the distance from current view point to coordinate. More... | |
int | ViewPointDistanceToUnit (const CUnit &dest) |
Calculate the distance from current view point to unit. More... | |
int | CanTarget (const CUnitType &source, const CUnitType &dest) |
Can this unit-type attack the other (destination) More... | |
int | CanTransport (const CUnit &transporter, const CUnit &unit) |
Can transporter transport the other unit. More... | |
void | InitUnits () |
Initialize unit module. More... | |
void | CleanUnits () |
Clean unit module. More... | |
Can this unit-type attack the other (destination)
Can the source unit attack the destination unit?
source | Unit type pointer of the attacker. |
dest | Unit type pointer of the target. |
Can transporter transport the other unit.
Can the transporter transport the other unit.
transporter | Unit which is the transporter. |
unit | Unit which wants to go in the transporter. |
Change the owner of all units of a player.
oldplayer | Old owning player. |
newplayer | New owning player. |
void CleanUnits | ( | ) |
Clean unit module.
Clean up unit module.
Correct directions for placed wall.
Correct direction for placed wall.
unit | The wall unit. |
Correct the surrounding walls.
Correct the surrounding walls.
unit | The wall unit. |
Destroy all units inside another unit.
Destroy all units inside unit.
source | container. |
int DirectionToHeading | ( | const PixelDiff & | delta | ) |
Convert direction (dx,dy) to heading (0-255)
Convert direction to heading.
delta | Delta. |
int DirectionToHeading | ( | const Vec2i & | delta | ) |
Convert direction (dx,dy) to heading (0-255)
Convert direction to heading.
delta | Delta. |
Drop out all units in the unit.
Drop out all units inside unit.
source | All units inside source are dropped out. |
Place a unit on the map nearest to goalPos.
unit | Unit to drop out. |
goalPos | Goal map tile position. |
addx | Tile width of unit it's dropping out of. |
addy | Tile height of unit it's dropping out of. |
Place a unit on the map to the side of a unit.
unit | Unit to drop out. |
heading | Direction in which the unit should appear. |
container | Unit "containing" unit to drop (may be different of unit.Container). |
int ExtraDeathIndex | ( | const char * | death | ) |
Get the suitable animation frame depends of unit's damaged type.
Find the index of a extra death type
Find the nearest position at which unit can be placed.
Find the nearest position at which unit can be placed.
type | Type of the dropped unit. |
goalPos | Goal map tile position. |
resPos | Holds the nearest point. |
heading | preferense side to drop out of. |
Return the unit not transported, by viewing the container recursively.
unit | unit from where look the first conatiner. |
Vec2i GetRndPosInDirection | ( | const Vec2i & | srcPos, |
const CUnit & | dirUnit, | ||
const bool | dirFrom, | ||
const int | minRange, | ||
const int | devRadius, | ||
const int | rangeDev | ||
) |
Return randomly selected position in direction (to/from) dirUnit from srcPos.
Returns end position of randomly generated vector form srcPos in direction to/from dirUnit
srcPos | Vector origin |
dirUnit | Position to determine vector direction |
dirFrom | Direction of src-dir. True if "from" dirPos, false if "to" dirPos |
minRange | Minimal range to new position |
devRadius | Diviation radius |
rangeDev | Range deviation |
Vec2i GetRndPosInDirection | ( | const Vec2i & | srcPos, |
const Vec2i & | dirPos, | ||
const bool | dirFrom, | ||
const int | minRange, | ||
const int | devRadius, | ||
const int | rangeDev | ||
) |
Return randomly selected position in direction (to/from) dirPos from srcPos.
Returns end position of randomly generated vector form srcPos in direction to/from dirPos
srcPos | Vector origin |
dirPos | Position to determine vector direction |
dirFrom | Direction of src-dir. True if "from" dirPos, false if "to" dirPos |
minRange | Minimal range to new position |
devRadius | Diviation radius |
rangeDev | Range deviation |
Hit unit with damage, if destroyed give attacker the points.
Unit is hit by missile or other damage.
attacker | Unit that attacks. |
target | Unit that is hit. |
damage | How many damage to take. |
missile | Which missile took the damage. |
allow target to ignore non aggressive targets while searching attacker
Wait for timer expires for preventing frequent switching of attack-move positions
allow target to ignore non aggressive targets while searching attacker
|
static |
Attack-move to pos
Run away to pos
Is target within attack range of this unit?
Returns true, if target is in attack range of the unit and there are no obstacles between them (when inside caves)
unit | Unit to check for. |
target | Checked target. |
Is tile within attack range of this unit?
Returns true, if tile is in attack range of the unit and there are no obstacles between them (when inside caves)
unit | Unit to check for. |
pos | Checked position. |
void InitUnits | ( | ) |
Initialize unit module.
Initialize unit module.
Is target within reaction range of this unit?
Returns true, if target is in reaction range of the unit
unit | Unit to check for. |
target | Checked target. |
Let a unit die.
Let an unit die.
unit | Unit to be destroyed. |
Create a new unit.
Create a new unit.
type | Pointer to unit-type. |
player | Pointer to owning player. |
Create a new unit and place on map.
Create new unit and place on map.
pos | map tile position. |
type | Pointer to unit-type. |
player | Pointer to owning player. |
int MapDistanceBetweenTypes | ( | const CUnitType & | src, |
const Vec2i & | pos1, | ||
const CUnitType & | dst, | ||
const Vec2i & | pos2 | ||
) |
Returns the map distance between to unittype as locations.
Returns the map distance between two points with unit type.
src | src unittype |
pos1 | map tile position of src (upperleft). |
dst | Unit type to take into account. |
pos2 | map tile position of dst. |
Mark on vision table the Sight of the unit.
Mark on vision table the Sight of the unit (and units inside for transporter)
unit | unit to unmark its vision. |
|
static |
(Un)Mark on vision table the Sight of the unit (and units inside for transporter (recursively))
unit | Unit to (un)mark. |
pos | coord of first container of unit. |
width | Width of the first container of unit. |
height | Height of the first container of unit. |
f | Function to (un)mark for normal vision. |
f2 | Function to (un)mark for cloaking vision. |
void MapRefreshUnitsSight | ( | const bool | resetSight | ) |
Mark/Unmark on vision table the Sight for all units on the map.
Mark/Unmark on vision table the Sight for all units on the map
resetSight | Unmark sight if True, Mark otherwise |
Mark/Unmark on vision table the Sight for the units around the tilePos.
Mark/Unmark on vision table the Sight for the units around the tilePos (and units inside for transporter)
tilePos | Position of the tile around which to update units vision for |
resetSight | Unmark sight if True, Mark otherwise |
Unmark on vision table the Sight of the unit.
Unmark on vision table the Sight of the unit (and units inside for transporter)
unit | unit to unmark its vision. |
currently selected units
Mark the field with the FieldFlags.
unit | unit to mark. |
|
static |
Fast arc tangent function.
val | atan argument |
Find nearest point of unit.
unit | Pointer to unit. |
pos | tile map position. |
dpos | Out: nearest point tile map position to (tx,ty). |
Last Y coordinate HelpMe sound played.
Remove unit from a container. It only updates linked list stuff.
unit | Pointer to unit. |
void RescueUnits | ( | ) |
Check for rescue each second.
Rescue units.
Look through all rescueable players, if they could be rescued.
Check if target attacks us (or has us as goal for any action)
Unit can attack back.
Calculate some value to measure the unit's priority for AI.
Remove the Orders of a Unit.
Removes all orders from a unit.
unit | The unit that will have all its orders cleared |
Does a recount for VisCount.
Recalculates a units visiblity count. This happens really often, Like every time a unit moves. It's really fast though, since we have per-tile counts.
unit | pointer to the unit to check if seen |
Copy the unit look in Seen variables. This should be called when buildings go under fog of war for ThisPlayer.
unit | The unit to work on |
Call when an Unit goes out of fog.
This function should get called when a unit goes out of fog of war.
unit | The unit that goes out of fog. |
player | The player the unit goes out of fog for. |
Call when an Unit goes under fog.
This function should get called when a unit goes under fog of war.
unit | The unit that goes under fog. |
player | The player the unit goes out of fog for. |
Heading and frame from delta direction.
Change unit heading/frame from delta direction x, y.
unit | Unit for new direction looking. |
delta | map tile delta direction. |
Affect Tile coord of a unit (with units inside) to tile (x, y).
unit | unit to move. |
pos | map tile position. |
Handle the loss of a unit (food,...)
Update information for lost units.
unit | Pointer to unit. |
CUnit* UnitOnScreen | ( | int | x, |
int | y | ||
) |
Get unit under cursor.
Unit on map screen.
Select units on screen. (x, y are in pixels relative to map 0,0). Not GAMEPLAY safe, uses ReplayRevealMap
More units on same position. Cycle through units. First take highest unit.
x | X pixel position. |
y | Y pixel position. |
Update frame from heading.
Update sprite frame for new heading.
Unmark the field with the FieldFlags.
Mark the field with the FieldFlags.
unit | unit to mark. |
Update for new unit. Food and income ...
unit | New unit pointer. |
upgrade | True unit was upgraded. |
Update unit->CurrentSightRange.
Update the Unit Current sight range to good value and transported units inside.
unit | unit to update SightRange |
int ViewPointDistance | ( | const Vec2i & | pos | ) |
Calculate the distance from current view point to coordinate.
Compute the distance from the view point to a given point.
pos | map tile position. |
int ViewPointDistanceToUnit | ( | const CUnit & | dest | ) |
Calculate the distance from current view point to unit.
Compute the distance from the view point to a given unit.
dest | Distance to this unit. |
bool EnableBuildingCapture |
Config: training queues enabled.
bool EnableTrainingQueue |
Show unit's name for some time.
|
static |
Config: spend resources for building with multiple workers.
|
static |
Last cycle HelpMe sound played.
|
static |
Last X coordinate HelpMe sound played.
int ResourcesMultiBuildersMultiplier = 0 |
Config: reveal attacker enabled.
bool RevealAttacker |
Config: capture buildings enabled.
Config: building capture enabled.