mirror of
				https://github.com/tobspr/shapez.io.git
				synced 2025-06-13 13:04:03 +00:00 
			
		
		
		
	Add belt rendering (very slow for now)
This commit is contained in:
		
							parent
							
								
									a71c0b8039
								
							
						
					
					
						commit
						e594b6a4a7
					
				@ -58,6 +58,27 @@ export class BeltPath {
 | 
			
		||||
        this.debug_checkIntegrity("constructor");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns whether this path can accept a new item
 | 
			
		||||
     * @returns {boolean}
 | 
			
		||||
     */
 | 
			
		||||
    canAcceptItem() {
 | 
			
		||||
        return this.spacingToFirstItem >= globalConfig.itemSpacingOnBelts;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Tries to accept the item
 | 
			
		||||
     * @param {BaseItem} item
 | 
			
		||||
     */
 | 
			
		||||
    tryAcceptItem(item) {
 | 
			
		||||
        if (this.spacingToFirstItem >= globalConfig.itemSpacingOnBelts) {
 | 
			
		||||
            this.items.unshift([this.spacingToFirstItem, item]);
 | 
			
		||||
            this.spacingToFirstItem = 0;
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Helper to throw an error on mismatch
 | 
			
		||||
     * @param {string} change
 | 
			
		||||
@ -174,7 +195,7 @@ export class BeltPath {
 | 
			
		||||
        for (let i = 0; i < this.items.length; ++i) {
 | 
			
		||||
            const item = this.items[i];
 | 
			
		||||
 | 
			
		||||
            if (item[_nextDistance] < 0 || item[_nextDistance] > this.totalLength) {
 | 
			
		||||
            if (item[_nextDistance] < 0 || item[_nextDistance] > this.totalLength + 0.02) {
 | 
			
		||||
                return fail(
 | 
			
		||||
                    "Item has invalid offset to next item: ",
 | 
			
		||||
                    item[_nextDistance],
 | 
			
		||||
@ -777,21 +798,6 @@ export class BeltPath {
 | 
			
		||||
     */
 | 
			
		||||
    update() {
 | 
			
		||||
        this.debug_checkIntegrity("pre-update");
 | 
			
		||||
        const firstBeltItems = this.initialBeltComponent.sortedItems;
 | 
			
		||||
        const transferItemAndProgress = firstBeltItems[0];
 | 
			
		||||
 | 
			
		||||
        // Check if the first belt took a new item
 | 
			
		||||
        if (transferItemAndProgress) {
 | 
			
		||||
            const transferItem = transferItemAndProgress[_item];
 | 
			
		||||
 | 
			
		||||
            if (this.spacingToFirstItem >= globalConfig.itemSpacingOnBelts) {
 | 
			
		||||
                // Can take new item
 | 
			
		||||
                firstBeltItems.splice(0, 1);
 | 
			
		||||
 | 
			
		||||
                this.items.unshift([this.spacingToFirstItem, transferItem]);
 | 
			
		||||
                this.spacingToFirstItem = 0;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Divide by item spacing on belts since we use throughput and not speed
 | 
			
		||||
        let beltSpeed =
 | 
			
		||||
@ -930,4 +936,20 @@ export class BeltPath {
 | 
			
		||||
        parameters.context.fillStyle = "purple";
 | 
			
		||||
        parameters.context.fillRect(firstItemIndicator.x - 3, firstItemIndicator.y - 1, 6, 2);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Draws the path
 | 
			
		||||
     * @param {DrawParameters} parameters
 | 
			
		||||
     */
 | 
			
		||||
    draw(parameters) {
 | 
			
		||||
        let progress = this.spacingToFirstItem;
 | 
			
		||||
        for (let i = 0; i < this.items.length; ++i) {
 | 
			
		||||
            const nextDistanceAndItem = this.items[i];
 | 
			
		||||
            const worldPos = this.computePositionFromProgress(progress).toWorldSpaceCenterOfTile();
 | 
			
		||||
            if (parameters.visibleRect.containsCircle(worldPos.x, worldPos.y, 10)) {
 | 
			
		||||
                nextDistanceAndItem[_item].draw(worldPos.x, worldPos.y, parameters);
 | 
			
		||||
            }
 | 
			
		||||
            progress += nextDistanceAndItem[_nextDistance];
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -227,7 +227,9 @@ export class BeltSystem extends GameSystemWithFilter {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    draw(parameters) {
 | 
			
		||||
        this.forEachMatchingEntityOnScreen(parameters, this.drawEntityItems.bind(this));
 | 
			
		||||
        for (let i = 0; i < this.beltPaths.length; ++i) {
 | 
			
		||||
            this.beltPaths[i].draw(parameters);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 | 
			
		||||
@ -239,9 +239,9 @@ export class ItemEjectorSystem extends GameSystemWithFilter {
 | 
			
		||||
 | 
			
		||||
        const beltComp = receiver.components.Belt;
 | 
			
		||||
        if (beltComp) {
 | 
			
		||||
            // Ayy, its a belt!
 | 
			
		||||
            if (beltComp.canAcceptItem()) {
 | 
			
		||||
                beltComp.takeItem(item);
 | 
			
		||||
            const path = beltComp.assignedPath;
 | 
			
		||||
            assert(path, "belt has no path");
 | 
			
		||||
            if (path.tryAcceptItem(item)) {
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user