Пример #1
0
		public void Render(Camera<OrthographicProjection> camera, PlayerEntity player, IChunkAccess chunk)
		{
			var topLeft = Vector3.Transform(new Vector3(camera.Projection.Left, camera.Projection.Top, 0), camera.ModelViewMatrix.Inverted());
			var bottomRight = Vector3.Transform(new Vector3(camera.Projection.Right, camera.Projection.Bottom, 0), camera.ModelViewMatrix.Inverted());

			var minX = (int)Math.Floor(topLeft.X);
			var maxX = (int)Math.Ceiling(bottomRight.X);
			var minY = (int)Math.Floor(topLeft.Y);
			var maxY = (int)Math.Ceiling(bottomRight.Y);

			_tessellator.BindColor(Color.White);

			_tessellator.LoadIdentity();
			_tessellator.Begin(PrimitiveType.Quads);

			RenderLayer(_tessellator, chunk, ChunkLayer.Background, minX, maxX, minY, maxY);
			RenderLayer(_tessellator, chunk, ChunkLayer.Floor, minX, maxX, minY, maxY);

			RenderEntities(_tessellator, chunk, minX, maxX, minY, maxY);

			RenderLayer(_tessellator, chunk, ChunkLayer.Blocking, minX, maxX, minY, maxY);
			RenderLayer(_tessellator, chunk, ChunkLayer.Ceiling, minX, maxX, minY, maxY);

			var fov = CalculateFieldOfView(_tessellator, camera, player, chunk, minX, maxX, minY, maxY);
			RenderFieldOfView(fov, _tessellator, camera, chunk, minX, maxX, minY, maxY);

			_tessellator.End();
		}
Пример #2
0
		public IconButton(IGameWindow window, Camera<OrthographicProjection> camera, Vector2 position, IRenderable renderable, Key? hotkey = null)
			: base(window, camera, position)
		{
			Renderable = renderable;
			IsSelected = false;
			Hotkey = hotkey;
		}
Пример #3
0
		public Label(IGameWindow window, Camera<OrthographicProjection> camera, Vector2 position, string text)
			: base(window, camera, position)
		{
			Text = text;
			TextColor = COLOR_TEXT;
			Shadowed = SHADOWED;
			ShadowColor = COLOR_SHADOW;
		}
Пример #4
0
		/// <param name="closeOnFocus">Should this state close when the game receives input focus?</param>
		public PauseState(GameStateManager manager)
			: base(manager)
		{
			var viewport = new Viewport(0, 0, manager.GameWindow.Width, manager.GameWindow.Height);
			_tessellator = new VertexBufferTessellator() { Mode = VertexTessellatorMode.Render };
			_hudCamera = Camera.CreateOrthographicCamera(viewport);
			_hudCamera.Projection.OrthographicSize = viewport.Height / 2;
		}
Пример #5
0
		public Border(IGameWindow window, Camera<OrthographicProjection> camera, Vector2 position, int tileWidth, int tileHeight)
			: base(window, camera, position)
		{
			_tileWidth = tileWidth;
			_tileHeight = tileHeight;

			BackgroundColor = COLOR_BACKGROUND;
			BorderColor = COLOR_BORDER;
		}
Пример #6
0
		public LoadWorldGameState(GameStateManager manager)
			: base(manager)
		{
			var viewport = new Viewport(0, 0, manager.GameWindow.Width, manager.GameWindow.Height);
			_hudCamera = Camera.CreateOrthographicCamera(viewport);
			_hudCamera.Projection.OrthographicSize = viewport.Height / 2;
			_tessellator = new VertexBufferTessellator() { Mode = VertexTessellatorMode.Render };

			_progressMessages = new ConcurrentStack<string>();
		}
Пример #7
0
		public UIElement(IGameWindow window, Camera<OrthographicProjection> camera, Vector2 position)
			: base(window)
		{
			ClickStarted = false;

			Camera = camera;
			HasMouseHover = false;
			CanHaveMouseHover = true;

			Bounds = new RectangleF(position.X, position.Y, 0, 0);
		}
