void OnDrawGizmos() { var sceneCameraTransform = SceneView.GetAllSceneCameras()[0].transform; EnsurePreviewObjectExists(PrimitiveType.Quad, ref previewRect); foreach (EntityData e in ActiveEntities .Where(x => x.Material) .OrderBy(x => Vector3.Dot(sceneCameraTransform.position - x.Position, sceneCameraTransform.forward))) { Color color = e.Material.Albedo ? e.Material.Albedo.MainColor : Color.white; if (e.Material.Emission) color += e.Material.Emission.MainColor; switch (e.Material.Type) { case MaterialType.Dielectric: color = color.GetAlphaReplaced(0.5f); break; case MaterialType.ProbabilisticVolume: color = color.GetAlphaReplaced(max(e.Material.Density, 0.5f)); break; default: color = color.GetAlphaReplaced(1); break; } Gizmos.color = color; if (e.Selected) Gizmos.color = Color.yellow; switch (e.Type) { case EntityType.Rect: Gizmos.matrix = Matrix4x4.TRS(e.Position, e.Rotation, float3(e.RectData.Size, 1)); Gizmos.DrawMesh(previewRect.sharedMesh, 0); Gizmos.matrix = Matrix4x4.identity; break; case EntityType.Sphere: Gizmos.DrawSphere(e.Position, e.SphereData.Radius); break; case EntityType.Box: Gizmos.matrix = Matrix4x4.TRS(e.Position, e.Rotation, Vector3.one); Gizmos.DrawCube(Vector3.zero, e.BoxData.Size); Gizmos.matrix = Matrix4x4.identity; break; } } #if BVH if (previewBvh && bvhNodeBuffer.IsCreated) { float silverRatio = (sqrt(5.0f) - 1.0f) / 2.0f; (AxisAlignedBoundingBox _, int Depth)[] subBounds = BvhRoot->GetAllSubBounds().ToArray();
public override void Update(GameTime gameTime) { _bullets.AddRange(ActiveEntities.Where(e => _bulletMapper.Has(e))); _aliens.AddRange(ActiveEntities.Where(e => _alienMapper.Has(e))); foreach (var alien in _aliens) { var alienSprite = _animatedSpriteMapper.Get(alien); var alienTransform = _transformMapper.Get(alien); var alienRect = alienSprite.GetBoundingRectangle(alienTransform); var destroyAlien = false; foreach (var bullet in _bullets) { if (_bulletsToDestroy.Contains(bullet)) { continue; } var bulletSprite = _spriteMapper.Get(bullet); var bulletTransform = _transformMapper.Get(bullet); var bulletRect = bulletSprite.GetBoundingRectangle(bulletTransform); if (bulletRect.Intersects(alienRect)) { destroyAlien = true; _bulletsToDestroy.Add(bullet); break; } } if (destroyAlien) { DestroyEntity(alien); } } foreach (var destroy in _bulletsToDestroy) { DestroyEntity(destroy); } _bulletsToDestroy.Clear(); _bullets.Clear(); _aliens.Clear(); }
public int GetChickenTypeCnt(ChickenType chickenType) { return(ActiveEntities .Where(id => _chickenInfoMapper.Get(id).ChickenType.Equals(chickenType)) .Count()); }