Tasks Overhaul – Arma 3

From Bohemia Interactive Community
Jump to navigation Jump to search
m (Text replacement - "[[Arma 3 Task Framework" to "[[Arma 3: Task Framework")
 
(7 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{GVI|A3|1.58|category}}
#REDIRECT [[Arma 3: Task Framework#Task_Overhaul]]
[[Category:Arma_3:_Editing|Tasks Overhaul]]
 
=System Overview=
Tasks Overhaul is name for project targeting UX and visual improvements to Arma 3 task framework. The 1st batch of updates was released to development branch on March 2016.
 
===Goals===
* Update visuals of task markers in both 3D environment and in map.
* Improve diary panels UX and visuals.
* Improve map & task interaction - direct task assignment/unassignment from map.
* Allow simultaneous display of multiple tasks in 3D environment.
* Implement 'Shared Objectives' through new generic feature called Custom Data.
 
===Current state===
* Engine implementation is almost done, although some aspects and behavior details can change depending on feedback.
* The core of the data part is done, but there will definitely be changes and tweaks based on internal and external feedback as well as internal tests.
* Changes to the data part will most likely be visual - color, transparency, scaling, positioning.
* One of the most noticeable changes will be implementation of the new icon set for task types.
** Currently all task types use default icon, proper icon set is in production.
** Expect task types and icons to iterate rapidly.
 
=Feature Breakdown=
Below you will find brief feature breakdown, that should present you all the core features of Tasks Overhaul.
 
==Task types==
There is a new attribute - task type. The attribute describes what is in general the task about and replaces the task label that was displayed on the task marker. Task type is visualized through the icon and unlike the task label, it is fully implemented to the game UI (3D marker, map marker, task list, task index diary panel, task notification, debriefing screen, ...).
 
===Task type definition===
Tasks overhaul is going to ship with quite large library of task types, that should suffice the common needs community creators might have when designing their mission tasks. However we felt it would be great to allow community to extend or replace the default task type selection with their own task types in an easy and comfortable way. As result we prepared the system the way that it reads the definition from addon, campaign and/or even mission config and merges them together. In case there are duplicated definitions the more local definition takes precedence.
 
====Config====
Task types definition is stored in CfgTaskTypes class:
<code>class CfgTaskTypes
{
class Ambush
{
icon = taskTypes\ambush_ca.paa;
};
class Heal
{
icon = \A3\Ui_f\data\IGUI\Cfg\simpleTasks\letters\h_ca.paa;
};
};</code>
 
====Texture====
The default task type icons are .paa textures with 32x32px size, 32bit color, white foreground and transparent background. There are no gradients or any other colors.
 
===New commands===
 
There are 2 new commands for task type.
====[[setSimpleTaskType]]====
<syntaxhighlight lang="cpp">//Syntax
_task setSimpleTaskType _type;
 
//Example
(currentTask player) setSimpleTaskType "attack";
</syntaxhighlight>
 
====[[taskType]]====
<syntaxhighlight lang="cpp">
//Syntax
_type = taskType _task;
 
//Example
_type = taskType (currentTask player);
</syntaxhighlight>
 
===New functions===
====[[BIS_fnc_taskCreate]]====
Task type was fully integrated to [[BIS_fnc_taskCreate]].
<syntaxhighlight lang="cpp">//Syntax
[_owner,_taskid,_texts,_destination,_state,_priority,_showNotification,_taskType,_alwaysVisible] call BIS_fnc_taskCreate;
 
//Example
(currentTask player) setSimpleTaskType "attack";
</syntaxhighlight>
Notice _taskType and _alwaysVisible params at the end of the definition. Defining task type when the task is created is suggested and most efficient way.
 
====[[BIS_fnc_taskSetType]]====
In case task type needs to be changed later it is best to use [[BIS_fnc_taskSetType]].
<syntaxhighlight lang="cpp">//Syntax
[_taskId:string,_taskType:string] call BIS_fnc_taskSetType;
 
//Example
["AttackMike26","attack"] call BIS_fnc_taskSetType;
</syntaxhighlight>
 
====[[BIS_fnc_taskType]]====
To get type of given task, use [[BIS_fnc_taskType]].
<syntaxhighlight lang="cpp">//Syntax
_type = [_taskId:string] call BIS_fnc_taskType;
 
//Example
_type = ["AttackMike26"] call BIS_fnc_taskType;
</syntaxhighlight>
 
==3D markers==
Task's 3D marker was completely redesigned. It now consists from 3 elements:
# background - texture with distinctive shape to visually define the element as task marker
# task type icon - texture of task type icon defining nature of the task; replaces the former task label
# distance indicator - standardized info about task distance
 
In standard situation there can be only an assigned task 3D marker shown on the screen. However there are now new commands and functions that allow to bend this behavior by flagging a task to always show - do not fade out.
 
===New commands===
 
There are 2 new commands that interact with task visibility flag.
====[[setSimpleTaskAlwaysVisible]]====
Unassigned tasks under normal conditions fade out. This can be overridden by [[setSimpleTaskAlwaysVisible]] command.
<syntaxhighlight lang="cpp">//Syntax
_task setSimpleTaskAlwaysVisible _alwaysVisible;
 
//Example
(currentTask player) setSimpleTaskAlwaysVisible true;
</syntaxhighlight>
 
====[[taskAlwaysVisible]]====
Command [[taskAlwaysVisible]] returns true if task is flagged to be always visible or false if not.
<syntaxhighlight lang="cpp">
//Syntax
_isAlwaysVisible = taskAlwaysVisible _task;
 
//Example
_isAlwaysVisible = taskAlwaysVisible (currentTask player);
</syntaxhighlight>
 
===New functions===
 
The alwaysVisible flag is also fully implemented to scripted framework. There are getter and setter functions that mimic the commands behavior.
====[[BIS_fnc_taskSetAlwaysVisible]]====
<syntaxhighlight lang="cpp">//Syntax
[_taskId:string,_alwaysVisible:bool] call BIS_fnc_taskSetAlwaysVisible;
</syntaxhighlight>
 
====[[BIS_fnc_taskAlwaysVisible]]====
<syntaxhighlight lang="cpp">
//Syntax
_alwaysVisible:bool = [_taskId:string] call BIS_fnc_taskAlwaysVisible;
</syntaxhighlight>
 
==Task overview==
Task overview is a new display that shows all tasks available to player in 3D environment. It is triggered by new action 'Tasks Overview'. Action can be found in 'Common' section and uses the keybind that was previously used by 'Diary' action.
 
'''Interaction'''
* on keydown - all task markers and navigation elements show up and a special widget with assigned task type and name pops-up in the top-left corner
* on keyup - 3 secs timer starts to tick, when it is over the task markers, navigation elements and assigned task widget fade out
 
'''Assigned task widget'''
 
<del>The 'Task Overview' action also shows a small widget (currently in top-left corner). The functionality of the widget is currently limited, it shows task type icon and task name. The future plans are to extend the feature by adding task's short description (if provided) or first few lines of the description text (if short description is not provided). Custom data info (like are assigned players provided by Shared Objectives) could also be added.</del>
 
''Note: Assigned task widget is disabled for A3 1.58 release. It's functionality is being refined.''
 
==Map markers and tooltip widgets==
===Map marker===
The former non-interactive markers were replaced by new interactive markers that shows the task type icon and have a tooltip widget.
 
'''Interaction patterns (marker)'''
* on click on marker - opens-up the task diary panels and selects the task in the task index. Color of the selected task marker on the map gets inverted.
* on click outside of the marker - closes the diary panels and deselects task marker if it was previously selected. Colors return to normal scheme.
* on mouse over - marker scales up and tooltip widget get displayed
 
===Tooltip widget===
The tooltip widget shows task name, its state and can also display custom data info. The widget can be used to quickly assign to or unassign from a task.
 
