public Danmaku FireCurved(DanmakuPrefab prefab, Vector2 location, DynamicFloat rotation, DynamicFloat speed, DynamicFloat angularSpeed, CoordinateSystem coordSys = CoordinateSystem.View, DanmakuModifier modifier = null) { if (TargetField == null) { TargetField = this; } Vector2 position = TargetField.WorldPoint(location, coordSys); if (modifier == null) { Danmaku danmaku = Danmaku.GetInactive(prefab, position, rotation); danmaku.Field = this; danmaku.Activate(); danmaku.Speed = speed; danmaku.AngularSpeed = angularSpeed; return(danmaku); } else { FireData temp = new FireData(); temp.Prefab = prefab; temp.Speed = speed; temp.AngularSpeed = angularSpeed; temp.Field = this; modifier.Initialize(temp); modifier.OnFire(position, rotation); return(null); } }
public static T MatchPrefab <T> (this T danmakus, DanmakuPrefab prefab) where T : class, IEnumerable <Danmaku> { if (danmakus == null) { return(null); } var arrayTest = danmakus as Danmaku[]; if (arrayTest != null) { for (int i = 0; i < arrayTest.Length; i++) { Danmaku danmaku = arrayTest[i]; if (danmaku != null) { danmaku.MatchPrefab(prefab); } } } else { foreach (var danmaku in danmakus) { if (danmaku != null) { danmaku.MatchPrefab(prefab); } } } return(danmakus); }
private static DanmakuPrefab CreateRuntimeInstance(DanmakuPrefab prefab) { DanmakuPrefab runtime = Instantiate(prefab); runtime.enabled = true; runtime.gameObject.SetActive(true); return(runtime); }
internal DanmakuPrefab GetRuntime() { if (runtime == null) { runtime = CreateRuntimeInstance(this); } return(runtime); }
/// <summary> /// Gets all <see cref="DanmakU.DanmakuSet"/>s associated with a prefab. /// </summary> /// <param name="prefab">the original prefab.</param> /// <returns>an enumeration of all associated sets.</returns> public IEnumerable <DanmakuSet> GetAllSets(DanmakuPrefab prefab) { var config = prefab.GetRendererConfig(); RendererGroup group; if (RendererGroups.TryGetValue(config, out group)) { return(group.Sets); } return(Enumerable.Empty <DanmakuSet> ()); }
/// <summary> /// Create a <see cref="DanmakU.DanmakuSet"/> from a prefab. /// </summary> /// <param name="prefab">the base prefab to create a set from.</param> /// <returns>the created DanmakuSet.</returns> protected DanmakuSet CreateSet(DanmakuPrefab prefab) { var pool = new DanmakuPool(prefab.DefaultPoolSize); pool.ColliderRadius = prefab.ColliderRadius; var set = DanmakuManager.Instance.CreateDanmakuSet(prefab.GetRendererConfig(), pool); (OwnedDanmakuSets ?? (OwnedDanmakuSets = new List <DanmakuSet> ())).Add(set); set.AddModifiers(prefab.GetModifiers()); return(set); }
public Danmaku SpawnDanmaku(DanmakuPrefab bulletType, Vector2 location, DynamicFloat rotation, CoordinateSystem coordSys = CoordinateSystem.View) { if (TargetField == null) { TargetField = this; } Danmaku bullet = Danmaku.GetInactive(bulletType, TargetField.WorldPoint(location, coordSys), rotation); bullet.Field = TargetField; bullet.Activate(); return(bullet); }
public void MatchPrefab(DanmakuPrefab prefab) { if (prefab == null) { Debug.LogError("Tried to match a null prefab"); return; } if (this.prefab != prefab) { this.prefab = prefab; if (is_active) { runtime.Remove(this); runtime = prefab.GetRuntime(); runtime.Add(this); } else { runtime = prefab.GetRuntime(); } Vector2 scale = runtime.cachedScale; colliderType = runtime.collisionType; switch (colliderType) { default: case ColliderType.Point: colliderSize = Vector2.zero; sizeSquared = 0; break; case ColliderType.Circle: colliderSize = runtime.colliderSize * scale.Max(); break; case ColliderType.Line: colliderSize = runtime.colliderSize; break; } sizeSquared = colliderSize.y * colliderSize.y; colliderOffset = scale.Hadamard2(runtime.colliderOffset); } Tag = runtime.cachedTag; Color = runtime.Color; Scale = 1f; layer = runtime.cachedLayer; colliderMask = collisionMask [layer]; AddController(runtime.ExtraControllers); }
public void Copy(FireData other) { Prefab = other.Prefab; Field = other.Field; Position = other.Position; Rotation = other.Rotation; Speed = other.Speed; AngularSpeed = other.AngularSpeed; Controller = other.Controller; Damage = other.Damage; Group = other.Group; }
public static Danmaku GetInactive(DanmakuPrefab danmakuType, Vector2 position, DynamicFloat rotation) { if (danmakuPool == null) { new GameObject("Danmaku Game Controller").AddComponent <DanmakuGameController>(); } Danmaku danmaku = danmakuPool.Get(); danmaku.MatchPrefab(danmakuType); danmaku.position.x = position.x; danmaku.position.y = position.y; danmaku.Rotation = rotation; return(danmaku); }
internal FireBuilder(DanmakuPrefab prefab, DanmakuField field = null) { if (prefab == null) { throw new ArgumentNullException(); } data = new FireData() { Prefab = prefab, Field = field }; modifiers = new List <DanmakuModifier>(); }
public static void GetInactive(DanmakuPrefab danmakuType, Vector2 position, DynamicFloat rotation, Danmaku[] prealloc) { if (danmakuPool == null) { new GameObject("Danmaku Game Controller").AddComponent <DanmakuGameController>(); } danmakuPool.Get(prealloc); for (int i = 0; i < prealloc.Length; i++) { Danmaku danmaku = prealloc[i]; danmaku.MatchPrefab(danmakuType); danmaku.position.x = position.x; danmaku.position.y = position.y; danmaku.Rotation = rotation.Value; } }
public static Danmaku[] GetInactive(DanmakuPrefab danmakuType, Vector2 position, DynamicFloat rotation, DynamicInt count) { if (danmakuPool == null) { new GameObject("Danmaku Game Controller").AddComponent <DanmakuGameController>(); } Danmaku[] array = new Danmaku[count]; danmakuPool.Get(array); for (int i = 0; i < array.Length; i++) { Danmaku danmaku = array[i]; danmaku.MatchPrefab(danmakuType); danmaku.position.x = position.x; danmaku.position.y = position.y; danmaku.Rotation = rotation.Value; } return(array); }
public FireBuilder Fire(DanmakuPrefab prefab) { return(new FireBuilder(prefab, this)); }
public static FireBuilder ConstructFire(DanmakuPrefab prefab) { var builder = new FireBuilder(prefab); return(builder); }