private IContentCachedPrefab Get() { if (_cachedPrefab == null || _cachedPrefab.IsDisposed()) { _cachedPrefab = Content.Get(Path, typeof(IContentCachedPrefab)) as IContentCachedPrefab; } return(_cachedPrefab); }
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); } } }
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); }