/* virtual */ void COrder_Attack::OnAnimationAttack(CUnit &unit) { Assert(unit.Type->CanAttack); FireMissile(unit, this->GetGoal(), this->goalPos); UnHideUnit(unit); // unit is invisible until attacks }
/** ** Call when animation step is "attack" */ /* virtual */ void COrder_SpellCast::OnAnimationAttack(CUnit &unit) { CUnit *goal = GetGoal(); if (goal && !goal->IsVisibleAsGoal(*unit.Player)) { unit.ReCast = 0; } else { unit.ReCast = SpellCast(unit, *this->Spell, goal, goalPos); } UnHideUnit(unit); // unit is invisible until attacks }
/* virtual */ void COrder_Still::OnAnimationAttack(CUnit &unit) { CUnit *goal = this->GetGoal(); if (goal == NULL) { return; } if (IsTargetInRange(unit)(goal) == false) { this->ClearGoal(); return; } FireMissile(unit, goal, goal->tilePos); UnHideUnit(unit); }
/* virtual */ void COrder_Still::OnAnimationAttack(CUnit &unit) { if (unit.CanAttack(false) == false) { return; } CUnit *goal = this->GetGoal(); if (goal == nullptr) { return; } if (IsTargetInRange(unit)(goal) == false) { this->ClearGoal(); return; } FireMissile(unit, goal, goal->tilePos, goal->MapLayer->ID); UnHideUnit(unit); unit.StepCount = 0; }