public void BuildFor(SerializableData.Objectives.SerializableVehicleObjective actor) { Clear(); #region SpawnAfter { var item = new MenuListItem("Spawn After Objective", StaticData.StaticLists.NumberMenu, actor.SpawnAfter); item.OnListChanged += (sender, index) => { actor.SpawnAfter = index; }; AddItem(item); } #endregion #region ObjectiveIndex { var item = new MenuListItem("Objective Index", StaticData.StaticLists.ObjectiveIndexList, actor.ActivateAfter); item.OnListChanged += (sender, index) => { actor.ActivateAfter = index; if (string.IsNullOrEmpty(Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter])) { MenuItems[2].SetRightBadge(NativeMenuItem.BadgeStyle.Alert); MenuItems[2].SetRightLabel(""); } else { var title = Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter]; MenuItems[2].SetRightLabel(title.Length > 20 ? title.Substring(0, 20) + "..." : title); MenuItems[2].SetRightBadge(NativeMenuItem.BadgeStyle.None); } }; AddItem(item); } #endregion // TODO: Change NumberMenu to max num of objectives in mission // Note: if adding items before weapons, change item order in VehiclePropertiesMenu #region Objective Name { var item = new NativeMenuItem("Objective Name"); if (string.IsNullOrEmpty(Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter])) item.SetRightBadge(NativeMenuItem.BadgeStyle.Alert); else { var title = Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter]; item.SetRightLabel(title.Length > 20 ? title.Substring(0, 20) + "..." : title); } item.Activated += (sender, selectedItem) => { GameFiber.StartNew(delegate { ResetKey(Common.MenuControls.Back); Editor.DisableControlEnabling = true; string title = Util.GetUserInput(); if (string.IsNullOrEmpty(title)) { item.SetRightBadge(NativeMenuItem.BadgeStyle.Alert); Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter] = ""; SetKey(Common.MenuControls.Back, GameControl.CellphoneCancel, 0); Editor.DisableControlEnabling = false; return; } item.SetRightBadge(NativeMenuItem.BadgeStyle.None); title = Regex.Replace(title, "-=", "~"); Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter] = title; selectedItem.SetRightLabel(title.Length > 20 ? title.Substring(0, 20) + "..." : title); SetKey(Common.MenuControls.Back, GameControl.CellphoneCancel, 0); }); }; AddItem(item); } #endregion #region Health { var listIndex = actor.Health == 0 ? StaticData.StaticLists.VehicleHealthChoses.FindIndex(n => n == (dynamic)1000) : StaticData.StaticLists.VehicleHealthChoses.FindIndex(n => n == (dynamic)actor.Health); var item = new MenuListItem("Health", StaticData.StaticLists.VehicleHealthChoses, listIndex); item.OnListChanged += (sender, index) => { int newAmmo = int.Parse(((MenuListItem)sender).IndexToItem(index).ToString(), CultureInfo.InvariantCulture); actor.Health = newAmmo; }; AddItem(item); } #endregion #region Passengers { var item = new NativeMenuItem("Occupants"); AddItem(item); if (((Vehicle)actor.GetVehicle()).HasOccupants) { var newMenu = new UIMenu("", "OCCUPANTS", new Point(0, -107)); newMenu.MouseControlsEnabled = false; newMenu.SetBannerType(new ResRectangle()); var occupants = ((Vehicle)actor.GetVehicle()).Occupants; for (int i = 0; i < occupants.Length; i++) { var ped = occupants[i]; var type = Editor.GetEntityType(ped); if (type == Editor.EntityType.NormalActor) { var act = Editor.CurrentMission.Actors.FirstOrDefault(a => a.GetEntity().Handle.Value == ped.Handle.Value); if (act == null) continue; var routedItem = new NativeMenuItem(i == 0 ? "Driver" : "Passenger #" + i); routedItem.Activated += (sender, selectedItem) => { Editor.DisableControlEnabling = true; Editor.EnableBasicMenuControls = true; var propMenu = new ActorPropertiesMenu(); propMenu.BuildFor(act); propMenu.MenuItems[2].Enabled = false; propMenu.OnMenuClose += _ => { newMenu.Visible = true; }; newMenu.Visible = false; propMenu.Visible = true; GameFiber.StartNew(delegate { while (propMenu.Visible) { propMenu.ProcessControl(); propMenu.Draw(); propMenu.Process(); GameFiber.Yield(); } }); }; newMenu.AddItem(routedItem); } else if (type == Editor.EntityType.ObjectiveActor) { var act = Editor.CurrentMission.Objectives .OfType<SerializableActorObjective>() .FirstOrDefault(a => a.GetPed().Handle.Value == ped.Handle.Value); if (act == null) continue; var routedItem = new NativeMenuItem(i == 0 ? "Objective Driver" : "Objective Passenger #" + i); routedItem.Activated += (sender, selectedItem) => { Editor.DisableControlEnabling = true; Editor.EnableBasicMenuControls = true; var propMenu = new ActorObjectivePropertiesMenu(); propMenu.BuildFor(act); propMenu.MenuItems[2].Enabled = false; propMenu.OnMenuClose += _ => { newMenu.Visible = true; }; newMenu.Visible = false; propMenu.Visible = true; GameFiber.StartNew(delegate { while (propMenu.Visible) { propMenu.ProcessControl(); propMenu.Draw(); propMenu.Process(); GameFiber.Yield(); } }); }; newMenu.AddItem(routedItem); } } BindMenuToItem(newMenu, item); newMenu.RefreshIndex(); Children.Add(newMenu); } else { item.Enabled = false; } } #endregion #region Show Health Bar { var item = new MenuCheckboxItem("Show Healthbar", actor.ShowHealthBar); AddItem(item); item.CheckboxEvent += (sender, @checked) => { actor.ShowHealthBar = @checked; MenuItems[6].Enabled = @checked; }; } #endregion #region Bar Name { var item = new NativeMenuItem("Healthbar Label"); AddItem(item); if (!actor.ShowHealthBar) item.Enabled = false; if (string.IsNullOrEmpty(actor.Name) && actor.ShowHealthBar) actor.Name = "HEALTH"; if (actor.ShowHealthBar) item.SetRightLabel(actor.Name.Length > 20 ? actor.Name.Substring(0, 20) : actor.Name); item.Activated += (sender, selectedItem) => { GameFiber.StartNew(delegate { ResetKey(Common.MenuControls.Back); Editor.DisableControlEnabling = true; string title = Util.GetUserInput(); if (string.IsNullOrEmpty(title)) { actor.Name = "HEALTH"; item.SetRightLabel(actor.Name.Length > 20 ? actor.Name.Substring(0, 20) : actor.Name); SetKey(Common.MenuControls.Back, GameControl.CellphoneCancel, 0); Editor.DisableControlEnabling = false; return; } title = Regex.Replace(title, "-=", "~"); actor.Name = title; item.SetRightLabel(actor.Name.Length > 20 ? actor.Name.Substring(0, 20) : actor.Name); SetKey(Common.MenuControls.Back, GameControl.CellphoneCancel, 0); }); }; } #endregion #region Objective Type { var item = new MenuListItem("Objective Type", StaticData.StaticLists.ObjectiveTypeList, actor.ObjectiveType); item.OnListChanged += (sender, index) => { actor.ObjectiveType = index; }; AddItem(item); } #endregion RefreshIndex(); }
public void Tick(GraphicsEventArgs canvas) { if (menuDirty) { RebuildMissionMenu(CurrentMission); _propertiesMenu = null; menuDirty = false; } else { CheckMenusForAlerts(); _cutsceneUi.Process(); _menuPool.ProcessMenus(); Children.ForEach(x => x.Process()); if (_propertiesMenu != null) { _propertiesMenu.Process(); ((UIMenu)_propertiesMenu).ProcessControl(); ((UIMenu)_propertiesMenu).ProcessMouse(); ((UIMenu)_propertiesMenu).Draw(); } } if (IsInMainMenu) { NativeFunction.CallByName<uint>("HIDE_HUD_AND_RADAR_THIS_FRAME"); } if (!IsInEditor) return; NativeFunction.CallByName<uint>("DISABLE_CONTROL_ACTION", 0, (int)GameControl.FrontendPauseAlternate); foreach (var objective in CurrentMission.Objectives) { //TODO: Get model size if (objective is SerializableActorObjective) { var ped = ((SerializableActorObjective) objective).GetPed(); if (ped == null) continue; Util.DrawMarker(0, ped.Position + new Vector3(0, 0, 2f), new Vector3(ped.Rotation.Pitch, ped.Rotation.Roll, ped.Rotation.Yaw), new Vector3(1f, 1f, 1f), Color.FromArgb(100, 255, 10, 10) ); } else if (objective is SerializableVehicleObjective) { var ped = ((SerializableVehicleObjective)objective).GetVehicle(); if (ped == null) continue; Util.DrawMarker(0, ped.Position + new Vector3(0, 0, 2f), new Vector3(ped.Rotation.Pitch, ped.Rotation.Roll, ped.Rotation.Yaw), new Vector3(1f, 1f, 1f), Color.FromArgb(100, 255, 10, 10)); } else if (objective is SerializablePickupObjective) { var pickup = ((SerializablePickupObjective) objective).GetObject(); if (pickup == null) continue; Util.DrawMarker(1, pickup.Position - new Vector3(0, 0, 1f), new Vector3(pickup.Rotation.Pitch, pickup.Rotation.Roll, pickup.Rotation.Yaw), new Vector3(1f, 1f, 1f), Color.FromArgb(100, 255, 10, 10)); } else if (objective is SerializableMarker) { var obj = ((SerializableMarker) objective); Util.DrawMarker(obj.Type, obj.Position, new Vector3(), obj.Scale, Color.FromArgb(obj.Alpha, (int)obj.Color.X, (int)obj.Color.Y, (int)obj.Color.Z)); } } foreach (var pickup in CurrentMission.Pickups) { if(pickup.GetEntity() == null) continue; Util.DrawMarker(1, pickup.GetEntity().Position - new Vector3(0,0,1f), new Vector3(pickup.GetEntity().Rotation.Pitch, pickup.GetEntity().Rotation.Roll, pickup.GetEntity().Rotation.Yaw), new Vector3(1f, 1f, 1f), Color.FromArgb(100, 10, 100, 255)); } if (IsInFreecam) { var markerPos = Util.RaycastEverything(new Vector2(0, 0), MainCamera, MarkerData.RepresentedBy ?? _mainObject); #region Camera Movement if (!DisableControlEnabling) { NativeFunction.CallByName<uint>("DISABLE_ALL_CONTROL_ACTIONS", 0); EnableControls(); } if (EnableBasicMenuControls) { EnableMenuControls(); } MainCamera.Active = true; var mouseX = NativeFunction.CallByName<float>("GET_CONTROL_NORMAL", 0, (int) GameControl.LookLeftRight); var mouseY = NativeFunction.CallByName<float>("GET_CONTROL_NORMAL", 0, (int) GameControl.LookUpDown); mouseX *= -1; //Invert mouseY *= -1; float movMod = 0.1f; float entMod = 1; if (Util.IsDisabledControlPressed(GameControl.Sprint)) { movMod = 0.5f; entMod = 0.5f; } else if (Util.IsDisabledControlPressed(GameControl.CharacterWheel)) { movMod = 0.02f; entMod = 0.02f; } bool zoomIn = false; bool zoomOut = false; if (Util.IsGamepadEnabled) { mouseX *= 2; //TODO: settings mouseY *= 2; movMod *= 5f; zoomIn = Game.IsControlPressed(0, GameControl.CreatorRT); zoomOut = Game.IsControlPressed(0, GameControl.CreatorLT); } else { mouseX *= 20; mouseY *= 20; movMod *= 10f; zoomIn = Game.IsControlPressed(0, GameControl.CursorScrollUp); zoomOut = Game.IsControlPressed(0, GameControl.CursorScrollDown); } MainCamera.Rotation = new Rotator((MainCamera.Rotation.Pitch + mouseY).Clamp(CameraClampMin, CameraClampMax), 0f, MainCamera.Rotation.Yaw + mouseX); var dir = Util.RotationToDirection(new Vector3(MainCamera.Rotation.Pitch, MainCamera.Rotation.Roll, MainCamera.Rotation.Yaw)); var rotLeft = new Vector3(MainCamera.Rotation.Pitch, MainCamera.Rotation.Roll, MainCamera.Rotation.Yaw - 10f); var rotRight = new Vector3(MainCamera.Rotation.Pitch, MainCamera.Rotation.Roll, MainCamera.Rotation.Yaw + 10f); var right = Util.RotationToDirection(rotRight) - Util.RotationToDirection(rotLeft); Vector3 movementVector = new Vector3(); if (zoomIn) { var directionalVector = dir*movMod; movementVector += directionalVector; } if (zoomOut) { var directionalVector = dir*movMod; movementVector -= directionalVector; } if (Game.IsControlPressed(0, GameControl.MoveUpOnly)) { var directionalVector = dir*movMod; movementVector += new Vector3(directionalVector.X, directionalVector.Y, 0f); } if (Game.IsControlPressed(0, GameControl.MoveDownOnly)) { var directionalVector = dir*movMod; movementVector -= new Vector3(directionalVector.X, directionalVector.Y, 0f); } if (Game.IsControlPressed(0, GameControl.MoveLeftOnly)) { movementVector += right*movMod; } if (Game.IsControlPressed(0, GameControl.MoveRightOnly)) { movementVector -= right*movMod; } MainCamera.Position += movementVector; Game.LocalPlayer.Character.Position = MainCamera.Position; var head = MainCamera.Rotation.Yaw; if (head < 0f) head += 360f; Game.LocalPlayer.Character.Heading = head; #endregion var ent = Util.RaycastEntity(new Vector2(0, 0), MainCamera.Position, new Vector3(MainCamera.Rotation.Pitch, MainCamera.Rotation.Roll, MainCamera.Rotation.Yaw) , null); if (!_isCopying) { if (MarkerData.RepresentedBy == null || !MarkerData.RepresentedBy.IsValid()) { CheckForProperty(ent); CheckForPickupProperty(markerPos, ent == null); } else { CheckForIntersection(ent); CheckForPickup(markerPos, ent == null); } } WaypointEditor?.Process(markerPos, ent); CopyWatch(ent, markerPos); DisplayMarker(markerPos, dir); } else { var gameplayCoord = NativeFunction.CallByName<Vector3>("GET_GAMEPLAY_CAM_COORD"); var gameplayRot = NativeFunction.CallByName<Vector3>("GET_GAMEPLAY_CAM_ROT", 2); var markerPos = Util.RaycastEverything(new Vector2(0, 0), gameplayCoord, gameplayRot, Game.LocalPlayer.Character); #region Controls Game.DisableControlAction(0, GameControl.Phone, true); if (!DisableControlEnabling) { EnableControls(); } if (EnableBasicMenuControls) { EnableMenuControls(); } #endregion var ent = Util.RaycastEntity(new Vector2(0, 0), gameplayCoord, gameplayRot, Game.LocalPlayer.Character); if (!_isCopying) { if (MarkerData.RepresentedBy == null || !MarkerData.RepresentedBy.IsValid()) { CheckForProperty(ent); CheckForPickupProperty(markerPos, ent == null); } else { CheckForIntersection(ent); CheckForPickup(markerPos, ent == null); } } WaypointEditor?.Process(markerPos, ent); CopyWatch(ent, markerPos); DisplayMarker(markerPos, markerPos - NativeFunction.CallByName<Vector3>("GET_GAMEPLAY_CAM_COORD")); if (!_menuPool.IsAnyMenuOpen()) { Game.DisplayHelp("Press ~INPUT_PHONE~ to open menu."); if (Util.IsDisabledControlJustPressed(GameControl.Phone)) { _mainMenu.Visible = true; } } } NativeFunction.CallByHash<uint>(0x231C8F89D0539D8F, BigMinimap, false); if(Util.IsGamepadEnabled) Game.SetRadarZoomLevelThisFrame(Game.IsControlPressed(0, GameControl.Duck) ? 300 : 100); else Game.SetRadarZoomLevelThisFrame(Game.IsControlPressed(0, GameControl.HUDSpecial) ? 300 : 100); if (Game.IsControlJustPressed(0, GameControl.FrontendPause) && IsInFreecam) { GameFiber.StartNew(delegate { Game.FadeScreenOut(800, true); Game.LocalPlayer.Character.Position -= new Vector3(0, 0, Game.LocalPlayer.Character.HeightAboveGround - 1f); IsInFreecam = false; MainCamera.Active = false; Game.LocalPlayer.Character.Opacity = 1f; _missionMenu.SetKey(Common.MenuControls.Back, GameControl.CellphoneCancel, 0); _mainMenu.SetKey(Common.MenuControls.Back, GameControl.CellphoneCancel, 0); Game.FadeScreenIn(800); }); } else if (Game.IsControlJustPressed(0, GameControl.FrontendPause) && !IsInFreecam) { GameFiber.StartNew(delegate { Game.FadeScreenOut(800, true); IsInFreecam = true; MainCamera.Active = true; Game.LocalPlayer.Character.Opacity = 0f; _missionMenu.ResetKey(Common.MenuControls.Back); _mainMenu.ResetKey(Common.MenuControls.Back); _menuPool.CloseAllMenus(); Children.ForEach(x => x.Children.ForEach(n => n.Visible = false)); _missionMenu.Visible = true; Game.FadeScreenIn(800); }); } #region Marker Spawning/Deletion if (MarkerData.RepresentedBy != null && MarkerData.RepresentedBy.IsValid() && (_hoveringEntity == null || !_hoveringEntity.IsValid()) && Game.IsControlPressed(0, GameControl.FrontendLb)) { MarkerData.RepresentedBy.Rotation = new Rotator(MarkerData.RepresentedBy.Rotation.Pitch, MarkerData.RepresentedBy.Rotation.Roll, MarkerData.RepresentedBy.Rotation.Yaw + 3f); RingData.Heading += 3f; } if (MarkerData.RepresentedBy != null && MarkerData.RepresentedBy.IsValid() && (_hoveringEntity == null || !_hoveringEntity.IsValid()) && Game.IsControlPressed(0, GameControl.FrontendRb)) { MarkerData.RepresentedBy.Rotation = new Rotator(MarkerData.RepresentedBy.Rotation.Pitch, MarkerData.RepresentedBy.Rotation.Roll, MarkerData.RepresentedBy.Rotation.Yaw - 3f); RingData.Heading -= 3f; } if (_cutsceneUi.IsInCutsceneEditor) { _cutsceneUi.Tick(); return; } if (WaypointEditor != null && WaypointEditor.IsInEditor) return; if (_isCopying && MarkerData.RepresentedBy != null && MarkerData.RepresentedBy.IsValid()) { if (Game.IsControlJustPressed(0, GameControl.Attack)) { MarkerData.RepresentedBy = null; _isCopying = false; } return; } if (_isCopying && _attachedMarker != null) { if (Game.IsControlJustPressed(0, GameControl.Attack)) { _attachedMarker = null; _isCopying = false; } return; } if (MarkerData.RepresentedBy != null && MarkerData.RepresentedBy.IsValid() && Game.IsControlJustPressed(0, GameControl.CellphoneSelect) && (_hoveringEntity == null || !_hoveringEntity.IsValid())) { if (MarkerData.RepresentedBy is Vehicle && !IsPlacingObjective) { CreateVehicle(MarkerData.RepresentedBy.Model, MarkerData.RepresentedBy.Position, MarkerData.RepresentedBy.Rotation, ((Vehicle)MarkerData.RepresentedBy).PrimaryColor, ((Vehicle)MarkerData.RepresentedBy).SecondaryColor); } else if (MarkerData.RepresentedBy is Vehicle && IsPlacingObjective) { CreateVehicleObjective(MarkerData.RepresentedBy.Model, MarkerData.RepresentedBy.Position, MarkerData.RepresentedBy.Rotation, ((Vehicle)MarkerData.RepresentedBy).PrimaryColor, ((Vehicle)MarkerData.RepresentedBy).SecondaryColor); } else if (MarkerData.RepresentedBy is Ped && !PlayerSpawnOpen && !IsPlacingObjective) { CreatePed(MarkerData.RepresentedBy.Model, MarkerData.RepresentedBy.Position - new Vector3(0, 0, 1f), MarkerData.RepresentedBy.Heading); } else if (MarkerData.RepresentedBy is Ped && PlayerSpawnOpen && !IsPlacingObjective) { CreateSpawnpoint(MarkerData.RepresentedBy.Model, MarkerData.RepresentedBy.Position - new Vector3(0, 0, 1f), MarkerData.RepresentedBy.Heading); } else if (MarkerData.RepresentedBy is Ped && !PlayerSpawnOpen && IsPlacingObjective) { CreatePedObjective(MarkerData.RepresentedBy.Model, MarkerData.RepresentedBy.Position - new Vector3(0, 0, 1f), MarkerData.RepresentedBy.Heading); } else if (MarkerData.RepresentedBy is Object && PlacedWeaponHash == 0 && !IsPlacingObjective && !ObjectiveMarkerId.HasValue) { CreateObject(MarkerData.RepresentedBy.Model, MarkerData.RepresentedBy.Position, MarkerData.RepresentedBy.Rotation); } else if (MarkerData.RepresentedBy is Object && PlacedWeaponHash != 0 && !IsPlacingObjective && !ObjectiveMarkerId.HasValue) { CreatePickup(PlacedWeaponHash, MarkerData.RepresentedBy.Position, MarkerData.RepresentedBy.Rotation); } else if (MarkerData.RepresentedBy is Object && PlacedWeaponHash != 0 && IsPlacingObjective && !ObjectiveMarkerId.HasValue) { CreatePickupObjective(PlacedWeaponHash, MarkerData.RepresentedBy.Position, MarkerData.RepresentedBy.Rotation); } else if (MarkerData.RepresentedBy is Object && PlacedWeaponHash == 0 && IsPlacingObjective && ObjectiveMarkerId.HasValue && _selectedMarker == null) { CreateCheckpoint(MarkerData.RepresentedBy.Position + new Vector3(0,0,MarkerData.HeightOffset), Color.FromArgb(100, Color.Yellow.R, Color.Yellow.G, Color.Yellow.B), new Vector3(1, 1, 1)); } } else if (_hoveringEntity != null && _hoveringEntity.IsValid() && Game.IsControlJustPressed(0, GameControl.Attack) && (MarkerData.RepresentedBy == null || !MarkerData.RepresentedBy.IsValid()) && _propertiesMenu == null) { var type = GetEntityType(_hoveringEntity); // TODO: Properties if (type == EntityType.NormalActor) { CloseAllMenus(); DisableControlEnabling = true; EnableBasicMenuControls = true; var newMenu = new ActorPropertiesMenu(); var actor = CurrentMission.Actors.FirstOrDefault(o => o.GetEntity().Handle.Value == _hoveringEntity.Handle.Value); newMenu.BuildFor(actor); newMenu.OnMenuClose += sender => { _missionMenu.Visible = true; menuDirty = true; RingData.Color = Color.Gray; DisableControlEnabling = false; EnableBasicMenuControls = false; }; newMenu.Visible = true; _propertiesMenu = newMenu; } else if (type == EntityType.Spawnpoint) { CloseAllMenus(); DisableControlEnabling = true; EnableBasicMenuControls = true; var newMenu = new SpawnpointPropertiesMenu(); var actor = CurrentMission.Spawnpoints.FirstOrDefault(o => o.GetEntity().Handle.Value == _hoveringEntity.Handle.Value); newMenu.BuildFor(actor); newMenu.OnMenuClose += sender => { _missionMenu.Visible = true; menuDirty = true; RingData.Color = Color.Gray; DisableControlEnabling = false; EnableBasicMenuControls = false; }; newMenu.Visible = true; _propertiesMenu = newMenu; } else if (type == EntityType.ObjectiveActor) { CloseAllMenus(); DisableControlEnabling = true; EnableBasicMenuControls = true; var newMenu = new ActorObjectivePropertiesMenu(); var actor = CurrentMission.Objectives.FirstOrDefault(o => { var act = o as SerializableActorObjective; return act?.GetPed().Handle.Value == _hoveringEntity.Handle.Value; }); newMenu.BuildFor((SerializableActorObjective)actor); newMenu.OnMenuClose += sender => { _missionMenu.Visible = true; menuDirty = true; RingData.Color = Color.Gray; DisableControlEnabling = false; EnableBasicMenuControls = false; }; newMenu.Visible = true; _propertiesMenu = newMenu; } else if(type == EntityType.NormalVehicle) { CloseAllMenus(); DisableControlEnabling = true; EnableBasicMenuControls = true; var newMenu = new VehiclePropertiesMenu(); var actor = CurrentMission.Vehicles.FirstOrDefault(o => o.GetEntity().Handle.Value == _hoveringEntity.Handle.Value); newMenu.BuildFor(actor); newMenu.OnMenuClose += sender => { _missionMenu.Visible = true; menuDirty = true; RingData.Color = Color.Gray; DisableControlEnabling = false; EnableBasicMenuControls = false; }; newMenu.Visible = true; _propertiesMenu = newMenu; } else if (type == EntityType.ObjectiveVehicle) { CloseAllMenus(); DisableControlEnabling = true; EnableBasicMenuControls = true; var newMenu = new VehicleObjectivePropertiesMenu(); var actor = CurrentMission.Objectives.OfType<SerializableVehicleObjective>() .FirstOrDefault(o => o.GetVehicle().Handle.Value == _hoveringEntity.Handle.Value); newMenu.BuildFor(actor); newMenu.OnMenuClose += sender => { _missionMenu.Visible = true; menuDirty = true; RingData.Color = Color.Gray; DisableControlEnabling = false; EnableBasicMenuControls = false; }; newMenu.Visible = true; _propertiesMenu = newMenu; } else if (type == EntityType.NormalObject) { CloseAllMenus(); DisableControlEnabling = true; EnableBasicMenuControls = true; var newMenu = new ObjectPropertiesMenu(); var actor = CurrentMission.Objects.FirstOrDefault(o => o.GetEntity().Handle.Value == _hoveringEntity.Handle.Value); newMenu.BuildFor(actor); newMenu.OnMenuClose += sender => { _missionMenu.Visible = true; menuDirty = true; RingData.Color = Color.Gray; DisableControlEnabling = false; EnableBasicMenuControls = false; }; newMenu.Visible = true; _propertiesMenu = newMenu; } else if (type == EntityType.NormalPickup) { CloseAllMenus(); DisableControlEnabling = true; EnableBasicMenuControls = true; var newMenu = new PickupPropertiesMenu(); var actor = CurrentMission.Pickups.FirstOrDefault(o => o.GetEntity().Handle.Value == _hoveringEntity.Handle.Value); newMenu.BuildFor(actor); newMenu.OnMenuClose += sender => { _missionMenu.Visible = true; menuDirty = true; RingData.Color = Color.Gray; DisableControlEnabling = false; EnableBasicMenuControls = false; }; newMenu.Visible = true; _propertiesMenu = newMenu; } else if (type == EntityType.ObjectivePickup) { CloseAllMenus(); DisableControlEnabling = true; EnableBasicMenuControls = true; var newMenu = new PickupObjectivePropertiesMenu(); var actor = CurrentMission.Objectives.OfType<SerializablePickupObjective>() .FirstOrDefault(o => o.GetObject().Handle.Value == _hoveringEntity.Handle.Value); newMenu.BuildFor(actor); newMenu.OnMenuClose += sender => { _missionMenu.Visible = true; menuDirty = true; RingData.Color = Color.Gray; DisableControlEnabling = false; EnableBasicMenuControls = false; }; newMenu.Visible = true; _propertiesMenu = newMenu; } } else if (_selectedMarker != null && Game.IsControlJustPressed(0, GameControl.Attack) && (MarkerData.RepresentedBy == null || !MarkerData.RepresentedBy.IsValid()) && _propertiesMenu == null) { CloseAllMenus(); DisableControlEnabling = true; EnableBasicMenuControls = true; var newMenu = new MarkerPropertiesMenu(); newMenu.BuildFor(_selectedMarker); newMenu.OnMenuClose += sender => { _missionMenu.Visible = true; menuDirty = true; RingData.Color = Color.Gray; DisableControlEnabling = false; EnableBasicMenuControls = false; }; newMenu.Visible = true; _propertiesMenu = newMenu; } else if (MarkerData.RepresentedBy != null && MarkerData.RepresentedBy.IsValid() && _hoveringEntity != null && _hoveringEntity.IsValid() && Game.IsControlJustPressed(0, GameControl.CellphoneSelect)) { var type = GetEntityType(_hoveringEntity); if (_hoveringEntity.IsVehicle() && MarkerData.RepresentedBy.IsVehicle()) { foreach (var ped in ((Vehicle) _hoveringEntity).Occupants) { var pedType = GetEntityType(ped); if (pedType == EntityType.NormalActor) { CurrentMission.Actors.First(o => o.GetEntity().Handle.Value == ped.Handle.Value) .SpawnInVehicle = false; } else if (pedType == EntityType.Spawnpoint) { CurrentMission.Spawnpoints.First(o => o.GetEntity().Handle.Value == ped.Handle.Value) .SpawnInVehicle = false; } else if (pedType == EntityType.ObjectiveActor) { ((SerializableActorObjective) CurrentMission.Objectives.First(o => { var p = o as SerializableActorObjective; return p?.GetPed().Handle.Value == ped.Handle.Value; })).SpawnInVehicle = false; } } if (type == EntityType.NormalVehicle) { CurrentMission.Vehicles.Remove( CurrentMission.Vehicles.FirstOrDefault( o => o.GetEntity().Handle.Value == _hoveringEntity.Handle.Value)); } else if (type == EntityType.ObjectiveVehicle) { var myVeh = ((SerializableVehicleObjective) CurrentMission.Objectives.First(o => { var p = o as SerializableVehicleObjective; return p?.GetVehicle().Handle.Value == _hoveringEntity.Handle.Value; })); CurrentMission.Objectives.Remove(myVeh); } _hoveringEntity.Delete(); if (MarkerData.RepresentedBy != null && MarkerData.RepresentedBy.IsValid()) MarkerData.RepresentedBy.Opacity = 1f; MarkerData.HeadingOffset = 0f; RingData.Color = Color.MediumPurple; _hoveringEntity = null; } else if (_hoveringEntity.IsVehicle() && MarkerData.RepresentedBy.IsPed()) { int? possibleSeat = ((Vehicle) _hoveringEntity).GetFreeSeatIndex(); if (possibleSeat.HasValue) { var newPed = CreatePed(MarkerData.RepresentedBy.Model, MarkerData.RepresentedBy.Position, MarkerData.RepresentedBy.Heading); ((Ped) newPed.GetEntity()).WarpIntoVehicle((Vehicle) _hoveringEntity, possibleSeat.Value); newPed.SpawnInVehicle = true; newPed.VehicleSeat = possibleSeat.Value; } } else if (MarkerData.RepresentedBy.IsPed() && type == EntityType.NormalActor) { CurrentMission.Actors.Remove( CurrentMission.Actors.FirstOrDefault( o => o.GetEntity().Handle.Value == _hoveringEntity.Handle.Value)); _hoveringEntity.Delete(); if (MarkerData.RepresentedBy != null && MarkerData.RepresentedBy.IsValid()) MarkerData.RepresentedBy.Opacity = 1f; MarkerData.HeadingOffset = 0f; RingData.Color = Color.MediumPurple; _hoveringEntity = null; } else if (MarkerData.RepresentedBy.IsPed() && type == EntityType.Spawnpoint) { CurrentMission.Spawnpoints.Remove( CurrentMission.Spawnpoints.FirstOrDefault( o => o.GetEntity().Handle.Value == _hoveringEntity.Handle.Value)); _hoveringEntity.Delete(); if (MarkerData.RepresentedBy != null && MarkerData.RepresentedBy.IsValid()) MarkerData.RepresentedBy.Opacity = 1f; MarkerData.HeadingOffset = 0f; RingData.Color = Color.MediumPurple; _hoveringEntity = null; } else if (_hoveringEntity.IsPed() && MarkerData.RepresentedBy.IsPed() && type == EntityType.ObjectiveActor) { CurrentMission.Objectives.Remove( CurrentMission.Objectives.FirstOrDefault(m => { var o = m as SerializableActorObjective; return o?.GetPed().Handle.Value == _hoveringEntity.Handle.Value; })); _hoveringEntity.Delete(); if (MarkerData.RepresentedBy != null && MarkerData.RepresentedBy.IsValid()) MarkerData.RepresentedBy.Opacity = 1f; MarkerData.HeadingOffset = 0f; RingData.Color = Color.MediumPurple; _hoveringEntity = null; } else if (_hoveringEntity.IsObject() && MarkerData.RepresentedBy.IsObject() && PlacedWeaponHash == 0 && !IsPlacingObjective) { CurrentMission.Objects.Remove( CurrentMission.Objects.FirstOrDefault( o => o.GetEntity().Handle.Value == _hoveringEntity.Handle.Value)); _hoveringEntity.Delete(); if (MarkerData.RepresentedBy != null && MarkerData.RepresentedBy.IsValid()) MarkerData.RepresentedBy.Opacity = 1f; MarkerData.HeadingOffset = 0f; RingData.Color = Color.MediumPurple; _hoveringEntity = null; } else if (_hoveringEntity.IsObject() && MarkerData.RepresentedBy.IsObject() && PlacedWeaponHash != 0 && !IsPlacingObjective) { CurrentMission.Pickups.Remove( CurrentMission.Pickups.FirstOrDefault( o => o.GetEntity().Handle.Value == _hoveringEntity.Handle.Value)); _hoveringEntity.Delete(); if (MarkerData.RepresentedBy != null && MarkerData.RepresentedBy.IsValid()) MarkerData.RepresentedBy.Opacity = 1f; MarkerData.HeadingOffset = 0f; RingData.Color = Color.MediumPurple; _hoveringEntity = null; } else if (_hoveringEntity.IsObject() && MarkerData.RepresentedBy.IsObject() && PlacedWeaponHash != 0 && IsPlacingObjective) { CurrentMission.Objectives.Remove( CurrentMission.Objectives.FirstOrDefault(o => { var d = o as SerializablePickupObjective; return d?.GetObject().Handle.Value == _hoveringEntity.Handle.Value; })); _hoveringEntity.Delete(); if (MarkerData.RepresentedBy != null && MarkerData.RepresentedBy.IsValid()) MarkerData.RepresentedBy.Opacity = 1f; MarkerData.HeadingOffset = 0f; RingData.Color = Color.MediumPurple; _hoveringEntity = null; } } if (MarkerData.RepresentedBy != null && MarkerData.RepresentedBy.IsValid() && _selectedMarker != null && Game.IsControlJustPressed(0, GameControl.CellphoneSelect)) { CurrentMission.Objectives.Remove(_selectedMarker); _selectedMarker = null; } #endregion DrawInstructionalButtonsScaleform(); }
public void BuildFor(SerializableData.SerializableVehicle veh) { Clear(); #region SpawnAfter { var item = new MenuListItem("Spawn After Objective", StaticData.StaticLists.NumberMenu, veh.SpawnAfter); item.OnListChanged += (sender, index) => { veh.SpawnAfter = index; }; AddItem(item); } #endregion #region RemoveAfter { var item = new MenuListItem("Remove After Objective", StaticData.StaticLists.RemoveAfterList, veh.RemoveAfter); item.OnListChanged += (sender, index) => { veh.RemoveAfter = index; }; AddItem(item); } #endregion // TODO: Change NumberMenu to max num of objectives in mission #region Health { var listIndex = veh.Health == 0 ? StaticData.StaticLists.VehicleHealthChoses.FindIndex(n => n == (dynamic)1000) : StaticData.StaticLists.VehicleHealthChoses.FindIndex(n => n == (dynamic)veh.Health); var item = new MenuListItem("Health", StaticData.StaticLists.VehicleHealthChoses, listIndex); item.OnListChanged += (sender, index) => { int newAmmo = int.Parse(((MenuListItem)sender).IndexToItem(index).ToString(), CultureInfo.InvariantCulture); veh.Health = newAmmo; }; AddItem(item); } #endregion #region FailOnDeath { var item = new MenuCheckboxItem("Mission Fail On Death", veh.FailMissionOnDeath); item.CheckboxEvent += (sender, @checked) => { veh.FailMissionOnDeath = @checked; }; AddItem(item); } #endregion #region Passengers { var item = new NativeMenuItem("Occupants"); AddItem(item); if (((Vehicle)veh.GetEntity()).HasOccupants) { var newMenu = new UIMenu("", "OCCUPANTS", new Point(0, -107)); newMenu.MouseControlsEnabled = false; newMenu.SetBannerType(new ResRectangle()); var occupants = ((Vehicle)veh.GetEntity()).Occupants; for (int i = 0; i < occupants.Length; i++) { var ped = occupants[i]; var type = Editor.GetEntityType(ped); if (type == Editor.EntityType.NormalActor) { var act = Editor.CurrentMission.Actors.FirstOrDefault(a => a.GetEntity().Handle.Value == ped.Handle.Value); if (act == null) { continue; } var routedItem = new NativeMenuItem(i == 0 ? "Driver" : "Passenger #" + i); routedItem.Activated += (sender, selectedItem) => { Editor.DisableControlEnabling = true; Editor.EnableBasicMenuControls = true; var propMenu = new ActorPropertiesMenu(); propMenu.BuildFor(act); propMenu.MenuItems[2].Enabled = false; propMenu.OnMenuClose += _ => { newMenu.Visible = true; }; newMenu.Visible = false; propMenu.Visible = true; GameFiber.StartNew(delegate { while (propMenu.Visible) { propMenu.ProcessControl(); propMenu.Draw(); propMenu.Process(); GameFiber.Yield(); } }); }; newMenu.AddItem(routedItem); } else if (type == Editor.EntityType.ObjectiveActor) { var act = Editor.CurrentMission.Objectives .OfType <SerializableActorObjective>() .FirstOrDefault(a => a.GetPed().Handle.Value == ped.Handle.Value); if (act == null) { continue; } var routedItem = new NativeMenuItem(i == 0 ? "Objective Driver" : "Objective Passenger #" + i); routedItem.Activated += (sender, selectedItem) => { Editor.DisableControlEnabling = true; Editor.EnableBasicMenuControls = true; var propMenu = new ActorObjectivePropertiesMenu(); propMenu.BuildFor(act); propMenu.MenuItems[2].Enabled = false; propMenu.OnMenuClose += _ => { newMenu.Visible = true; }; newMenu.Visible = false; propMenu.Visible = true; GameFiber.StartNew(delegate { while (propMenu.Visible) { propMenu.ProcessControl(); propMenu.Draw(); propMenu.Process(); GameFiber.Yield(); } }); }; newMenu.AddItem(routedItem); } } BindMenuToItem(newMenu, item); newMenu.RefreshIndex(); Children.Add(newMenu); } else { item.Enabled = false; } } #endregion RefreshIndex(); }
public void BuildFor(SerializableData.SerializableVehicle veh) { Clear(); #region SpawnAfter { var item = new UIMenuListItem("Spawn After Objective", StaticData.StaticLists.NumberMenu, veh.SpawnAfter); item.OnListChanged += (sender, index) => { veh.SpawnAfter = index; }; AddItem(item); } #endregion #region RemoveAfter { var item = new UIMenuListItem("Remove After Objective", StaticData.StaticLists.RemoveAfterList, veh.RemoveAfter); item.OnListChanged += (sender, index) => { veh.RemoveAfter = index; }; AddItem(item); } #endregion // TODO: Change NumberMenu to max num of objectives in mission #region Health { var listIndex = veh.Health == 0 ? StaticData.StaticLists.VehicleHealthChoses.FindIndex(n => n == (dynamic)1000) : StaticData.StaticLists.VehicleHealthChoses.FindIndex(n => n == (dynamic)veh.Health); var item = new UIMenuListItem("Health", StaticData.StaticLists.VehicleHealthChoses, listIndex); item.OnListChanged += (sender, index) => { int newAmmo = int.Parse(((UIMenuListItem)sender).IndexToItem(index).ToString(), CultureInfo.InvariantCulture); veh.Health = newAmmo; }; AddItem(item); } #endregion #region FailOnDeath { var item = new UIMenuCheckboxItem("Mission Fail On Death", veh.FailMissionOnDeath); item.CheckboxEvent += (sender, @checked) => { veh.FailMissionOnDeath = @checked; }; AddItem(item); } #endregion #region Passengers { var item = new UIMenuItem("Occupants"); AddItem(item); if (((Vehicle)veh.GetEntity()).HasOccupants) { var newMenu = new UIMenu("", "OCCUPANTS", new Point(0, -107)); newMenu.MouseControlsEnabled = false; newMenu.SetBannerType(new ResRectangle()); var occupants = ((Vehicle)veh.GetEntity()).Occupants; for (int i = 0; i < occupants.Length; i++) { var ped = occupants[i]; var type = Editor.GetEntityType(ped); if (type == Editor.EntityType.NormalActor) { var act = Editor.CurrentMission.Actors.FirstOrDefault(a => a.GetEntity().Handle.Value == ped.Handle.Value); if (act == null) continue; var routedItem = new UIMenuItem(i == 0 ? "Driver" : "Passenger #" + i); routedItem.Activated += (sender, selectedItem) => { Editor.DisableControlEnabling = true; Editor.EnableBasicMenuControls = true; var propMenu = new ActorPropertiesMenu(); propMenu.BuildFor(act); propMenu.MenuItems[2].Enabled = false; propMenu.OnMenuClose += _ => { newMenu.Visible = true; }; newMenu.Visible = false; propMenu.Visible = true; GameFiber.StartNew(delegate { while (propMenu.Visible) { propMenu.ProcessControl(); propMenu.Draw(); propMenu.Process(); GameFiber.Yield(); } }); }; newMenu.AddItem(routedItem); } else if (type == Editor.EntityType.ObjectiveActor) { var act = Editor.CurrentMission.Objectives .OfType<SerializableActorObjective>() .FirstOrDefault(a => a.GetPed().Handle.Value == ped.Handle.Value); if (act == null) continue; var routedItem = new UIMenuItem(i == 0 ? "Objective Driver" : "Objective Passenger #" + i); routedItem.Activated += (sender, selectedItem) => { Editor.DisableControlEnabling = true; Editor.EnableBasicMenuControls = true; var propMenu = new ActorObjectivePropertiesMenu(); propMenu.BuildFor(act); propMenu.MenuItems[2].Enabled = false; propMenu.OnMenuClose += _ => { newMenu.Visible = true; }; newMenu.Visible = false; propMenu.Visible = true; GameFiber.StartNew(delegate { while (propMenu.Visible) { propMenu.ProcessControl(); propMenu.Draw(); propMenu.Process(); GameFiber.Yield(); } }); }; newMenu.AddItem(routedItem); } } BindMenuToItem(newMenu, item); newMenu.RefreshIndex(); Children.Add(newMenu); } else { item.Enabled = false; } } #endregion RefreshIndex(); }
public void BuildFor(SerializableData.Objectives.SerializableVehicleObjective actor) { Clear(); #region SpawnAfter { var item = new MenuListItem("Spawn After Objective", StaticData.StaticLists.NumberMenu, actor.SpawnAfter); item.OnListChanged += (sender, index) => { actor.SpawnAfter = index; }; AddItem(item); } #endregion #region ObjectiveIndex { var item = new MenuListItem("Objective Index", StaticData.StaticLists.ObjectiveIndexList, actor.ActivateAfter); item.OnListChanged += (sender, index) => { actor.ActivateAfter = index; if (string.IsNullOrEmpty(Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter])) { MenuItems[2].SetRightBadge(NativeMenuItem.BadgeStyle.Alert); MenuItems[2].SetRightLabel(""); } else { var title = Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter]; MenuItems[2].SetRightLabel(title.Length > 20 ? title.Substring(0, 20) + "..." : title); MenuItems[2].SetRightBadge(NativeMenuItem.BadgeStyle.None); } }; AddItem(item); } #endregion // TODO: Change NumberMenu to max num of objectives in mission // Note: if adding items before weapons, change item order in VehiclePropertiesMenu #region Objective Name { var item = new NativeMenuItem("Objective Name"); if (string.IsNullOrEmpty(Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter])) { item.SetRightBadge(NativeMenuItem.BadgeStyle.Alert); } else { var title = Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter]; item.SetRightLabel(title.Length > 20 ? title.Substring(0, 20) + "..." : title); } item.Activated += (sender, selectedItem) => { GameFiber.StartNew(delegate { ResetKey(Common.MenuControls.Back); Editor.DisableControlEnabling = true; string title = Util.GetUserInput(); if (string.IsNullOrEmpty(title)) { item.SetRightBadge(NativeMenuItem.BadgeStyle.Alert); Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter] = ""; SetKey(Common.MenuControls.Back, GameControl.CellphoneCancel, 0); Editor.DisableControlEnabling = false; return; } item.SetRightBadge(NativeMenuItem.BadgeStyle.None); title = Regex.Replace(title, "-=", "~"); Editor.CurrentMission.ObjectiveNames[actor.ActivateAfter] = title; selectedItem.SetRightLabel(title.Length > 20 ? title.Substring(0, 20) + "..." : title); SetKey(Common.MenuControls.Back, GameControl.CellphoneCancel, 0); }); }; AddItem(item); } #endregion #region Health { var listIndex = actor.Health == 0 ? StaticData.StaticLists.VehicleHealthChoses.FindIndex(n => n == (dynamic)1000) : StaticData.StaticLists.VehicleHealthChoses.FindIndex(n => n == (dynamic)actor.Health); var item = new MenuListItem("Health", StaticData.StaticLists.VehicleHealthChoses, listIndex); item.OnListChanged += (sender, index) => { int newAmmo = int.Parse(((MenuListItem)sender).IndexToItem(index).ToString(), CultureInfo.InvariantCulture); actor.Health = newAmmo; }; AddItem(item); } #endregion #region Passengers { var item = new NativeMenuItem("Occupants"); AddItem(item); if (((Vehicle)actor.GetVehicle()).HasOccupants) { var newMenu = new UIMenu("", "OCCUPANTS", new Point(0, -107)); newMenu.MouseControlsEnabled = false; newMenu.SetBannerType(new ResRectangle()); var occupants = ((Vehicle)actor.GetVehicle()).Occupants; for (int i = 0; i < occupants.Length; i++) { var ped = occupants[i]; var type = Editor.GetEntityType(ped); if (type == Editor.EntityType.NormalActor) { var act = Editor.CurrentMission.Actors.FirstOrDefault(a => a.GetEntity().Handle.Value == ped.Handle.Value); if (act == null) { continue; } var routedItem = new NativeMenuItem(i == 0 ? "Driver" : "Passenger #" + i); routedItem.Activated += (sender, selectedItem) => { Editor.DisableControlEnabling = true; Editor.EnableBasicMenuControls = true; var propMenu = new ActorPropertiesMenu(); propMenu.BuildFor(act); propMenu.MenuItems[2].Enabled = false; propMenu.OnMenuClose += _ => { newMenu.Visible = true; }; newMenu.Visible = false; propMenu.Visible = true; GameFiber.StartNew(delegate { while (propMenu.Visible) { propMenu.ProcessControl(); propMenu.Draw(); propMenu.Process(); GameFiber.Yield(); } }); }; newMenu.AddItem(routedItem); } else if (type == Editor.EntityType.ObjectiveActor) { var act = Editor.CurrentMission.Objectives .OfType <SerializableActorObjective>() .FirstOrDefault(a => a.GetPed().Handle.Value == ped.Handle.Value); if (act == null) { continue; } var routedItem = new NativeMenuItem(i == 0 ? "Objective Driver" : "Objective Passenger #" + i); routedItem.Activated += (sender, selectedItem) => { Editor.DisableControlEnabling = true; Editor.EnableBasicMenuControls = true; var propMenu = new ActorObjectivePropertiesMenu(); propMenu.BuildFor(act); propMenu.MenuItems[2].Enabled = false; propMenu.OnMenuClose += _ => { newMenu.Visible = true; }; newMenu.Visible = false; propMenu.Visible = true; GameFiber.StartNew(delegate { while (propMenu.Visible) { propMenu.ProcessControl(); propMenu.Draw(); propMenu.Process(); GameFiber.Yield(); } }); }; newMenu.AddItem(routedItem); } } BindMenuToItem(newMenu, item); newMenu.RefreshIndex(); Children.Add(newMenu); } else { item.Enabled = false; } } #endregion #region Show Health Bar { var item = new MenuCheckboxItem("Show Healthbar", actor.ShowHealthBar); AddItem(item); item.CheckboxEvent += (sender, @checked) => { actor.ShowHealthBar = @checked; MenuItems[6].Enabled = @checked; }; } #endregion #region Bar Name { var item = new NativeMenuItem("Healthbar Label"); AddItem(item); if (!actor.ShowHealthBar) { item.Enabled = false; } if (string.IsNullOrEmpty(actor.Name) && actor.ShowHealthBar) { actor.Name = "HEALTH"; } if (actor.ShowHealthBar) { item.SetRightLabel(actor.Name.Length > 20 ? actor.Name.Substring(0, 20) : actor.Name); } item.Activated += (sender, selectedItem) => { GameFiber.StartNew(delegate { ResetKey(Common.MenuControls.Back); Editor.DisableControlEnabling = true; string title = Util.GetUserInput(); if (string.IsNullOrEmpty(title)) { actor.Name = "HEALTH"; item.SetRightLabel(actor.Name.Length > 20 ? actor.Name.Substring(0, 20) : actor.Name); SetKey(Common.MenuControls.Back, GameControl.CellphoneCancel, 0); Editor.DisableControlEnabling = false; return; } title = Regex.Replace(title, "-=", "~"); actor.Name = title; item.SetRightLabel(actor.Name.Length > 20 ? actor.Name.Substring(0, 20) : actor.Name); SetKey(Common.MenuControls.Back, GameControl.CellphoneCancel, 0); }); }; } #endregion #region Objective Type { var item = new MenuListItem("Objective Type", StaticData.StaticLists.ObjectiveTypeList, actor.ObjectiveType); item.OnListChanged += (sender, index) => { actor.ObjectiveType = index; }; AddItem(item); } #endregion RefreshIndex(); }