Exemplo n.º 1
0
 /// <inheritdoc/>
 public override void StartEditing(TriggerEditPanel triggerPanel, ScenarioTrigger trigger,
                                   TriggerEffector effector)
 {
     parentPanel           = triggerPanel;
     editedTrigger         = trigger;
     editedEffector        = (WaitingPointEffector)effector;
     radiusInputField.text = editedEffector.PointRadius.ToString("F");
 }
Exemplo n.º 2
0
 /// <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;
 }
Exemplo n.º 3
0
        /// <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);
 }
Exemplo n.º 5
0
 /// <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();
 }
Exemplo n.º 6
0
 /// <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;
 }
Exemplo n.º 7
0
        /// <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);
 }
Exemplo n.º 9
0
        /// <summary>
        /// Deinitialization
        /// </summary>
        public void Deinitialize()
        {
            if (!isInitialized)
            {
                return;
            }
            if (selectedTrigger != null)
            {
                selectedTrigger.Trigger.EffectorAdded   -= TriggerOnEffectorAdded;
                selectedTrigger.Trigger.EffectorRemoved -= TriggerOnEffectorRemoved;
                selectedTrigger = null;
            }

            isInitialized = false;
        }
Exemplo n.º 10
0
        /// <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);
        }
Exemplo n.º 12
0
        /// <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();
        }
Exemplo n.º 13
0
 /// <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;
 }
Exemplo n.º 14
0
 /// <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;
 }
Exemplo n.º 15
0
 /// <inheritdoc/>
 public override void StartEditing(TriggerEditPanel triggerPanel, ScenarioTrigger trigger, TriggerEffector effector)
 {
     parentPanel    = triggerPanel;
     editedEffector = effector;
     title.text     = editedEffector.TypeName;
 }
Exemplo n.º 16
0
 /// <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)
 {
 }
Exemplo n.º 17
0
 /// <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)
 {
 }
Exemplo n.º 18
0
 /// <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);
Exemplo n.º 19
0
 /// <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)
 {
 }
Exemplo n.º 21
0
 /// <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();
 }
Exemplo n.º 22
0
 /// <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;
 }
Exemplo n.º 24
0
 /// <inheritdoc/>
 public override void EffectorRemovedFromTrigger(ScenarioTrigger trigger, TriggerEffector effector)
 {
     trigger.RemoveEffectorObject(effector, zoneVisualization.name);
 }
Exemplo n.º 25
0
 /// <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);
 }
Exemplo n.º 26
0
 /// <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();
 }
Exemplo n.º 27
0
 /// <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;
 }
Exemplo n.º 28
0
 /// <inheritdoc/>
 public override void StartEditing(TriggerEditPanel triggerPanel, ScenarioTrigger trigger, TriggerEffector effector)
 {
     parentPanel          = triggerPanel;
     editedEffector       = (WaitTimeEffector)effector;
     valueInputField.text = editedEffector.Value.ToString("F");
 }