Пример #8
0
		public UIManager(IGameWindow window, Viewport viewport, WorldManager worldManager)
		{
			_window = window;

			_worldManager = worldManager;

			_children = new List<UIElement>();

			_hudCamera = Camera.CreateOrthographicCamera(viewport);
			_hudCamera.Projection.OrthographicSize = viewport.Height / 2;

			//_tessellator = new ImmediateModeTessellator();
			_tessellator = new VertexBufferTessellator() { Mode = VertexTessellatorMode.Render };

			ToolbarItems = new List<ItemStackButton>();
		}
Пример #9
0
		private int[,] CalculateFieldOfView(ITessellator tessellator, Camera<OrthographicProjection> camera, PlayerEntity player, IChunkAccess chunk, int minX, int maxX, int minY, int maxY)
		{
			int[,] fovMap = new int[maxY - minY + 1, maxX - minX + 1];
			var originX = player.Position.X + player.Size / 2.0f;
			var originY = player.Position.Y + player.Size / 2.0f;

			var considered = new List<Vector2I>();
			//for (var angle = 0.0f; angle < 360.0f; angle += (9.0f - distance)) // hit more angles as you move further out
			for (var angle = 0.0f; angle < 360.0f; angle += 1.0f)
			{
				for (var distance = 0.0f; distance < chunk.AmbientLightLevel * 2.0f; distance++)
				{
					var x = (int)Math.Floor(originX + distance * Math.Cos(OpenTK.MathHelper.DegreesToRadians(angle)));
					var y = (int)Math.Floor(originY + distance * Math.Sin(OpenTK.MathHelper.DegreesToRadians(angle)));
					var vector = new Vector2I(y - minY, x - minX);
					if (!considered.Contains(vector))
					{
						considered.Add(vector);

						if (CommonCore.Math.MathHelper.IsInRange(y - minY, 0, maxY - minY + 1) && CommonCore.Math.MathHelper.IsInRange(x - minX, 0, maxX - minX + 1))
						{
							//var alpha = (8.0f - distance) / 8.0f;
							var alpha = 1.0f / Math.Pow((distance + 1) / chunk.AmbientLightLevel, 2);

							fovMap[y - minY, x - minX] = OpenTK.MathHelper.Clamp((int)(fovMap[y - minY, x - minX] + alpha * 255.0f), 0, 255);
						}
						else
						{
							break;
						}
					}

					if (chunk[ChunkLayer.Blocking, x, y] != 0)
					{
						break;
					}
				}
			}
			return fovMap;
		}
        public HandController(Camera camera, Scene scene, ContentState state)
        {
            this.camera = camera;

            hand = ObjectComposer.Compose(scene, state)
                .AppendName("hand")
                .AppendMesh("hand")
                .AppendMaterialTextures("hand_map", "hand_map")
                .AppendWorld(Vector3.Zero,Vector3.Zero, Vector3.One * 0.02f)
                .AppendDummyCollider()
                .FinishAndAddToScene();

            int animationIndex = hand.Model.GetAnimationController().AnimationIndex("Take 001");
            hand.Model.GetAnimationController().PlayLoopingAnimation(animationIndex);

            bonesController = new HandAnimator(hand.Model.ModelData);
            hand.BoneModifier = bonesController;

            curseParticles = new ParticleSystem(state.Application.UpdateManager);
            TestScene._instance.AddDrawable(new BillboardParticles3D(curseParticles));
            curseParticles.ParticleSystemData = TestScene._instance.state.Load<ParticleSystemData>("Particles/Spark");
            curseParticlesTriger = curseParticles.GetTriggerByName("burst");

        }