'''Interaction patterns (tooltip)'''
* on mouse over - task state text (bottom text) changes to action which will trigger on click; it is either assign or unassign
* on mouse leave - tooltip hides
* on click - assigns or unassigns task; bottom text shows the action that will trigger on click
 
==Task index and description panels==
===Task index panel===
There were 2 major improvements done to the task index panel functionality wise:
# inactive (succeeded, failed or cancelled) tasks are automatically drawn in 'disabled' color and are moved down to the bottom of the task list
# parent/child task folding visualization and functionality was fixed
 
'''Interaction patterns'''
* on click (on a list entry) - selects the task in the list and opens up the task description panel. In addition to the former state it also highlights the task marker on the map
* on double-click (on a list entry) - centers the map on the task marker (if present)
 
===Task description panel===
There are now 2 new buttons under task title - toggle button 'Assign'/'Unassign' and 'Locate' button (with distance indicator).
 
'''Interaction patterns'''
* on 'Assign' button click - assigns the task to player; mimicing functionality of previous 'Assign task as current'
* on 'Unassign' button click - unassigns player from the task; was not possible before
* on 'Locate' button click - centers the map on the task marker (if present)
 
'''Locate button remarks'''
* Locate button currently uses "Find" string. It is subject to change.
* If task doesn't have an objective linked the Locate buttons is disabled.
* Number in parentheses shows the actual distance from player to the task objective.
* If showing distances is blocked through difficulty settings, button is visible, but the distance indicator is hidden.
 
==Diary screen==
Visual and functionality of task index and description panel is almost identical to map diary panels, with a single exception - there is no 'Locate' button in the task description panel.
 
There were 2 major changes done to the Diary display:
* In addition to the former functionality it also shows 3D markers of all tasks available to player; similarly to the 'Task Overview' action.
* The 'Diary' action was remapped to 2x[J] as its former keybind was taken by the 'Task Overview' action.
 
==Debriefing==
Changes and fixes done to the debriefing screen:
* Task type icons were added to each task.
* Task list placement was fixed, list made wider so it properly fits the area dedicated to the task list.
* Uncompleted tasks are now in 'disabled' color. It usually should not happen as it is a good practice to complete every task at the end of the mission - either cancel, fail or succeed it.
 
==Custom Data and 'Shared Objectives'==
Custom data is a brand new feature that was prototyped on the scripted 'Shared Objectives' system. Custom Data allows for displaying extra information in task index and description panel as well as map marker tooltip.
===New commands===
Custom data are completely local. There are 2 new commands that interact with custom data.
====[[setSimpleTaskCustomData]]====
Command [[setSimpleTaskCustomData]] attaches icon, short text (max. 3 characters) displayed next to the icon and long text displayed on the task description panel locally to given task.
<syntaxhighlight lang="cpp">
//Syntax:
task setSimpleTaskCustomData [icon,iconText,descriptionText]
 
//Parameters:
* task: task - task the custom data are being added to
* icon: string - icon path
* iconText: string - text displayed next to the icon; max. 3 characters
* descriptionText: string - text displayed on the task description panel; html format
 
//Return:
* nothing
</syntaxhighlight>
====[[taskCustomData]]====
Command [[taskCustomData]] returns custom data attached to the local task or [] if there are no custom data attached.
<syntaxhighlight lang="cpp">
//Syntax:
taskCustomData task
 
//Parameters:
* task: task - task the custom data are being added to
 
//Return:
* custom data array in format [icon,iconText,descriptionText]
  * icon: string - icon path
  * iconText: string - text displayed next to the icon; max. 3 characters
  * descriptionText: string - text displayed on the task description panel; html format
</syntaxhighlight>
 
===Shared Objectives===
Task Overhaul is going to ship with one system build on Custom Data - Shared Objectives. The system monitors people assigned to particular tasks and displays locally the assigned player count per task.
 
Shared objective can be added to mission from EDEN editor by:
# opening Attributes >> Multiplayer >> Tasks >> Shared Objectives panel
# selecting either:  'Enable' or 'Enable with Task Propagation'
 
