/// <inheritdoc/> public override void StartEditing(TriggerEditPanel triggerPanel, ScenarioTrigger trigger, TriggerEffector effector) { parentPanel = triggerPanel; editedTrigger = trigger; editedEffector = (WaitingPointEffector)effector; radiusInputField.text = editedEffector.PointRadius.ToString("F"); }
/// <inheritdoc/> public override void InitializeEffector(ScenarioTrigger trigger, TriggerEffector effector) { if (!(effector is WaitTimeEffector waitTimeEffector)) { throw new ArgumentException($"{GetType().Name} received effector of invalid type {effector.GetType().Name}."); } waitTimeEffector.Value = 0.0f; }
/// <summary> /// Constructor /// </summary> /// <param name="targetTrigger">Scenario trigger that was changed</param> public UndoTriggerCopy(ScenarioTrigger targetTrigger) { this.targetTrigger = targetTrigger; var gameObject = Object.Instantiate(targetTrigger.gameObject, ScenarioManager.Instance.GetExtension <ScenarioUndoManager>().transform); backupTrigger = gameObject.GetComponent <ScenarioTrigger>(); backupTrigger.CopyProperties(targetTrigger); }
/// <inheritdoc/> public override void InitializeEffector(ScenarioTrigger trigger, TriggerEffector effector) { if (!(effector is ControlTriggerEffector triggerEffector)) { throw new ArgumentException( $"{GetType().Name} received effector of invalid type {effector.GetType().Name}."); } triggerEffector.ControllablesUIDs.Clear(); triggerEffector.ControlPolicy = new List <ControlAction>(); policyEditPanel.Setup(null, triggerEffector.ControlPolicy); }
/// <inheritdoc/> public override void Setup(ScenarioTrigger trigger, TriggerEffector effector) { base.Setup(trigger, effector); waitingPointEffector = effector as WaitingPointEffector; if (waitingPointEffector == null) { throw new ArgumentException( $"{GetType().Name} received effector of invalid type {effector.GetType().Name}."); } Refresh(); }
/// <inheritdoc/> public override void InitializeEffector(ScenarioTrigger trigger, TriggerEffector effector) { if (!(effector is WaitingPointEffector waitingPointEffector)) { throw new ArgumentException( $"{GetType().Name} received effector of invalid type {effector.GetType().Name}."); } //Put the activator point nearby the trigger waitingPointEffector.ActivatorPoint = trigger.transform.position + zoneVisualization.transform.localPosition; waitingPointEffector.PointRadius = 2.0f; }
/// <summary> /// Method called when another scenario trigger has been selected /// </summary> /// <param name="newTrigger">Scenario trigger that has been selected</param> public void OnSelectedNewTrigger(ScenarioTrigger newTrigger) { if (selectedTrigger != null) { selectedTrigger.Trigger.EffectorAdded -= TriggerOnEffectorAdded; selectedTrigger.Trigger.EffectorRemoved -= TriggerOnEffectorRemoved; selectedTrigger = null; } foreach (var effectorPanel in visiblePanels) { effectorPanel.Value.FinishEditing(); prefabsPools.ReturnInstance(effectorPanel.Value.gameObject); } visiblePanels.Clear(); gameObject.SetActive(newTrigger != null); if (newTrigger == null) { return; } selectedTrigger = newTrigger; selectedTrigger.Trigger.EffectorAdded += TriggerOnEffectorAdded; selectedTrigger.Trigger.EffectorRemoved += TriggerOnEffectorRemoved; var effectors = selectedTrigger.Trigger.Effectors; //Get available effectors that supports this agent and their instance is not added to the trigger yet availableEffectorTypes = allEffectors.Where(newEffector => //Check if multiple effectors can be added, or there is no effector of this type (effectorPanelsPrefabs[newEffector.TypeName].AllowMany || effectors.All(addedEffector => addedEffector.GetType() != newEffector.GetType())) && //Check if effector is supported for selected agent type !newEffector.UnsupportedAgentTypes.Contains(selectedTrigger.TargetAgentType)).ToList(); effectorSelectDropdown.options.Clear(); effectorSelectDropdown.AddOptions( availableEffectorTypes.Select(effector => effector.TypeName).ToList()); for (var i = 0; i < effectors.Count; i++) { var effector = effectors[i]; var effectorPanel = prefabsPools.GetInstance(effectorPanelsPrefabs[effector.TypeName].gameObject) .GetComponent <EffectorEditPanel>(); effectorPanel.StartEditing(this, selectedTrigger, effector); effectorPanel.transform.SetParent(transform); effectorPanel.gameObject.SetActive(true); visiblePanels.Add(effector, effectorPanel); } UnityUtilities.LayoutRebuild(transform as RectTransform); }
/// <inheritdoc/> public override void FinishEditing() { if (this == null) { return; } editedTrigger.Moved -= OnTriggerMoved; editedTrigger = null; policyEditPanel.PolicyUpdated -= PolicyEditPanelOnPolicyUpdated; linkedControllables.Clear(); policyEditPanel.Setup(null, null); }
/// <summary> /// Deinitialization /// </summary> public void Deinitialize() { if (!isInitialized) { return; } if (selectedTrigger != null) { selectedTrigger.Trigger.EffectorAdded -= TriggerOnEffectorAdded; selectedTrigger.Trigger.EffectorRemoved -= TriggerOnEffectorRemoved; selectedTrigger = null; } isInitialized = false; }
/// <summary> /// Copies selected trigger /// </summary> public void CopyEffectors() { if (copiedTrigger != null) { Destroy(copiedTrigger.gameObject); } var clonedTriggerObject = Instantiate(selectedTrigger.gameObject, ScenarioManager.Instance.GetExtension <ScenarioWaypointsManager>().transform); clonedTriggerObject.SetActive(false); copiedTrigger = clonedTriggerObject.GetComponent <ScenarioTrigger>(); copiedTrigger.CopyProperties(selectedTrigger); ScenarioManager.Instance.logPanel.EnqueueInfo( $"Copied {selectedTrigger.Trigger.Effectors.Count} trigger effectors."); }
/// <inheritdoc/> public override void StartEditing(TriggerEditPanel triggerPanel, ScenarioTrigger trigger, TriggerEffector effector) { parentPanel = triggerPanel; editedEffector = (ControlTriggerEffector)effector; policyEditPanel.PolicyUpdated += PolicyEditPanelOnPolicyUpdated; editedTrigger = trigger; editedTrigger.Moved += OnTriggerMoved; var manager = ScenarioManager.Instance.GetExtension <ScenarioControllablesManager>(); //Link to scenario controllables for (var i = 0; i < editedEffector.ControllablesUIDs.Count; i++) { var controllableUID = editedEffector.ControllablesUIDs[i]; var controllableAdded = false; for (var index = 0; index < manager.Controllables.Count; index++) { var controllable = manager.Controllables[index]; if (controllable.Uid != controllableUID) { continue; } linkedControllables.Add(controllable); controllableAdded = true; break; } if (!controllableAdded) { ScenarioManager.Instance.logPanel.EnqueueWarning( $"Could not find controllable with uid: {controllableUID} in the scenario, which edited {nameof(ControlTriggerEffector)} was using."); } } //Setup LineRenderer lineRenderer.positionCount = linkedControllables.Count + 1; lineRenderer.SetPosition(0, trigger.transform.position + LineRendererPositionOffset); for (var i = 0; i < linkedControllables.Count; i++) { var controllable = linkedControllables[i]; lineRenderer.SetPosition(i + 1, controllable.transform.position + LineRendererPositionOffset); } policyEditPanel.Setup(linkedControllables.Count > 0 ? linkedControllables[0].Variant.controllable : null, editedEffector.ControlPolicy); }
/// <inheritdoc/> public override void EffectorAddedToTrigger(ScenarioTrigger trigger, TriggerEffector effector) { if (!(effector is WaitingPointEffector waitingPointEffector)) { throw new ArgumentException( $"{GetType().Name} received effector of invalid type {effector.GetType().Name}."); } var zone = trigger.GetEffectorObject(effector, zoneVisualization.name); if (zone != null) { return; } zone = trigger.AddEffectorObject(effector, zoneVisualization.name, zoneVisualization); zone.transform.position = waitingPointEffector.ActivatorPoint; zone.transform.localScale = Vector3.one * waitingPointEffector.PointRadius; zone.gameObject.SetActive(true); var zoneComponent = zone.GetComponent <WaitingPointZone>(); zoneComponent.Refresh(); }
/// <summary> /// Adds trigger to this agent /// </summary> /// <param name="trigger">Trigger that will be added to this agent</param> public void AddTrigger(ScenarioTrigger trigger) { triggers.Add(trigger); trigger.TargetAgentType = ParentAgent.Source.AgentType; }
/// <summary> /// Deserializes a trigger from the json data /// </summary> /// <param name="trigger">Trigger object to fill with effectors</param> /// <param name="triggerNode">Json data with a trigger</param> private void DeserializeTrigger(ScenarioTrigger trigger, JSONNode triggerNode) { trigger.Trigger = WaypointTrigger.DeserializeTrigger(triggerNode); trigger.TargetAgentType = ParentAgent.Type; }
/// <inheritdoc/> public override void StartEditing(TriggerEditPanel triggerPanel, ScenarioTrigger trigger, TriggerEffector effector) { parentPanel = triggerPanel; editedEffector = effector; title.text = editedEffector.TypeName; }
/// <summary> /// Notifies edit panel that the effector was added to the trigger /// </summary> /// <param name="trigger">Trigger that gained the new effector</param> /// <param name="effector">New effector added to the trigger</param> public virtual void EffectorAddedToTrigger(ScenarioTrigger trigger, TriggerEffector effector) { }
/// <summary> /// Notifies edit panel that the effector was removed from the trigger /// </summary> /// <param name="trigger">Trigger that lost the effector</param> /// <param name="effector">Effector removed from the trigger</param> public virtual void EffectorRemovedFromTrigger(ScenarioTrigger trigger, TriggerEffector effector) { }
/// <summary> /// Initializes panel for editing the selected effector /// </summary> /// <param name="triggerPanel">Parent trigger panel</param> /// <param name="trigger">Trigger being edited</param> /// <param name="effector">Trigger effector being edited</param> public abstract void StartEditing(TriggerEditPanel triggerPanel, ScenarioTrigger trigger, TriggerEffector effector);
/// <summary> /// Initializes effector with the default data /// </summary> /// <param name="trigger">Trigger that gained the new effector</param> /// <param name="effector">New effector added to the trigger</param> public abstract void InitializeEffector(ScenarioTrigger trigger, TriggerEffector effector);
/// <inheritdoc/> public override void InitializeEffector(ScenarioTrigger trigger, TriggerEffector effector) { }
/// <summary> /// Constructor /// </summary> /// <param name="trigger">Scenario trigger from which effector was removed</param> /// <param name="effector">Effector that was removed from the trigger</param> public UndoRemoveEffector(ScenarioTrigger trigger, TriggerEffector effector) { this.trigger = trigger; this.effector = effector; trigger.TryGetEffector(effector)?.Hide(); }
/// <summary> /// Removes trigger from this agent /// </summary> /// <param name="trigger">Trigger that will be removed from this agent</param> public void RemoveTrigger(ScenarioTrigger trigger) { triggers.Remove(trigger); }
/// <inheritdoc/> public override void StartEditing(TriggerEditPanel triggerPanel, ScenarioTrigger trigger, TriggerEffector effector) { parentPanel = triggerPanel; editedTrigger = effector; }
/// <inheritdoc/> public override void EffectorRemovedFromTrigger(ScenarioTrigger trigger, TriggerEffector effector) { trigger.RemoveEffectorObject(effector, zoneVisualization.name); }
/// <summary> /// Deserializes a trigger from the json data /// </summary> /// <param name="trigger">Trigger object to fill with effectors</param> /// <param name="triggerNode">Json data with a trigger</param> private static void DeserializeTrigger(ScenarioTrigger trigger, JSONNode triggerNode) { trigger.Trigger = WaypointTrigger.DeserializeTrigger(triggerNode); }
/// <summary> /// Constructor /// </summary> /// <param name="trigger">Scenario trigger that contains added effector</param> /// <param name="effector">Effector that was added to the trigger</param> public UndoAddEffector(ScenarioTrigger trigger, TriggerEffector effector) { this.trigger = trigger; this.effector = effector; trigger.TryGetEffector(effector)?.Show(); }
/// <summary> /// Setups the zone object with the data /// </summary> /// <param name="trigger">Parent trigger of this zone</param> /// <param name="effector">Parent effector of this zone</param> public virtual void Setup(ScenarioTrigger trigger, TriggerEffector effector) { this.trigger = trigger; this.effector = effector; }
/// <inheritdoc/> public override void StartEditing(TriggerEditPanel triggerPanel, ScenarioTrigger trigger, TriggerEffector effector) { parentPanel = triggerPanel; editedEffector = (WaitTimeEffector)effector; valueInputField.text = editedEffector.Value.ToString("F"); }