本文整理汇总了C++中Shot::set_depth方法的典型用法代码示例。如果您正苦于以下问题:C++ Shot::set_depth方法的具体用法?C++ Shot::set_depth怎么用?C++ Shot::set_depth使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Shot
的用法示例。
在下文中一共展示了Shot::set_depth方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: calculate
void AutoGun::calculate()
{
STACKTRACE;
BigShipPartDevice::calculate();
if (!(ownerpart && !ownerpart->isdisabled()))
return;
// find the closest target
Query a;
SpaceObject *oclosest;
double R;
oclosest = 0;
R = 1E99;
double da_track;
da_track = -a_track; // forces to go back into default position
for (a.begin(this, OBJECT_LAYERS, 0.75*shotrange); a.current != 0; a.next()) {
SpaceObject *o;
o = a.currento;
if (!o->isObject())
continue;
if (o->sameShip(this) || o->sameTeam(this))
continue;
if (o->isPlanet())
continue;
if (o->isInvisible())
continue;
double L = 0;
L = distance(o);
if (!oclosest || L < R) {
// this is a possible candidate but, is it also within the view angle ?
double a, b, da;
a = trajectory_angle(o);
// check relative to the gun's neutral position
b = ownerpart->get_angle() + a_center;
da = a - b;
while (da < -PI) da += PI2;
while (da > PI) da -= PI2;
if (da > -a_view && da < a_view) {
// okay! it's close, within dist-range, and it's within angle-range
oclosest = o;
R = L;
// required movement is relative to the gun's current position
// note that at this moment, you cannot use the value of "angle"
// which is overridden by the call to AyronShipPart::calculate; so,
// use "b" instead.
b += a_track;
da_track = a - b;
while (da_track < -PI) da_track += PI2;
while (da_track > PI) da_track -= PI2;
}
}
}
// track the target (or go back to neutral position)
// max tracking speed per second (0.1 circles / second).
// this tracking angle is relative to the neutral angle of the gun.
double da;
da = 100 * PI2 * frame_time * 1E-3;
if (da_track > da)
da_track = da;
if (da_track < -da)
da_track = -da;
a_track += da_track;
if (a_track < -a_view)
a_track = -a_view;
if (a_track > a_view)
a_track = a_view;
// absolute angle of the gun
angle = ownerpart->get_angle() + a_center + a_track;
sprite_index = get_index(angle);
// fire the weapon ?
if (oclosest && ownerpart->ship && ownerpart->ship->batt > shotdrain && !shotbusy) {
Shot *s;
s = new Shot(this, Vector2(0,0), angle, shotvel,
shotdamage, shotrange, shotarmour, this,
sprshot, 0);
s->set_depth(DEPTH_SHIPS + 0.1);
//.........这里部分代码省略.........