Example #1
0
        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);
        }
Example #3
0
        private static DanmakuPrefab CreateRuntimeInstance(DanmakuPrefab prefab)
        {
            DanmakuPrefab runtime = Instantiate(prefab);

            runtime.enabled = true;
            runtime.gameObject.SetActive(true);
            return(runtime);
        }
Example #4
0
 internal DanmakuPrefab GetRuntime()
 {
     if (runtime == null)
     {
         runtime = CreateRuntimeInstance(this);
     }
     return(runtime);
 }
Example #5
0
        /// <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> ());
        }
Example #6
0
        /// <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);
        }
Example #7
0
        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);
 }
Example #14
0
 public FireBuilder Fire(DanmakuPrefab prefab)
 {
     return(new FireBuilder(prefab, this));
 }
        public static FireBuilder ConstructFire(DanmakuPrefab prefab)
        {
            var builder = new FireBuilder(prefab);

            return(builder);
        }