Beispiel #1
0
 private IContentCachedPrefab Get()
 {
     if (_cachedPrefab == null || _cachedPrefab.IsDisposed())
     {
         _cachedPrefab = Content.Get(Path, typeof(IContentCachedPrefab)) as IContentCachedPrefab;
     }
     return(_cachedPrefab);
 }
Beispiel #2
0
        public static GameObject Instantiate(Rarity rarity)
        {
            IContentCachedPrefab[] all           = Content.GetAll <IContentCachedPrefab>(CONTENT_PATH);
            IContentCachedPrefab   defaultEffect = all.First(x => x.GetCache().GetComponent <RarityEffect>().Rarity == null);
            IContentCachedPrefab   fit           = all.FirstOrDefault(x => x.GetCache().GetComponent <RarityEffect>().Rarity?.Identifier == rarity.Identifier);

            return((fit ?? defaultEffect).Instantiate());
        }
        public TurretComponent Assemble(ObjectModel model, Transform parent, TurretAssembly assembly, AssemblyContext context)
        {
            IContentCachedPrefab component    = GetComponent(model.GetValue <string>("UniqueIdentifier"));
            ValueAssembler       assembler    = new ValueAssembler();
            GameObject           obj          = component.Instantiate();
            TurretComponent      newComponent = obj.GetComponent <TurretComponent>();

            if (parent != null)
            {
                obj.transform.SetParent(parent.transform);
                var position = (Vector2)assembler.Assemble(model.GetObject("LocalPosition"), typeof(Vector2), context);

                obj.transform.localPosition = (Vector3)position + Vector3.back * 0.1f;

                if (model.HasProperty("Angle"))
                {
                    obj.transform.localRotation = Quaternion.Euler(0f, 0f, model.GetValue <float>("Angle"));
                }
                if (model.HasProperty("Flipped"))
                {
                    if (model.GetValue <bool>("Flipped"))
                    {
                        newComponent.Flip();
                    }
                }

                TurretComponent parentComponent = parent.GetComponent <TurretComponent>();
                foreach (var point in newComponent.AttachmentPoints)
                {
                    AttachmentSlot slot = FindSlotForPoint(parentComponent.AttachmentSlots.GetSupportingPoints(point), point, obj.transform, parent.transform);
                    if (slot != null)
                    {
                        slot.Attach(newComponent);
                    }
                }
            }
            else
            {
                obj.transform.SetParent(assembly.transform);
                obj.transform.localPosition = Vector3.zero;
            }

            foreach (ValueModel child in model.GetArray("Children"))
            {
                Assemble(child as ObjectModel, newComponent.transform, assembly, context);
            }

            return(newComponent);
        }
        private void OnEnemyKill(IEnemy obj)
        {
            IContentCachedPrefab enemy = GetPreviousTier(obj.Identifier);

            if (enemy != null)
            {
                for (int i = 0; i < Clones; i++)
                {
                    GameObject newEnemyGO = enemy.Instantiate();
                    IEnemy     newEnemy   = newEnemyGO.GetComponent <IEnemy>();
                    newEnemy.Init((obj as Component).transform.position + (Vector3)UnityEngine.Random.insideUnitCircle, obj.Path, obj.WaveHandler);
                    newEnemy.PathIndex = obj.PathIndex;

                    newEnemy.WaveHandler.AddEnemy(newEnemy);
                }
            }
        }
Beispiel #5
0
        public void Display(WaveHandler handler, int amount, string enemyIdentifier)
        {
            _identifier = enemyIdentifier;
            IContentCachedPrefab enemy = Enemy.GetEnemy(_identifier);

            EnemyImage.sprite = Iconography.GenerateSprite(enemy.GetCache());

            _amount = amount;
            UpdateAmount();

            if (handler) // Bit janky but shut up
            {
                handler.OnEnemyKilled    += OnEnemyKilled;
                handler.OnEnemyFinished  += OnEnemyKilled;
                handler.OnAllEnemiesDone += OnWaveFinished;
            }
        }
        private void SpawnClone(IEnemy obj)
        {
            IContentCachedPrefab prefab = null;

            for (int i = 0; i < _enemies.Length; i++)
            {
                if (_enemyCache[i].Identifier == obj.Identifier)
                {
                    prefab = _enemies[i];
                }
            }

            GameObject enemyGO = prefab.Instantiate();
            Enemy      en      = obj as Enemy; // flawless naming

            IEnemy enemy = enemyGO.GetComponent <IEnemy>();

            enemy.Init(en.transform.position + (Vector3)UnityEngine.Random.insideUnitCircle, obj.Path, obj.WaveHandler);
            enemy.PathIndex = obj.PathIndex;
            enemy.WaveHandler.AddEnemy(enemy);
        }