resize block visualization instantly on zoom
This commit is contained in:
		
							parent
							
								
									02820b0e68
								
							
						
					
					
						commit
						3654178c83
					
				@ -181,7 +181,7 @@ export class BlockOverviewGraphComponent implements AfterViewInit, OnDestroy, On
 | 
				
			|||||||
      this.gl.viewport(0, 0, this.displayWidth, this.displayHeight);
 | 
					      this.gl.viewport(0, 0, this.displayWidth, this.displayHeight);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (this.scene) {
 | 
					    if (this.scene) {
 | 
				
			||||||
      this.scene.resize({ width: this.displayWidth, height: this.displayHeight });
 | 
					      this.scene.resize({ width: this.displayWidth, height: this.displayHeight, animate: false });
 | 
				
			||||||
      this.start();
 | 
					      this.start();
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      this.scene = new BlockScene({ width: this.displayWidth, height: this.displayHeight, resolution: this.resolution,
 | 
					      this.scene = new BlockScene({ width: this.displayWidth, height: this.displayHeight, resolution: this.resolution,
 | 
				
			||||||
 | 
				
			|||||||
@ -29,7 +29,7 @@ export default class BlockScene {
 | 
				
			|||||||
    this.init({ width, height, resolution, blockLimit, orientation, flip, vertexArray });
 | 
					    this.init({ width, height, resolution, blockLimit, orientation, flip, vertexArray });
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  resize({ width = this.width, height = this.height }: { width?: number, height?: number}): void {
 | 
					  resize({ width = this.width, height = this.height, animate = true }: { width?: number, height?: number, animate: boolean }): void {
 | 
				
			||||||
    this.width = width;
 | 
					    this.width = width;
 | 
				
			||||||
    this.height = height;
 | 
					    this.height = height;
 | 
				
			||||||
    this.gridSize = this.width / this.gridWidth;
 | 
					    this.gridSize = this.width / this.gridWidth;
 | 
				
			||||||
@ -38,7 +38,7 @@ export default class BlockScene {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    this.dirty = true;
 | 
					    this.dirty = true;
 | 
				
			||||||
    if (this.initialised && this.scene) {
 | 
					    if (this.initialised && this.scene) {
 | 
				
			||||||
      this.updateAll(performance.now(), 50);
 | 
					      this.updateAll(performance.now(), 50, 'left', animate);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -212,7 +212,7 @@ export default class BlockScene {
 | 
				
			|||||||
    this.vbytesPerUnit = blockLimit / Math.pow(resolution / 1.02, 2);
 | 
					    this.vbytesPerUnit = blockLimit / Math.pow(resolution / 1.02, 2);
 | 
				
			||||||
    this.gridWidth = resolution;
 | 
					    this.gridWidth = resolution;
 | 
				
			||||||
    this.gridHeight = resolution;
 | 
					    this.gridHeight = resolution;
 | 
				
			||||||
    this.resize({ width, height });
 | 
					    this.resize({ width, height, animate: true });
 | 
				
			||||||
    this.layout = new BlockLayout({ width: this.gridWidth, height: this.gridHeight });
 | 
					    this.layout = new BlockLayout({ width: this.gridWidth, height: this.gridHeight });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    this.txs = {};
 | 
					    this.txs = {};
 | 
				
			||||||
@ -225,14 +225,14 @@ export default class BlockScene {
 | 
				
			|||||||
    this.animateUntil = Math.max(this.animateUntil, tx.update(update));
 | 
					    this.animateUntil = Math.max(this.animateUntil, tx.update(update));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private updateTx(tx: TxView, startTime: number, delay: number, direction: string = 'left'): void {
 | 
					  private updateTx(tx: TxView, startTime: number, delay: number, direction: string = 'left', animate: boolean = true): void {
 | 
				
			||||||
    if (tx.dirty || this.dirty) {
 | 
					    if (tx.dirty || this.dirty) {
 | 
				
			||||||
      this.saveGridToScreenPosition(tx);
 | 
					      this.saveGridToScreenPosition(tx);
 | 
				
			||||||
      this.setTxOnScreen(tx, startTime, delay, direction);
 | 
					      this.setTxOnScreen(tx, startTime, delay, direction, animate);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private setTxOnScreen(tx: TxView, startTime: number, delay: number = 50, direction: string = 'left'): void {
 | 
					  private setTxOnScreen(tx: TxView, startTime: number, delay: number = 50, direction: string = 'left', animate: boolean = true): void {
 | 
				
			||||||
    if (!tx.initialised) {
 | 
					    if (!tx.initialised) {
 | 
				
			||||||
      const txColor = tx.getColor();
 | 
					      const txColor = tx.getColor();
 | 
				
			||||||
      this.applyTxUpdate(tx, {
 | 
					      this.applyTxUpdate(tx, {
 | 
				
			||||||
@ -252,30 +252,42 @@ export default class BlockScene {
 | 
				
			|||||||
          position: tx.screenPosition,
 | 
					          position: tx.screenPosition,
 | 
				
			||||||
          color: txColor
 | 
					          color: txColor
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        duration: 1000,
 | 
					        duration: animate ? 1000 : 1,
 | 
				
			||||||
        start: startTime,
 | 
					        start: startTime,
 | 
				
			||||||
        delay,
 | 
					        delay: animate ? delay : 0,
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      this.applyTxUpdate(tx, {
 | 
					      this.applyTxUpdate(tx, {
 | 
				
			||||||
        display: {
 | 
					        display: {
 | 
				
			||||||
          position: tx.screenPosition
 | 
					          position: tx.screenPosition
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        duration: 1000,
 | 
					        duration: animate ? 1000 : 0,
 | 
				
			||||||
        minDuration: 500,
 | 
					        minDuration: animate ? 500 : 0,
 | 
				
			||||||
        start: startTime,
 | 
					        start: startTime,
 | 
				
			||||||
        delay,
 | 
					        delay: animate ? delay : 0,
 | 
				
			||||||
        adjust: true
 | 
					        adjust: animate
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
 | 
					      if (!animate) {
 | 
				
			||||||
 | 
					        this.applyTxUpdate(tx, {
 | 
				
			||||||
 | 
					          display: {
 | 
				
			||||||
 | 
					            position: tx.screenPosition
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          duration: 0,
 | 
				
			||||||
 | 
					          minDuration: 0,
 | 
				
			||||||
 | 
					          start: startTime,
 | 
				
			||||||
 | 
					          delay: 0,
 | 
				
			||||||
 | 
					          adjust: false
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private updateAll(startTime: number, delay: number = 50, direction: string = 'left'): void {
 | 
					  private updateAll(startTime: number, delay: number = 50, direction: string = 'left', animate: boolean = true): void {
 | 
				
			||||||
    this.scene.count = 0;
 | 
					    this.scene.count = 0;
 | 
				
			||||||
    const ids = this.getTxList();
 | 
					    const ids = this.getTxList();
 | 
				
			||||||
    startTime = startTime || performance.now();
 | 
					    startTime = startTime || performance.now();
 | 
				
			||||||
    for (const id of ids) {
 | 
					    for (const id of ids) {
 | 
				
			||||||
      this.updateTx(this.txs[id], startTime, delay, direction);
 | 
					      this.updateTx(this.txs[id], startTime, delay, direction, animate);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    this.dirty = false;
 | 
					    this.dirty = false;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user