1[
Obsolete(),
EntityEditorProps(
category:
"GameScripted/Tasks", description:
"This is a task manager related component that allows you to display the available tasks.", color:
"0 0 255 255")]
6[
Obsolete(
"Replaced with SCR_TaskManagerUIComponent")]
71 static SCR_UITaskManagerComponent GetInstance()
76 //------------------------------------------------------------------------------------------------
83 //------------------------------------------------------------------------------------------------
85 void SetSelectedWidget(Widget w)
90 //------------------------------------------------------------------------------------------------
94 static void PanMapToTask(int taskID = -1, SCR_BaseTask task = null)
96 SCR_MapEntity mapEntity = SCR_MapEntity.GetMapInstance();
97 if (!mapEntity || !mapEntity.IsOpen())
105 task = GetTaskManager().GetTask(taskID);
110 vector taskPos = task.GetOrigin();
111 float screenX, screenY;
112 mapEntity.WorldToScreen(taskPos[0], taskPos[2], screenX, screenY);
113 mapEntity.PanSmooth(screenX, screenY);
117 //------------------------------------------------------------------------------------------------
120 void StopHUDIconUpdates(SCR_BaseTask task)
122 m_aHUDIconUpdatedTasks.RemoveItem(task);
123 task.ToggleHUDIcon(false, false);
126 //------------------------------------------------------------------------------------------------
130 void KeepHUDIconUpdated(int msTime, SCR_BaseTask task)
132 if (m_aHUDIconUpdatedTasks.Find(task) != 0)
135 m_aHUDIconUpdatedTasks.Insert(task);
136 GetGame().GetCallqueue().CallLater(StopHUDIconUpdates, msTime, false, task);
139 //------------------------------------------------------------------------------------------------
141 void OnTaskDeleted(SCR_BaseTask task)
143 if (m_aHUDIconUpdatedTasks.Find(task) != -1)
144 m_aHUDIconUpdatedTasks.RemoveItem(task);
147 //------------------------------------------------------------------------------------------------
151 void SelectTask(SCR_BaseTask task, Widget w = null)
153 m_SelectedTask = task;
155 m_LastSelectedTask = task;
158 //------------------------------------------------------------------------------------------------
160 SCR_BaseTask GetSelectedTask()
162 return m_SelectedTask;
165 //------------------------------------------------------------------------------------------------
167 Widget GetRootWidget()
172 //------------------------------------------------------------------------------------------------
174 Widget GetParentWidget()
176 return m_wParentWidget;
179 //------------------------------------------------------------------------------------------------
181 array<Widget> GetWidgetsArray()
186 //------------------------------------------------------------------------------------------------
189 void UnregisterTimer(SCR_BaseTask task)
192 m_mTasksTimers.Remove(task);
195 //------------------------------------------------------------------------------------------------
199 void RegisterTimer(SCR_BaseTask task, TextWidget timerWidget)
202 m_mTasksTimers.Set(task, timerWidget);
205 //------------------------------------------------------------------------------------------------
207 // This method is not used
208 void SetupAssigneeTexts(notnull SCR_BaseTask task, Widget parent)
210 TextWidget assigneeNames = TextWidget.Cast(parent.FindAnyWidget("TaskAssignees"));
212 TextWidget assigneeTime = TextWidget.Cast(parent.FindAnyWidget("AssigneeTime"));
216 if (task.IsIndividual())
220 RegisterTimer(task, assigneeTime);
221 assigneeTime.SetVisible(task.GetAssignee() && task.IsIndividual());
223 float remainingTime = task.GetAssigneeTimeLeft();
224 string formattedTimerText = GetFormattedTimerText(remainingTime);
225 assigneeTime.SetText(formattedTimerText);
230 assigneeTime.SetVisible(false);
236 array<SCR_BaseTaskExecutor> assignees = {};
237 task.GetAssignees(assignees);
239 bool hasAssignees = assignees.Count() > 0;
240 assigneeNames.SetVisible(hasAssignees);
245 string namesText = "";
247 for (int i = 0, count = assignees.Count(); i < count; i++)
251 namesText += assignees[i].GetPlayerName();
254 assigneeNames.SetText(namesText);
257 //------------------------------------------------------------------------------------------------
261 void GenerateUI(Widget rootWidget, SCR_BaseTask taskToFocus = null)
263 if (!GetTaskManager())
269 SCR_BaseTask locallyRequestedTask;
270 SCR_RequestedTaskSupportEntity supportEntity = SCR_RequestedTaskSupportEntity.Cast(GetTaskManager().FindSupportEntity(SCR_RequestedTaskSupportEntity));
272 locallyRequestedTask = supportEntity.GetLocallyRequestedTask();
274 SCR_BaseTaskExecutor localTaskExecutor = SCR_BaseTaskExecutor.GetLocalExecutor();
275 if (!localTaskExecutor)
279 SCR_FactionManager factionManager = SCR_FactionManager.Cast(GetGame().GetFactionManager());
281 faction = factionManager.GetLocalPlayerFaction();
283 array<SCR_BaseTask> tasks = {};
284 GetTaskManager().GetFilteredTasks(tasks, faction);
286 if (locallyRequestedTask)
288 if (!m_wWidgetToFocus)
289 m_wWidgetToFocus = locallyRequestedTask.GenerateTaskDescriptionUI(rootWidget, m_aWidgets);
291 locallyRequestedTask.GenerateTaskDescriptionUI(rootWidget, m_aWidgets);
294 SCR_BaseTask locallyAssignedTask = SCR_BaseTaskExecutor.GetLocalExecutor().GetAssignedTask();
296 Widget currentTaskUI;
297 foreach (SCR_BaseTask task : tasks)
301 Print("Null found in task list!", LogLevel.ERROR);
305 if (task == locallyRequestedTask)
308 currentTaskUI = task.GenerateTaskDescriptionUI(rootWidget, m_aWidgets);
310 if (!m_wWidgetToFocus)
311 m_wWidgetToFocus = currentTaskUI;
313 if (task == locallyAssignedTask)
315 RichTextWidget textWidget = RichTextWidget.Cast(currentTaskUI.FindAnyWidget("TaskTitle"));
316 textWidget.SetColor(m_AssignedTaskColor);
319 if (task == taskToFocus)
321 m_wWidgetToFocus = currentTaskUI;
323 SCR_TaskListEntryHandler handler = SCR_TaskListEntryHandler.Cast(m_wWidgetToFocus.FindHandler(SCR_TaskListEntryHandler));
325 handler.SetCollapsed(false);
330 SCR_UISoundEntity.SoundEvent(SCR_SoundEvent.SOUND_HUD_TASK_MENU_OPEN);
333 //------------------------------------------------------------------------------------------------
335 protected void GenerateRequestButtons()
337 // note: turned off now
339 array<SCR_BaseTaskSupportEntity> supportedTasks = GetTaskManager().GetSupportedTasks();
343 m_wParentWidget = m_wUI.FindAnyWidget("MainPanel");
344 if (!m_wParentWidget)
347 for (int i = supportedTasks.Count() - 1; i >= 0; i--)
349 supportedTasks[i].OnTaskListOpen(this);
353 //------------------------------------------------------------------------------------------------
354 protected void ClearUI()
356 if (!m_aWidgets || !m_mTasksTimers)
359 m_mTasksTimers.Clear();
361 foreach (Widget widget : m_aWidgets)
364 widget.RemoveFromHierarchy();
370 //------------------------------------------------------------------------------------------------
371 override void EOnFrame(IEntity owner, float timeSlice)
373 for (int i = m_aHUDIconUpdatedTasks.Count() - 1; i >= 0; i--)
375 m_aHUDIconUpdatedTasks[i].UpdateHUDIcon();
378 if (m_bTaskContextEnabled)
379 GetGame().GetInputManager().ActivateContext("TaskListContext");
383 if (m_MapEntity && m_MapEntity.IsOpen())
384 GetGame().GetInputManager().ActivateContext("TaskListMapContext");
386 GetGame().GetInputManager().ActivateContext("TaskListContext");
389 if (m_bCurrentTaskVisible)
391 if (m_fCurrentTaskTime > 0)
393 m_fCurrentTaskTime -= timeSlice;
394 if (m_fCurrentTaskTime < 0)
400 //------------------------------------------------------------------------------------------------
403 // TODO: use SCR_DateTimeHelper
404 string GetFormattedTimerText(float time)
406 int minutes = Math.Floor(time / 60);
407 int seconds = Math.Floor(time - (minutes * 60));
409 string minutesString;
412 minutesString += minutes.ToString();
414 string secondsString;
417 secondsString += seconds.ToString();
419 return minutesString + ":" + secondsString;
422 //------------------------------------------------------------------------------------------------
425 Widget InitCurrentTaskWidget()
427 return GetGame().GetWorkspace().CreateWidgets(m_sCurrentTaskLayout);
430 //------------------------------------------------------------------------------------------------
433 bool HasLocallyAssignedTask()
435 if (!GetTaskManager())
438 SCR_BaseTask locallyRequestedTask;
439 SCR_RequestedTaskSupportEntity supportEntity = SCR_RequestedTaskSupportEntity.Cast(GetTaskManager().FindSupportEntity(SCR_RequestedTaskSupportEntity));
441 locallyRequestedTask = supportEntity.GetLocallyRequestedTask();
443 SCR_BaseTaskExecutor localTaskExecutor = SCR_BaseTaskExecutor.GetLocalExecutor();
444 if (!localTaskExecutor || !localTaskExecutor.GetAssignedTask())
450 //------------------------------------------------------------------------------------------------
453 void ToggleCurrentTask(bool fade = true)
455 m_bCurrentTaskVisible = !m_bCurrentTaskVisible;
458 m_wCurrentTask = InitCurrentTaskWidget();
460 SCR_BaseTaskExecutor localTaskExecutor = SCR_BaseTaskExecutor.GetLocalExecutor();
461 SCR_BaseTask assignedTask = localTaskExecutor.GetAssignedTask();
463 const float speed = 1; // TODO: check for good const usage
465 if (m_bCurrentTaskVisible)
469 if (localTaskExecutor)
471 TextWidget textWidget = TextWidget.Cast(m_wCurrentTask.FindAnyWidget("TaskTitle"));
473 //Main frame of the task
474 FrameWidget m_wTaskIconWidget = FrameWidget.Cast(m_wCurrentTask.FindAnyWidget("CurrentTaskIcon"));
475 if (!m_wTaskIconWidget)
478 PlayerController m_playerController = GetGame().GetPlayerController();
479 if (!m_playerController)
482 m_PlyFactionAffilComp = SCR_PlayerFactionAffiliationComponent.Cast(m_playerController.FindComponent(SCR_PlayerFactionAffiliationComponent));
483 if (!m_PlyFactionAffilComp)
486 SCR_Faction m_faction = SCR_Faction.Cast(m_PlyFactionAffilComp.GetAffiliatedFaction());
490 //Setting visibility, color and symbol of task icon
493 ImageWidget m_wTaskIconBackground = ImageWidget.Cast(m_wCurrentTask.FindAnyWidget("TaskIconBackground"));
494 ImageWidget m_wTaskIconOutline = ImageWidget.Cast(m_wCurrentTask.FindAnyWidget("TaskIconOutline"));
495 ImageWidget m_wTaskIconSymbol = ImageWidget.Cast(m_wCurrentTask.FindAnyWidget("TaskIconSymbol"));
496 if (!m_wTaskIconBackground || !m_wTaskIconOutline || !m_wTaskIconSymbol)
499 m_wTaskIconWidget.SetVisible(true);
500 assignedTask.SetTitleWidgetText(textWidget, assignedTask.GetTaskListTaskTitle());
502 string IconName = assignedTask.GetIconName();
503 m_wTaskIconSymbol.LoadImageFromSet(0, m_sIconImageset, IconName);
506 Faction LightFaction = assignedTask.GetTargetFaction();
507 Color lightfactioncolor = LightFaction.GetFactionColor();
509 m_wTaskIconOutline.SetColor(m_faction.GetOutlineFactionColor());
510 m_wTaskIconSymbol.SetColor(m_faction.GetOutlineFactionColor());
513 if (assignedTask.IsPriority())
514 m_wTaskIconBackground.SetColor(UIColors.CONTRAST_COLOR);
516 m_wTaskIconBackground.SetColor(lightfactioncolor);
520 m_wTaskIconWidget.SetVisible(false);
521 textWidget.SetTextFormat(NO_ASSIGNED_TASK);
524 textWidget = TextWidget.Cast(m_wCurrentTask.FindAnyWidget("TaskDescription"));
526 assignedTask.SetTitleWidgetText(textWidget, assignedTask.GetTaskListTaskText());
528 textWidget.SetTextFormat(ASSIGN_TASK_HINT);
538 AnimateWidget.Opacity(m_wCurrentTask, targetOpacity, speed);
542 AnimateWidget.StopAnimation(m_wCurrentTask, WidgetAnimationOpacity);
543 m_wCurrentTask.SetOpacity(targetOpacity);
546 m_fCurrentTaskTime = m_fCurrentTaskShowTime;
549 //------------------------------------------------------------------------------------------------
551 void HidePickAssignee()
553 m_bPickAssigneeVisible = false;
554 GetGame().GetMenuManager().CloseMenuByPreset(ChimeraMenuPreset.PickAssignee);
557 //------------------------------------------------------------------------------------------------
561 GetGame().GetMenuManager().CloseMenuByPreset(ChimeraMenuPreset.TaskDetail);
562 m_bDetailVisible = false;
564 m_wUI.SetVisible(true);
567 //------------------------------------------------------------------------------------------------
570 void Action_PickAssignee()
572 Widget pickAssigneeWidget;
574 if (!m_bPickAssigneeVisible)
576 m_bPickAssigneeVisible = true;
577 MenuBase menu = GetGame().GetMenuManager().OpenDialog(ChimeraMenuPreset.PickAssignee, DialogPriority.CRITICAL, 0, true);
578 pickAssigneeWidget = menu.GetRootWidget();
579 pickAssigneeWidget.SetZOrder(m_wUI.GetZOrder());
581 Widget playerList = pickAssigneeWidget.FindAnyWidget("Players");
585 while (playerList.GetChildren())
587 playerList.RemoveChild(playerList.GetChildren());
591 SCR_BaseTaskExecutor localExecutor = SCR_BaseTaskExecutor.GetLocalExecutor();
592 map<SCR_BaseTaskExecutor, int> taskExecutors = SCR_BaseTaskExecutor.GetTaskExecutorsMap();
593 for (int i = taskExecutors.Count() - 1; i >= 0; i--)
595 SCR_BaseTaskExecutor executor = taskExecutors.GetKey(i);
597 if (executor == localExecutor)
600 SCR_BaseTask executorTask = executor.GetAssignedTask();
602 //Executor is already assigned to this task
603 if (executorTask == m_LastSelectedTask)
608 Widget playerEntry = playerList.GetWorkspace().CreateWidgets(m_wPlayerListEntry, playerList);
610 playerEntry.FindAnyWidget("IsAssigned").SetVisible(true);
612 SCR_TaskPlayerListEntryHandler entryHandler = SCR_TaskPlayerListEntryHandler.Cast(playerEntry.FindHandler(SCR_TaskPlayerListEntryHandler));
614 entryHandler.SetExecutor(executor);
616 TextWidget playerName = TextWidget.Cast(playerEntry.FindAnyWidget("PlayerName"));
618 playerName.SetText(executor.GetPlayerName());
621 if (entriesCount < 1)
627 SCR_PickAssigneeDialog pickAssigneeMenu = SCR_PickAssigneeDialog.Cast(GetGame().GetMenuManager().FindMenuByPreset(ChimeraMenuPreset.PickAssignee));
628 if (!pickAssigneeMenu)
631 SCR_BaseTaskExecutor assignee = pickAssigneeMenu.GetSelectedExecutor();
635 m_bPickAssigneeVisible = false;
637 SCR_TaskNetworkComponent taskNetworkComponent = SCR_TaskNetworkComponent.Cast(GetGame().GetPlayerController().FindComponent(SCR_TaskNetworkComponent));
638 if (taskNetworkComponent)
639 taskNetworkComponent.AssignTaskToPlayer(SCR_BaseTaskExecutor.GetLocalExecutorID(), m_LastSelectedTask.GetTaskID(), SCR_BaseTaskExecutor.GetTaskExecutorID(pickAssigneeMenu.GetSelectedExecutor()));
641 GetGame().GetMenuManager().CloseMenu(pickAssigneeMenu);
645 //------------------------------------------------------------------------------------------------
647 void Action_TasksOpen()
649 if (m_bIsUnconscious)
652 SCR_MapEntity mapEntity = SCR_MapEntity.GetMapInstance();
653 if (mapEntity && mapEntity.IsOpen())
656 if (mapEntity && !mapEntity.IsOpen())
657 GetGame().GetInputManager().AddActionListener("TasksClose", EActionTrigger.DOWN, Action_TasksClose);
660 Action_ShowTasks(GetRootWidget());
665 //------------------------------------------------------------------------------------------------
667 void Action_ShowHint()
669 if (m_bIsUnconscious)
675 SCR_MapEntity mapEntity = SCR_MapEntity.GetMapInstance();
676 if (!mapEntity || !mapEntity.IsOpen())
678 bool fade = !m_bCurrentTaskVisible;
679 ToggleCurrentTask(fade);
683 //------------------------------------------------------------------------------------------------
685 void Action_TasksClose()
687 m_SelectedTask = null;
692 GetGame().GetInputManager().RemoveActionListener("TasksClose", EActionTrigger.DOWN, Action_TasksClose);
695 //------------------------------------------------------------------------------------------------
697 void Action_ShowOnMap()
700 SCR_MapEntity mapEntity = SCR_MapEntity.GetMapInstance();
704 if (m_bDetailVisible)
707 if (!mapEntity.IsOpen())
711 IEntity player = SCR_PlayerController.GetLocalControlledEntity();
715 SCR_GadgetManagerComponent gadgetManager = SCR_GadgetManagerComponent.GetGadgetManager(player);
719 IEntity mapGadget = gadgetManager.GetGadgetByType(EGadgetType.MAP);
723 m_bShowSelectedTaskOnMap = true;
724 gadgetManager.SetGadgetMode(mapGadget, EGadgetMode.IN_HAND);
728 PanMapToTask(task: m_SelectedTask);
732 //------------------------------------------------------------------------------------------------
735 void Action_AssignTask(SCR_BaseTask task = null)
743 SCR_TaskNetworkComponent taskNetworkComp = SCR_TaskNetworkComponent.Cast(GetGame().GetPlayerController().FindComponent(SCR_TaskNetworkComponent));
744 if (!taskNetworkComp)
747 SCR_BaseTask curTask = SCR_BaseTaskExecutor.GetLocalExecutor().GetAssignedTask();
750 int curTaskId = curTask.GetTaskID();
751 taskNetworkComp.AbandonTask(curTaskId);
756 taskId = task.GetTaskID();
758 taskId = m_SelectedTask.GetTaskID();
760 if (curTask && curTask == m_SelectedTask)
762 SCR_UISoundEntity.SoundEvent(SCR_SoundEvent.TASK_CANCELED);
763 taskNetworkComp.AbandonTask(taskId);
767 SCR_UISoundEntity.SoundEvent(SCR_SoundEvent.TASK_ACCEPT);
768 taskNetworkComp.RequestAssignment(taskId);
772 //------------------------------------------------------------------------------------------------
774 void Action_ShowDetail()
779 if (m_bDetailVisible)
785 menu = GetGame().GetMenuManager().OpenDialog(ChimeraMenuPreset.TaskDetail, DialogPriority.CRITICAL, 0, true);
786 m_wTaskDetail = menu.GetRootWidget();
789 m_wTaskDetail.SetZOrder(m_wUI.GetZOrder() + 1);
790 m_bDetailVisible = true;
793 //richTextWidget is task title
794 RichTextWidget richTextWidget = RichTextWidget.Cast(m_wTaskDetail.FindAnyWidget("TaskTitle"));
795 m_SelectedTask.SetTitleWidgetText(richTextWidget, m_SelectedTask.GetTaskListTaskTitle());
797 //richTextWidget is task description
798 richTextWidget = RichTextWidget.Cast(m_wTaskDetail.FindAnyWidget("TaskDescription"));
799 m_SelectedTask.SetDescriptionWidgetText(richTextWidget, m_SelectedTask.GetTaskListTaskText());
801 ImageWidget image = ImageWidget.Cast(m_wTaskDetail.FindAnyWidget("TaskIcon"));
802 image.SetEnabled(false);
804 m_SelectedTask.SetWidgetIcon(image);
807 //------------------------------------------------------------------------------------------------
814 foreach (Widget w : m_aWidgets)
819 SCR_TaskListEntryHandler handler = SCR_TaskListEntryHandler.Cast(w.FindHandler(SCR_TaskListEntryHandler));
820 if (handler && handler.GetTask() == m_SelectedTask)
821 handler.ExpandTaskLayout();
826 //------------------------------------------------------------------------------------------------
828 void OnMapOpen(MapConfiguration cfg)
830 if (cfg.MapEntityMode == EMapEntityMode.EDITOR)
833 if (!SCR_PlayerController.GetLocalControlledEntity() || !m_bOpenTaskListOnMapOpen)
836 if (m_bShowSelectedTaskOnMap && m_LastSelectedTask)
837 PanMapToTask(-1, m_LastSelectedTask);
840 //------------------------------------------------------------------------------------------------
842 void OnMapClose(MapConfiguration config)
844 m_bTaskContextEnabled = false;
850 //------------------------------------------------------------------------------------------------
853 void HideAllHUDIcons(bool fade = true)
855 for (int i = m_aHUDIconUpdatedTasks.Count() - 1; i >= 0; i--)
857 m_aHUDIconUpdatedTasks[i].ToggleHUDIcon(false, fade);
858 m_aHUDIconUpdatedTasks.Remove(i);
862 //------------------------------------------------------------------------------------------------
866 void Action_ShowTasks(Widget targetWidget = null, SCR_BaseTask taskToFocus = null)
872 targetWidget = GetRootWidget();
874 m_wUI = targetWidget;
876 GenerateUI(targetWidget, taskToFocus);
878 m_wUI.SetVisible(true);
880 s_OnTaskListVisible.Invoke(true);
882 if (m_wWidgetToFocus)
883 GetGame().GetWorkspace().SetFocusedWidget(m_wWidgetToFocus);
886 //------------------------------------------------------------------------------------------------
888 void Action_HideTasks()
891 //HideAllHUDIcons(false);
895 m_wUI.SetVisible(false);
896 s_OnTaskListVisible.Invoke(false);
898 SCR_UISoundEntity.SoundEvent(SCR_SoundEvent.SOUND_HUD_TASK_MENU_CLOSE);
901 //------------------------------------------------------------------------------------------------
904 void Action_SelectTask(notnull SCR_BaseTask task)
909 foreach (Widget w : m_aWidgets)
914 SCR_TaskListEntryHandler handler = SCR_TaskListEntryHandler.Cast(w.FindHandler(SCR_TaskListEntryHandler));
915 if (handler && handler.GetTask() == task)
917 GetGame().GetWorkspace().SetFocusedWidget(w);
924 //------------------------------------------------------------------------------------------------
926 void Action_RequestTasksClose()
928 SCR_MapEntity mapEntity = SCR_MapEntity.GetMapInstance();
932 SCR_MapTaskListUI taskListUI = SCR_MapTaskListUI.Cast(mapEntity.GetMapUIComponent(SCR_MapTaskListUI));
939 //taskListUI.HandleTaskList();
942 //------------------------------------------------------------------------------------------------
943 protected void RemoveTaskFromList(SCR_BaseTask task)
948 if (task == m_LastSelectedTask)
949 m_LastSelectedTask = null;
951 foreach (Widget w : m_aWidgets)
956 SCR_TaskListEntryHandler handler = SCR_TaskListEntryHandler.Cast(w.FindHandler(SCR_TaskListEntryHandler));
959 if (handler.GetTask() && handler.GetTask() == task)
960 w.RemoveFromHierarchy();
964 task.ClearWidgetIcon();
967 //------------------------------------------------------------------------------------------------
971 for (int i = 0, count = m_mTasksTimers.Count(); i < count; i++)
973 TextWidget timer = m_mTasksTimers.GetElement(i);
974 SCR_BaseTask task = m_mTasksTimers.GetKeyByValue(timer);
978 float remainingTime = task.GetAssigneeTimeLeft();
979 if (remainingTime < 0)
982 string formattedTimerText = GetFormattedTimerText(remainingTime);
984 timer.SetText(formattedTimerText);
988 //------------------------------------------------------------------------------------------------
991 void EnableTaskContext(bool enable)
993 m_bTaskContextEnabled = enable;
996 //------------------------------------------------------------------------------------------------
997 protected void OnInputDeviceIsGamepad(bool isGamepad)
1001 m_wExpandButton.SetVisible(isGamepad);
1002 m_wExpandButton.SetEnabled(isGamepad);
1006 //------------------------------------------------------------------------------------------------
1007 override void OnPostInit(IEntity owner)
1009 SetEventMask(owner, EntityEvent.INIT | EntityEvent.FRAME);
1012 //------------------------------------------------------------------------------------------------
1016 protected void OnDestroyed(Instigator killer, IEntity killerEntity)
1018 m_bIsUnconscious = false;
1021 //------------------------------------------------------------------------------------------------
1023 void AddActionListeners()
1025 GetGame().GetInputManager().AddActionListener("TasksOpen", EActionTrigger.DOWN, Action_TasksOpen);
1026 GetGame().GetInputManager().AddActionListener("TasksShowHint", EActionTrigger.DOWN, Action_ShowHint);
1027 GetGame().GetInputManager().AddActionListener("TasksExpand", EActionTrigger.DOWN, Action_Expand);
1030 //------------------------------------------------------------------------------------------------
1032 void RemoveActionListeners()
1034 GetGame().GetInputManager().RemoveActionListener("TasksOpen", EActionTrigger.DOWN, Action_TasksOpen);
1035 GetGame().GetInputManager().RemoveActionListener("TasksShowHint", EActionTrigger.DOWN, Action_ShowHint);
1036 GetGame().GetInputManager().RemoveActionListener("TasksExpand", EActionTrigger.DOWN, Action_Expand);
1039 //------------------------------------------------------------------------------------------------
1042 protected void OnControlledEntityChanged(IEntity from, IEntity to)
1044 Action_TasksClose();
1048 ChimeraCharacter character = ChimeraCharacter.Cast(from);
1052 SCR_CharacterControllerComponent controller = SCR_CharacterControllerComponent.Cast(character.GetCharacterController());
1054 controller.m_OnLifeStateChanged.Remove(LifeStateChanged);
1057 ChimeraCharacter character = ChimeraCharacter.Cast(to);
1061 SCR_CharacterControllerComponent characterController = SCR_CharacterControllerComponent.Cast(character.GetCharacterController());
1062 if (!characterController)
1065 m_bIsUnconscious = characterController.IsUnconscious();
1066 characterController.m_OnLifeStateChanged.Insert(LifeStateChanged);
1069 //------------------------------------------------------------------------------------------------
1070 protected void LifeStateChanged(ECharacterLifeState previousLifeState, ECharacterLifeState newLifeState)
1072 m_bIsUnconscious = newLifeState == ECharacterLifeState.INCAPACITATED;
1074 if (!m_bIsUnconscious)
1075 Action_TasksClose();
1078 //------------------------------------------------------------------------------------------------
1079 override void EOnInit(IEntity owner)
1082 AddActionListeners();
1084 SCR_MapEntity.GetOnMapOpen().Insert(OnMapOpen);
1085 SCR_MapEntity.GetOnMapClose().Insert(OnMapClose);
1086// SCR_RespawnSuperMenu.Event_OnMenuOpen.Insert(OnMapClose);
1088 SCR_BaseGameMode gameMode = SCR_BaseGameMode.Cast(GetGame().GetGameMode());
1092 gameMode.GetOnPlayerConnected().Insert(OnPlayerConnected);
1094 m_MapEntity = SCR_MapEntity.GetMapInstance();
1097 //------------------------------------------------------------------------------------------------
1098 void OnPlayerConnected(int playerID)
1100 SCR_PlayerController playerController = SCR_PlayerController.Cast(GetGame().GetPlayerController());
1101 if (!playerController)
1104 playerController.m_OnDestroyed.Insert(OnDestroyed);
1105 int localPlayerID = playerController.GetLocalPlayerId();
1106 if (playerID != localPlayerID)
1109 playerController.m_OnControlledEntityChanged.Insert(OnControlledEntityChanged);
1112 //------------------------------------------------------------------------------------------------
1116 Widget CreateTaskList(Widget w = null)
1120 m_wUI = GetGame().GetWorkspace().CreateWidgets(m_UIResource, w);
1124 m_wUI = GetGame().GetWorkspace().CreateWidgets(m_UIResource);
1125 FrameSlot.SetAlignment(m_wUI, 0, -0.25);
1130 m_wTasksUI = m_wUI.FindAnyWidget("Tasks");
1131 m_wUI.SetVisible(m_bVisible);
1132 m_wExpandButton = m_wUI.FindAnyWidget("ExpandTaskButton");
1135 OnInputDeviceIsGamepad(!GetGame().GetInputManager().IsUsingMouseAndKeyboard());
1136 GetGame().OnInputDeviceIsGamepadInvoker().Insert(OnInputDeviceIsGamepad);
1138 SCR_InputButtonComponent hideTasks = SCR_InputButtonComponent.GetInputButtonComponent("HideTasksButton", m_wUI);
1140 hideTasks.m_OnActivated.Insert(Action_RequestTasksClose);
1142 SCR_BaseTaskManager.s_OnTaskDeleted.Insert(RemoveTaskFromList);
1143 SCR_BaseTaskManager.s_OnTaskFinished.Insert(RemoveTaskFromList);
1148 //------------------------------------------------------------------------------------------------
1153 m_wUI.RemoveFromHierarchy();
1156 //------------------------------------------------------------------------------------------------
1161 void SCR_UITaskManagerComponent(IEntityComponentSource src, IEntity ent, IEntity parent)
1167 //------------------------------------------------------------------------------------------------
1169 void ~SCR_UITaskManagerComponent()
1173 m_wUI.RemoveFromHierarchy();