Esempio n. 1
0
        public JobHandle UpdateDannmaku(DanmakuPool pool, JobHandle dependency)
        {
            var deltTime = Speed * Time.deltaTime;

            return(new ChangeColorOvertime(pool, deltTime).
                   Schedule(pool.ActiveCount, DanmakuPool.kBatchSize, dependency));
        }
Esempio n. 2
0
 internal DanmakuEnumerator(DanmakuPool pool, int start, int count)
 {
     this.pool  = pool;
     this.start = start;
     this.end   = start + count;
     index      = -1;
 }
Esempio n. 3
0
        internal DanmakuSet CreateDanmakuSet(DanmakuRendererConfig config, DanmakuPool pool)
        {
            var set   = new DanmakuSet(pool);
            var group = GetOrCreateRendererGroup(config);

            group.AddSet(set);
            return(set);
        }
Esempio n. 4
0
 public MoveDanmaku(DanmakuPool pool)
 {
     DeltaTime     = Time.deltaTime;
     Positions     = pool.Positions;
     Rotations     = pool.Rotations;
     Speeds        = pool.Speeds;
     AngularSpeeds = pool.AngularSpeeds;
 }
Esempio n. 5
0
        public CollideDanamku(DanmakuPool pool)
        {
            var radius = pool.ColliderRadius;

            Bounds     = new Bounds2D(Vector2.zero, new Vector2(radius, radius));
            Positions  = pool.Positions;
            Collisions = pool.CollisionMasks;
        }
Esempio n. 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);
        }
Esempio n. 7
0
        public BoundsCheckDanmaku(DanmakuPool pool)
        {
            DeltaTime = Time.deltaTime;
            Times     = pool.Times;
            Positions = pool.Positions;

            var bounds = DanmakuManager.Instance.Bounds;

            min = bounds.Min;
            max = bounds.Max;
        }
Esempio n. 8
0
 public DestroyDanmaku(DanmakuPool pool)
 {
     ActiveCountArray = pool.activeCountArray;
     Times            = pool.Times;
     Positions        = pool.Positions;
     OldPositions     = pool.OldPositions;
     Rotations        = pool.Rotations;
     Times            = pool.Times;
     Speeds           = pool.Speeds;
     AngularSpeeds    = pool.AngularSpeeds;
     Colors           = pool.Colors;
 }
        internal static void Setup(int initial = standardStart, int spawn = standardSpawn, float angRes = 0.1f)
        {
            colliderMap   = new Dictionary <Collider2D, IDanmakuCollider[]> ();
            collisionMask = Util.CollisionLayers2D();
            danmakuPool   = new DanmakuPool(initial, spawn);
            invAngRes     = 1f / angRes;
            unitCircleMax = Mathf.CeilToInt(360f / angRes);
            float angle = 90f;

            unitCircle = new Vector2[unitCircleMax];
            for (int i = 0; i < unitCircleMax; i++)
            {
                angle        += angRes;
                unitCircle[i] = Util.OnUnitCircle(angle);
            }
        }
Esempio n. 10
0
        internal static unsafe void TestPoolCollisions(DanmakuPool pool)
        {
            var layersPtr = (int * )(pool.CollisionMasks.GetUnsafePtr());
            var count     = pool.ActiveCount;

            for (var i = 0; i < count; i++)
            {
                if (*layersPtr++ == 0)
                {
                    continue;
                }
                var layerMask   = pool.CollisionMasks[i];
                var oldPosition = pool.OldPositions[i];
                var direction   = pool.Positions[i] - oldPosition;
                var distance    = direction.magnitude;
                var hits        = Physics2D.CircleCastNonAlloc(oldPosition, pool.ColliderRadius, direction, raycastCache, distance, layerMask);
                if (hits <= 0)
                {
                    continue;
                }
                var danmaku = new Danmaku(pool, i);
                for (var j = 0; j < hits; j++)
                {
                    var collider = raycastCache[j].collider;
                    List <DanmakuCollider> danmakuColliders;
                    if (!ColliderMap.TryGetValue(collider, out danmakuColliders))
                    {
                        continue;
                    }
                    var collision = new DanmakuCollision
                    {
                        Danmaku    = danmaku,
                        RaycastHit = raycastCache[j]
                    };
                    foreach (var dCollider in danmakuColliders)
                    {
                        if (dCollider != null && dCollider.isActiveAndEnabled)
                        {
                            dCollider.AddDanmaku(collision);
                        }
                    }
                }
            }
        }
Esempio n. 11
0
 internal Danmaku(DanmakuPool pool, int index)
 {
     Pool = pool;
     Id   = index;
 }
Esempio n. 12
0
 internal DanmakuSet(DanmakuPool pool)
 {
     Pool      = pool;
     Modifiers = new List <IDanmakuModifier>();
 }
Esempio n. 13
0
 public ChangeColorOvertime(DanmakuPool Pool, float deltTime)
 {
     _deltTime = deltTime;
     _colors   = Pool.Colors;
 }