public JobHandle UpdateDannmaku(DanmakuPool pool, JobHandle dependency) { var deltTime = Speed * Time.deltaTime; return(new ChangeColorOvertime(pool, deltTime). Schedule(pool.ActiveCount, DanmakuPool.kBatchSize, dependency)); }
internal DanmakuEnumerator(DanmakuPool pool, int start, int count) { this.pool = pool; this.start = start; this.end = start + count; index = -1; }
internal DanmakuSet CreateDanmakuSet(DanmakuRendererConfig config, DanmakuPool pool) { var set = new DanmakuSet(pool); var group = GetOrCreateRendererGroup(config); group.AddSet(set); return(set); }
public MoveDanmaku(DanmakuPool pool) { DeltaTime = Time.deltaTime; Positions = pool.Positions; Rotations = pool.Rotations; Speeds = pool.Speeds; AngularSpeeds = pool.AngularSpeeds; }
public CollideDanamku(DanmakuPool pool) { var radius = pool.ColliderRadius; Bounds = new Bounds2D(Vector2.zero, new Vector2(radius, radius)); Positions = pool.Positions; Collisions = pool.CollisionMasks; }
/// <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 BoundsCheckDanmaku(DanmakuPool pool) { DeltaTime = Time.deltaTime; Times = pool.Times; Positions = pool.Positions; var bounds = DanmakuManager.Instance.Bounds; min = bounds.Min; max = bounds.Max; }
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); } }
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); } } } } }
internal Danmaku(DanmakuPool pool, int index) { Pool = pool; Id = index; }
internal DanmakuSet(DanmakuPool pool) { Pool = pool; Modifiers = new List <IDanmakuModifier>(); }
public ChangeColorOvertime(DanmakuPool Pool, float deltTime) { _deltTime = deltTime; _colors = Pool.Colors; }