Esempio n. 1
0
 /// <inheritdoc/>
 public override void OnVariantSelected(SourceVariant variant)
 {
     selectedVariant = variant as ControllableVariant;
     if (selectedVariant != null)
     {
         ScenarioManager.Instance.GetExtension <InputManager>().StartDraggingElement(this);
     }
 }
Esempio n. 2
0
        /// <summary>
        /// Method that instantiates new <see cref="ScenarioControllable"/> and initializes it with selected variant
        /// </summary>
        /// <param name="variant">Controllable variant which model should be instantiated</param>
        /// <param name="initialPolicy">Policy that will be applied to the new instance, default variant policy will be applied if this parameter is null</param>
        /// <returns><see cref="ScenarioControllable"/> initialized with selected variant</returns>
        public ScenarioControllable GetControllableInstance(ControllableVariant variant, List <ControlAction> initialPolicy = null)
        {
            var newGameObject = new GameObject(ElementTypeName);

            newGameObject.transform.SetParent(transform);
            var scenarioControllable = newGameObject.AddComponent <ScenarioControllable>();

            if (initialPolicy == null)
            {
                initialPolicy = new List <ControlAction>();
                var defaultPolicy = variant.controllable.DefaultControlPolicy;
                if (defaultPolicy != null && defaultPolicy.Count > 0)
                {
                    initialPolicy.AddRange(variant.controllable.DefaultControlPolicy);
                }
            }

            SetupNewControllable(scenarioControllable);
            scenarioControllable.Setup(this, variant, initialPolicy);
            return(scenarioControllable);
        }
Esempio n. 3
0
        /// <summary>
        /// Initialization method
        /// </summary>
        /// <param name="progress">Progress value of the initialization</param>
        /// <returns>Task</returns>
        public Task Initialize(IProgress <float> progress)
        {
            if (IsInitialized)
            {
                progress.Report(1.0f);
                return(Task.CompletedTask);
            }
            inputManager = ScenarioManager.Instance.GetExtension <InputManager>();

            //Load referenced controllables
            foreach (var controllablePrefab in controllablesPrefabs)
            {
                if (controllablePrefab == null)
                {
                    continue;
                }
                var controllable = controllablePrefab.GetComponent <IControllable>();
                if (controllable == null)
                {
                    continue;
                }
                var variant = new ControllableVariant();
                controllable.Spawned = true;
                variant.Setup(controllable.GetType().Name, controllable);
                Variants.Add(variant);
            }
            foreach (var editPanelsPrefab in customEditPanelsPrefabs)
            {
                if (editPanelsPrefab == null)
                {
                    continue;
                }
                var editPanel = editPanelsPrefab.GetComponent <IControllableEditPanel>();
                if (editPanel == null)
                {
                    continue;
                }
                editPanel = Instantiate(editPanelsPrefab, transform).GetComponent <IControllableEditPanel>();
                editPanel.PanelObject.SetActive(false);
                CustomEditPanels.Add(editPanel);
            }

            //Import controllables from config
            var controllables      = Config.Controllables;
            var controllablesCount = controllables.Count;
            var i = 0;

            foreach (var controllable in controllables)
            {
                if (Variants.Any(v => ((ControllableVariant)v).controllable.GetType() == controllable.GetType()))
                {
                    continue;
                }
                var variant = new ControllableVariant();
                Debug.Log($"Loading controllable {controllable.Key} from the config.");
                controllable.Value.Spawned = true;
                variant.Setup(controllable.Key, controllable.Value);
                Variants.Add(variant);
                var assets = Config.ControllableAssets[controllable.Value];
                foreach (var asset in assets)
                {
                    var editPanel = asset.GetComponent <IControllableEditPanel>();
                    //Add edit panel if same type is not registered yet
                    if (editPanel != null && customEditPanelsPrefabs.Any(panel => panel.GetType() == editPanel.GetType()))
                    {
                        CustomEditPanels.Add(editPanel);
                    }
                }
                progress.Report((float)++i / controllablesCount);
            }

            //Let all the custom edit panels edit initialized controllable variants
            foreach (var variant in Variants)
            {
                var controllableVariant = variant as ControllableVariant;
                if (controllableVariant == null)
                {
                    continue;
                }
                foreach (var customEditPanel in CustomEditPanels)
                {
                    if (customEditPanel.EditedType == controllableVariant.controllable.GetType())
                    {
                        customEditPanel.InitializeVariant(controllableVariant);
                    }
                }
            }

            IsInitialized = true;
            return(Task.CompletedTask);
        }