If 'Enable with Task Propagation' is selected, system automatically re-assigns tasks to every subordinate according to the group leader whenever the leader changes his assigned task.
=Appendix=
==Default Task Types: Actions==
{| class="wikitable sortable"
! Icon
! Task Type
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_attack.png]]
| style="width: 130px;" | attack
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_danger.png]]
| style="width: 130px;" | danger
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_default.png]]
| style="width: 130px;" | default
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_defend.png]]
| style="width: 130px;" | defend
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_destroy.png]]
| style="width: 130px;" | destroy
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_download.png]]
| style="width: 130px;" | download
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_exit.png]]
| style="width: 130px;" | exit
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_getin.png]]
| style="width: 130px;" | getin
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_getout.png]]
| style="width: 130px;" | getout
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_heal.png]]
| style="width: 130px;" | heal
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_interact.png]]
| style="width: 130px;" | interact
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_kill.png]]
| style="width: 130px;" | kill
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_land.png]]
| style="width: 130px;" | land
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_listen.png]]
| style="width: 130px;" | listen
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_meet.png]]
| style="width: 130px;" | meet
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_move.png]]
| style="width: 130px;" | move
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_move1.png]]
| style="width: 130px;" | move1
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_move2.png]]
| style="width: 130px;" | move2
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_move3.png]]
| style="width: 130px;" | move3
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_move4.png]]
| style="width: 130px;" | move4
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_move5.png]]
| style="width: 130px;" | move5
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_navigate.png]]
| style="width: 130px;" | navigate
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_rearm.png]]
| style="width: 130px;" | rearm
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_refuel.png]]
| style="width: 130px;" | refuel
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_repair.png]]
| style="width: 130px;" | repair
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_run.png]]
| style="width: 130px;" | run
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_scout.png]]
| style="width: 130px;" | scout
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_search.png]]
| style="width: 130px;" | search
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_takeoff.png]]
| style="width: 130px;" | takeoff
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_talk.png]]
| style="width: 130px;" | talk
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_talk1.png]]
| style="width: 130px;" | talk1
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_talk2.png]]
| style="width: 130px;" | talk2
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_talk3.png]]
| style="width: 130px;" | talk3
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_talk4.png]]
| style="width: 130px;" | talk4
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_talk5.png]]
| style="width: 130px;" | talk5
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_target.png]]
| style="width: 130px;" | target
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_upload.png]]
| style="width: 130px;" | upload
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_use.png]]
| style="width: 130px;" | use
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_wait.png]]
| style="width: 130px;" | wait
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_walk.png]]
| style="width: 130px;" | walk
|}
 
==Default Task Types: Objects==
{| class="wikitable sortable"
! Icon
! Task Type
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_armor.png]]
| style="width: 130px;" | armor
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_backpack.png]]
| style="width: 130px;" | backpack
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_boat.png]]
| style="width: 130px;" | boat
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_box.png]]
| style="width: 130px;" | box
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_car.png]]
| style="width: 130px;" | car
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_container.png]]
| style="width: 130px;" | container
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_documents.png]]
| style="width: 130px;" | documents
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_heli.png]]
| style="width: 130px;" | heli
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_intel.png]]
| style="width: 130px;" | intel
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_map.png]]
| style="width: 130px;" | map
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_mine.png]]
| style="width: 130px;" | mine
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_plane.png]]
| style="width: 130px;" | plane
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_radio.png]]
| style="width: 130px;" | radio
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_rifle.png]]
| style="width: 130px;" | rifle
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_whiteboard.png]]
| style="width: 130px;" | whiteboard
|}
 
==Default Task Types: Letters==
There is also full set of capital letters available. Task types are named simply "a", "b", ... "z".
{| class="wikitable sortable"
! Icon
! Task Type
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_a.png]]
| style="width: 130px;" | a
|-
| style="width: 32px; background-color: black;" | [[File:bis_tasktype_z.png]]
| style="width: 130px;" | z
|}

Latest revision as of 22:39, 31 December 2020