Пример #11
0
		public ItemStackButton(IGameWindow window, Camera<OrthographicProjection> camera, Vector2 position, ItemStack itemStack, Key? hotkey = null)
			: base(window, camera, position, null, hotkey)
		{
			ItemStack = itemStack;
		}
Пример #12
0
		public TextButton(IGameWindow window, Camera<OrthographicProjection> camera, Vector2 position, string text)
			: base(window, camera, position)
		{
			Text = text;
		}
 public static void MakeController(Camera camera, Scene currentScene, ContentState state)
 {
     instance = new HandController(camera, currentScene, state);
 }
Пример #14
0
		public void Update(TimeSpan elapsed, Camera<OrthographicProjection> camera, Entity player)
		{
			//GetChunk(player).Update(elapsed, this);

			// Update every chunk the player is touching.  This doesn't seem to do what I'm hoping for.  It's probably good anyway though.

			//var center = new OpenTK.Vector2(player.Position.X + player.Size / 2, player.Position.Y + player.Size / 2);

			//var topLeft = new OpenTK.Vector2(player.Position.X - player.Size / 2, player.Position.Y - player.Size / 2);
			//var bottomRight = new OpenTK.Vector2(topLeft.X + player.Size, topLeft.Y + player.Size);

			//GetChunk(player).Update(elapsed, this);

			var topLeft = OpenTK.Vector3.Transform(new OpenTK.Vector3(camera.Projection.Left, camera.Projection.Top, 0), camera.ModelViewMatrix.Inverted());
			var bottomRight = OpenTK.Vector3.Transform(new OpenTK.Vector3(camera.Projection.Right, camera.Projection.Bottom, 0), camera.ModelViewMatrix.Inverted());

			var minX = (int)Math.Floor(topLeft.X);
			var maxX = (int)Math.Ceiling(bottomRight.X);
			var minY = (int)Math.Floor(topLeft.Y);
			var maxY = (int)Math.Ceiling(bottomRight.Y);

			var chunks = new[]
			{
				GetChunk(minX, minY),
				GetChunk(minX, maxY),
				GetChunk(maxX, maxY),
				GetChunk(maxX, minY)
			}.Distinct();

			foreach (var chunk in chunks)
			{
				chunk.Update(elapsed, this);
			}
		}
Пример #15
0
		public BaseButton(IGameWindow window, Camera<OrthographicProjection> camera, Vector2 position)
			: base(window, camera, position)
		{
		}
Пример #16
0
		private void RenderFieldOfView(int[,] fovMap, ITessellator tessellator, Camera<OrthographicProjection> camera, IChunkAccess chunk, int minX, int maxX, int minY, int maxY)
		{
			tessellator.PushTransform();
			tessellator.Translate(0, 0, -1 * (int)ChunkLayer.Lights);
			tessellator.BindTexture(null);

			for (var y = 0; y < fovMap.GetLength(0); y++)
			{
				for (var x = 0; x < fovMap.GetLength(1); x++)
				{
					if (fovMap[y, x] == 255)
					{
						continue;
					}

					tessellator.BindColor(Color.FromArgb(255 - fovMap[y, x], 0, 0, 0));
					tessellator.Translate(minX + x, minY + y);
					tessellator.AddPoint(0, 0);
					tessellator.AddPoint(0, 1);
					tessellator.AddPoint(1, 1);
					tessellator.AddPoint(1, 0);
					tessellator.Translate(-(minX + x), -(minY + y));
				}
			}

			tessellator.PopTransform();
		}
Пример #17
0
 public static void MakeCamera(Camera3D camera, GameObject followedObject)
 {
     Camera c = new Camera(camera, followedObject);
     instance = c;
 }
Пример #18
0
		public InventorySlotButton(IGameWindow window, Camera<OrthographicProjection> camera, Vector2 position, Func<InventoryContainer> inventory, int slotIndex, Key? hotkey = null)
			: base(window, camera, position, null, hotkey)
		{
			_inventory = inventory;
			_slotIndex = slotIndex;
		}