deleteWaypoint: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
m (Editing my note, error in code)
m (Add forEachReversed example)
 
(91 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{Command|Comments=
{{RV|type=command
____________________________________________________________________________________________


| arma |Game name=
|game1= ofpe
|version1= 1.00


|1.00|Game version=
|game2= arma1
|version2= 1.00


|arg= global |Multiplayer Arguments=
|game3= arma2
|version3= 1.00


|eff= global |Multiplayer Effects=
|game4= arma2oa
____________________________________________________________________________________________
|version4= 1.50


| Removes the specified waypoint.<br><br>
|game5= tkoh
{{ Informative | When a waypoint is deleted, all other [[group]] [[waypoints]] are immediately re-indexed. So in order to delete all waypoints for a group, delete them from back to front:
|version5= 1.00
[[group]] _unit [[call]]
{
[[for]] "_i" [[from]] [[count]] [[waypoints]] [[_this]] - 1 [[to]] 0 [[step]] -1 [[do]]
{
[[deleteWaypoint]] <nowiki>[</nowiki>[[_this]], _i];
};
};
}}  |DESCRIPTION=
____________________________________________________________________________________________


| '''deleteWaypoint''' [group, index] |SYNTAX=
|game6= arma3
|version6= 0.50


|arg= global


|p1=  [group, index]: [[Array]] |PARAMETER1=
|eff= global
|p2=  group: [[Group]] |PARAMETER2=
|p3= index: [[Number]] |PARAMETER3=


| [[Nothing]] |RETURNVALUE=
|gr1= Waypoints
____________________________________________________________________________________________
 
|x1= <code>[[deleteWaypoint]] [_grp, 2]</code> |EXAMPLE1=
____________________________________________________________________________________________


| [[waypoints]], [[copyWaypoints]], [[setCurrentWaypoint]], [[setWaypointBehaviour]], [[setWaypointCombatMode]], [[setWaypointCompletionRadius]], [[setWaypointDescription]], [[setWaypointFormation]], [[setWaypointHousePosition]], [[setWaypointPosition]], [[setWaypointScript]], [[setWaypointSpeed]], [[setWaypointStatements]], [[setWaypointTimeout]], [[setWaypointType]], [[setWaypointVisible]], [[waypointAttachVehicle]], [[waypointAttachedVehicle]], [[setWaypointLoiterRadius]], [[waypointLoiterRadius]], [[addWaypoint]], [[setWaypointLoiterType]], [[waypointSpeed]] |SEEALSO=
|descr= Removes the specified waypoint.
{{Feature|informative|
* When a waypoint is deleted, all other [[group]] [[waypoints]] are immediately re-indexed. See {{Link|#Example 2}} for a deletion of all group's waypoints.
* Deleting a group's [[currentWaypoint|current waypoint]] will ''not'' stop the group on its tracks.
}}


}}
|s1= [[deleteWaypoint]] [group, index]


<h3 style="display:none">Notes</h3>
|p1= group: [[Group]]
<dl class="command_description">
<!-- Note Section BEGIN -->
<dd class="notedate">Posted on 1 Feb, 2008 - 07:48
<dt class="note">[[User:Saintolaf|Saintolaf]]
<dd class="note">
In order to change the behavior of a unit currently following a string of waypoints, it is not enough to use deleteWaypoint. The path of the unit is calculated by the waypoints present at start, and the unit will continue according to the original waypoints even if you delete them by using this command.
To achieve the wanted effect, you should rather use setWPPos to the units current position (thereby stopping the unit), and (after a small delay) use [[deleteWaypoint]] to remove the [[waypoints]].


<dd class="notedate">Posted on 15 Nov, 2008 - 13:37
|p2= index: [[Number]]
<dt class="note">'''[[User:VictorFarbau|VictorFarbau]]'''
<dd class="note">
Another (more foolproof) method to avoid the problem of non-deleteable waypoints is to introduce another group (createGroup) and join all units of the present group. A new group will start without any preset waypoints so you can start setting new WPs all over again.
Old group is "_combatGroup", new group is "_combatGroup2"
<code>_combatGroup2 = [[createGroup]] EAST;
{[_x] [[joinSilent]] _combatGroup2} [[forEach]] ([[units]] _combatGroup);
_combatGroup2 [[addWaypoint]] [ [[getPos]] [[player]], 25];</code>


|r1= [[Nothing]]


<dd class="notedate">Posted on January 04, 2011
|x1= <sqf>deleteWaypoint [_grp, 2];</sqf>
<dt class="note">'''[[User:kju|kju]]'''
<dd class="note">
When you want to remove all waypoints, do '''NOT''' iterate over ''waypoints _group'' while trying to delete them (an array is by reference!). Instead use an approach like this:
<code>
[[while]] {([[count]] ([[waypoints]] _group)) > 0} [[do]]
{
  [[deleteWaypoint]] (([[waypoints]] _group) [[select]] 0);
};</code>
<!-- Note Section END -->
</dl>


<h3 style="display:none">Bottom Section</h3>
|x2= Because waypoints get immediately re-indexed when one gets deleted, delete them from last to first:
<sqf>
private _group = group _unit;
for "_i" from (count waypoints _group - 1) to 0 step -1 do
{
deleteWaypoint [_group, _i];
};
</sqf>
or always delete the first one (if you want to delete them all)
<sqf>
private _group = group _unit;
for "_i" from 0 to (count waypoints _group - 1) do
{
deleteWaypoint [_group, 0];
};
</sqf>
or use [[forEachReversed]]:
<sqf>
{ deleteWaypoint _x } forEachReversed waypoints _group; // Arma 3 v2.14+ only
</sqf>


[[Category:Scripting Commands|DELETEWAYPOINT]]
|seealso= [[waypoints]] [[setCurrentWaypoint]] [[setWaypointPosition]] [[setWaypointScript]] [[setWaypointStatements]] [[setWaypointType]] [[addWaypoint]]
[[Category:Scripting Commands OFP Elite |DELETEWAYPOINT]]
}}
[[Category:Scripting Commands ArmA|DELETEWAYPOINT]]
[[Category:Scripting Commands ArmA2|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting Commands Arma 3|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting_Commands_Take_On_Helicopters|{{uc:{{PAGENAME}}}}]]
[[Category:Command_Group:_Waypoints|{{uc:{{PAGENAME}}}}]]


<!-- CONTINUE Notes -->
{{Note
<dl class="command_description">
|user= Saintolaf
<dd class="notedate">Posted on November 17, 2019 - 16:52 (UTC)</dd>
|timestamp= 20080101074800
<dt class="note">[[User:Mr H.|Mr H.]]</dt>
|text= In order to change the behavior of a unit currently following some waypoints, it is not enough to use [[deleteWaypoint]].
<dd class="note">
To achieve the wanted effect, you should rather use [[setWPPos]] to the unit's current position (thereby stopping the unit), and (after a small delay) use [[deleteWaypoint]] to remove the next [[waypoints]].
}}


{{Note
|user= VictorFarbau
|timestamp= 20081115133700
|text= Another (more foolproof) method to avoid the problem of non-deleteable waypoints is to introduce another group ([[createGroup]]) and [[join]] all units of the present group. A new group will start without any preset waypoints so you can start setting new WPs all over again.
Old group is "_combatGroup", new group is "_combatGroup2"
<sqf>
_combatGroup2 = createGroup east;
{ [_x] joinSilent _combatGroup2 } forEach (units _combatGroup);
_combatGroup2 addWaypoint [getPos player, 25];
</sqf>
}}


To have the unit stop on the spot you need to set its current waypoint where it is and add a little delay, as stated above by Saintolaf so:
{{Note
|user= Mr H.
|timestamp= 20191117165200
|text= To have the unit stop on the spot you need to set its current waypoint where it is and add a little delay, as stated above by [[User|Saintolaf]] so:


<code>group _unit spawn  
<sqf>
group _unit spawn
{
{
[_this,(currentWaypoint _this)] setWaypointPosition [getPosASL ((units _this) select 0), -1];
[_this, currentWaypoint _this] setWaypointPosition [getPosASL ((units _this) select 0), -1];
sleep 0.1;
sleep 0.1;
for "_i" from count waypoints _this - 1 to 0 step -1 do  
for "_i" from count waypoints _this - 1 to 0 step -1 do  
{
{
deleteWaypoint [_this, _i];
deleteWaypoint [_this, _i];
};
};
};
};
</code>
</sqf>
Will stop the group where it is and delete its waypoints. 0.1 seems to be the correct sleep value in this case
Will stop the group where it is and delete its waypoints.
</dd>
}}
</dl>
<!-- DISCONTINUE Notes -->

Latest revision as of 18:09, 27 April 2023

Hover & click on the images for description

Description

Description:
Removes the specified waypoint.
  • When a waypoint is deleted, all other group waypoints are immediately re-indexed. See Example 2 for a deletion of all group's waypoints.
  • Deleting a group's current waypoint will not stop the group on its tracks.
Groups:
Waypoints

Syntax

Syntax:
deleteWaypoint [group, index]
Parameters:
group: Group
index: Number
Return Value:
Nothing

Examples

Example 1:
deleteWaypoint [_grp, 2];
Example 2:
Because waypoints get immediately re-indexed when one gets deleted, delete them from last to first:
private _group = group _unit; for "_i" from (count waypoints _group - 1) to 0 step -1 do { deleteWaypoint [_group, _i]; };
or always delete the first one (if you want to delete them all)
private _group = group _unit; for "_i" from 0 to (count waypoints _group - 1) do { deleteWaypoint [_group, 0]; };
or use forEachReversed:
{ deleteWaypoint _x } forEachReversed waypoints _group; // Arma 3 v2.14+ only

Additional Information

See also:
waypoints setCurrentWaypoint setWaypointPosition setWaypointScript setWaypointStatements setWaypointType addWaypoint

Notes

Report bugs on the Feedback Tracker and/or discuss them on the Arma Discord or on the Forums.
Only post proven facts here! Add Note
Saintolaf - c
Posted on Jan 01, 2008 - 07:48 (UTC)
In order to change the behavior of a unit currently following some waypoints, it is not enough to use deleteWaypoint. To achieve the wanted effect, you should rather use setWPPos to the unit's current position (thereby stopping the unit), and (after a small delay) use deleteWaypoint to remove the next waypoints.
VictorFarbau - c
Posted on Nov 15, 2008 - 13:37 (UTC)
Another (more foolproof) method to avoid the problem of non-deleteable waypoints is to introduce another group (createGroup) and join all units of the present group. A new group will start without any preset waypoints so you can start setting new WPs all over again. Old group is "_combatGroup", new group is "_combatGroup2"
_combatGroup2 = createGroup east; { [_x] joinSilent _combatGroup2 } forEach (units _combatGroup); _combatGroup2 addWaypoint [getPos player, 25];
Mr H. - c
Posted on Nov 17, 2019 - 16:52 (UTC)
To have the unit stop on the spot you need to set its current waypoint where it is and add a little delay, as stated above by Saintolaf so:
group _unit spawn { [_this, currentWaypoint _this] setWaypointPosition [getPosASL ((units _this) select 0), -1]; sleep 0.1; for "_i" from count waypoints _this - 1 to 0 step -1 do { deleteWaypoint [_this, _i]; }; };
Will stop the group where it is and delete its waypoints.