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(); }
public IconButton(IGameWindow window, Camera<OrthographicProjection> camera, Vector2 position, IRenderable renderable, Key? hotkey = null) : base(window, camera, position) { Renderable = renderable; IsSelected = false; Hotkey = hotkey; }
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; }
/// <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; }
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; }
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>(); }
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); }
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>(); }
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"); }
public ItemStackButton(IGameWindow window, Camera<OrthographicProjection> camera, Vector2 position, ItemStack itemStack, Key? hotkey = null) : base(window, camera, position, null, hotkey) { ItemStack = itemStack; }
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); }
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); } }
public BaseButton(IGameWindow window, Camera<OrthographicProjection> camera, Vector2 position) : base(window, camera, position) { }
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(); }
public static void MakeCamera(Camera3D camera, GameObject followedObject) { Camera c = new Camera(camera, followedObject); instance = c; }
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; }