Ejemplo n.º 1
0
		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();
        }
Ejemplo n.º 3
0
 public int GetChickenTypeCnt(ChickenType chickenType)
 {
     return(ActiveEntities
            .Where(id => _chickenInfoMapper.Get(id).ChickenType.Equals(chickenType))
            .Count());
 }