mirror of
https://github.com/sbrl/Nibriboard.git
synced 2018-01-10 21:33:49 +00:00
[client] Write ChunkCache renderer method renderVisible()
This commit is contained in:
parent
4e2a27df94
commit
5d716fe925
2 changed files with 73 additions and 2 deletions
|
@ -30,6 +30,38 @@ class Chunk
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
update(dt)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
render(canvas, context)
|
||||||
|
{
|
||||||
|
context.save();
|
||||||
|
|
||||||
|
for(let line of this.lines)
|
||||||
|
{
|
||||||
|
context.beginPath();
|
||||||
|
context.moveTo(
|
||||||
|
line.Points[0].x - this.chunkRef.x,
|
||||||
|
line.Points[0].y - this.chunkRef.y
|
||||||
|
);
|
||||||
|
for(let i = 1; i < line.Points.length; i++)
|
||||||
|
{
|
||||||
|
context.lineTo(
|
||||||
|
line.Points[i].x - this.chunkRef.x,
|
||||||
|
line.Points[i].y - this.chunkRef.y
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
context.lineWidth = line.Width;
|
||||||
|
context.strokeStyle = line.Colour;
|
||||||
|
context.stroke();
|
||||||
|
}
|
||||||
|
|
||||||
|
context.restore();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default Chunk;
|
export default Chunk;
|
||||||
|
|
|
@ -1,9 +1,13 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
|
import ChunkReference from './ChunkReference.js';
|
||||||
|
import Rectangle from './Utilities/Rectangle.js';
|
||||||
|
|
||||||
class ChunkCache
|
class ChunkCache
|
||||||
{
|
{
|
||||||
constructor()
|
constructor(inBoardWindow)
|
||||||
{
|
{
|
||||||
|
this.boardWindow = inBoardWindow;
|
||||||
this.cache = new Map();
|
this.cache = new Map();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,7 +20,42 @@ class ChunkCache
|
||||||
if(this.cache.contains(chunkData.chunkRef.toString()))
|
if(this.cache.contains(chunkData.chunkRef.toString()))
|
||||||
throw new Error("Error: We already have a chunk at that location stored.");
|
throw new Error("Error: We already have a chunk at that location stored.");
|
||||||
|
|
||||||
this.cache.set(chunkData.toString(), chunkData);
|
this.cache.set(chunkData.chunkRef.toString(), chunkData);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renders the specified area to the given canvas with the given context.
|
||||||
|
* @param {Rectangle} visibleArea The area to render.
|
||||||
|
* @param {number} chunkSize The size of the chunks on the current plane.
|
||||||
|
* @param {HTMLCanvasElement} canvas The canvas to draw on.
|
||||||
|
* @param {CanvasRenderingContext2D} context The rendering context to
|
||||||
|
* use to draw on the canvas.
|
||||||
|
*/
|
||||||
|
renderVisible(visibleArea, chunkSize, canvas, context)
|
||||||
|
{
|
||||||
|
context.save();
|
||||||
|
|
||||||
|
chunkArea = new Rectangle(
|
||||||
|
Math.floor(visibleArea.x / chunkSize) * chunkSize,
|
||||||
|
Math.floor(visibleArea.y / chunkSize) * chunkSize,
|
||||||
|
Math.floor((visibleArea.x + visibleArea.width) / chunkSize) * chunkSize,
|
||||||
|
Math.floor((visibleArea.y + visibleArea.height) / chunkSize) * chunkSize
|
||||||
|
);
|
||||||
|
|
||||||
|
for(let cx = chunkArea.x; cx <= chunkArea.x + chunkArea.width; cx += chunkSize)
|
||||||
|
{
|
||||||
|
for(let cy = chunkArea.y; cy <= chunkArea.y + chunkArea.height; cy += chunkSize)
|
||||||
|
{
|
||||||
|
let cChunk = new ChunkReference(
|
||||||
|
this.boardWindow.currentPlaneName,
|
||||||
|
cx, cy
|
||||||
|
);
|
||||||
|
let chunk = this.cache.get(cChunk.toString());
|
||||||
|
chunk.render(canvas, context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
context.restore();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue