You've already forked Nitro_Render_V3
mirror of
https://github.com/duckietm/Nitro_Render_V3.git
synced 2026-06-20 07:26:18 +00:00
🆙 added latest changes
This commit is contained in:
@@ -102,7 +102,7 @@ export class RoomRenderer implements IRoomRenderer, IRoomSpriteCanvasContainer
|
||||
|
||||
public createCanvas(id: number, width: number, height: number, scale: number): IRoomRenderingCanvas
|
||||
{
|
||||
const existing = this._canvases.get(id) as IRoomRenderingCanvas;
|
||||
const existing = this._canvases.get(id);
|
||||
|
||||
if(existing)
|
||||
{
|
||||
|
||||
@@ -84,7 +84,7 @@ export class RoomSpriteCanvas implements IRoomRenderingCanvas
|
||||
{
|
||||
const display = new Container();
|
||||
|
||||
display.isRenderGroup = true;
|
||||
display.isRenderGroup = false;
|
||||
display.cullableChildren = false;
|
||||
|
||||
this._master.addChild(display);
|
||||
@@ -475,11 +475,11 @@ export class RoomSpriteCanvas implements IRoomRenderingCanvas
|
||||
{
|
||||
if((index < 0) || (index >= this._spriteCount)) return null;
|
||||
|
||||
const sprite = (this._display.getChildAt(index) as ExtendedSprite);
|
||||
const sprite = (this._display.getChildAt(index));
|
||||
|
||||
if(!sprite) return null;
|
||||
|
||||
return sprite;
|
||||
return (sprite as ExtendedSprite);
|
||||
}
|
||||
|
||||
protected getExtendedSpriteIdentifier(sprite: ExtendedSprite): string
|
||||
@@ -528,6 +528,7 @@ export class RoomSpriteCanvas implements IRoomRenderingCanvas
|
||||
extendedSprite.label = sprite.name;
|
||||
extendedSprite.varyingDepth = objectSprite.varyingDepth;
|
||||
extendedSprite.clickHandling = objectSprite.clickHandling;
|
||||
extendedSprite.skipMouseHandling = objectSprite.skipMouseHandling;
|
||||
extendedSprite.filters = objectSprite.filters;
|
||||
|
||||
const alpha = (objectSprite.alpha / 255);
|
||||
@@ -604,6 +605,7 @@ export class RoomSpriteCanvas implements IRoomRenderingCanvas
|
||||
extendedSprite.label = sprite.name;
|
||||
extendedSprite.varyingDepth = sprite.varyingDepth;
|
||||
extendedSprite.clickHandling = sprite.clickHandling;
|
||||
extendedSprite.skipMouseHandling = sprite.skipMouseHandling;
|
||||
extendedSprite.blendMode = sprite.blendMode;
|
||||
extendedSprite.filters = sprite.filters;
|
||||
|
||||
@@ -757,61 +759,64 @@ export class RoomSpriteCanvas implements IRoomRenderingCanvas
|
||||
|
||||
if(extendedSprite && extendedSprite.containsPoint(new Point((x - extendedSprite.x), (y - extendedSprite.y))))
|
||||
{
|
||||
if(extendedSprite.clickHandling && ((type === MouseEventType.MOUSE_CLICK) || (type === MouseEventType.DOUBLE_CLICK)))
|
||||
if(!extendedSprite.skipMouseHandling)
|
||||
{
|
||||
//
|
||||
}
|
||||
else
|
||||
{
|
||||
const identifier = this.getExtendedSpriteIdentifier(extendedSprite);
|
||||
|
||||
if(checkedSprites.indexOf(identifier) === -1)
|
||||
if(extendedSprite.clickHandling && ((type === MouseEventType.MOUSE_CLICK) || (type === MouseEventType.DOUBLE_CLICK)))
|
||||
{
|
||||
const tag = extendedSprite.tag;
|
||||
//
|
||||
}
|
||||
else
|
||||
{
|
||||
const identifier = this.getExtendedSpriteIdentifier(extendedSprite);
|
||||
|
||||
let mouseData = this._mouseActiveObjects.get(identifier);
|
||||
|
||||
if(mouseData)
|
||||
if(checkedSprites.indexOf(identifier) === -1)
|
||||
{
|
||||
if(mouseData.spriteTag !== tag)
|
||||
{
|
||||
mouseEvent = this.createMouseEvent(0, 0, 0, 0, MouseEventType.ROLL_OUT, mouseData.spriteTag, altKey, ctrlKey, shiftKey, buttonDown);
|
||||
const tag = extendedSprite.tag;
|
||||
|
||||
let mouseData = this._mouseActiveObjects.get(identifier);
|
||||
|
||||
if(mouseData)
|
||||
{
|
||||
if(mouseData.spriteTag !== tag)
|
||||
{
|
||||
mouseEvent = this.createMouseEvent(0, 0, 0, 0, MouseEventType.ROLL_OUT, mouseData.spriteTag, altKey, ctrlKey, shiftKey, buttonDown);
|
||||
|
||||
this.bufferMouseEvent(mouseEvent, identifier);
|
||||
}
|
||||
}
|
||||
|
||||
if((type === MouseEventType.MOUSE_MOVE) && (!mouseData || (mouseData.spriteTag !== tag)))
|
||||
{
|
||||
mouseEvent = this.createMouseEvent(x, y, (x - extendedSprite.x), (y - extendedSprite.y), MouseEventType.ROLL_OVER, tag, altKey, ctrlKey, shiftKey, buttonDown);
|
||||
}
|
||||
else
|
||||
{
|
||||
mouseEvent = this.createMouseEvent(x, y, (x - extendedSprite.x), (y - extendedSprite.y), type, tag, altKey, ctrlKey, shiftKey, buttonDown);
|
||||
|
||||
mouseEvent.spriteOffsetX = extendedSprite.offsetX;
|
||||
mouseEvent.spriteOffsetY = extendedSprite.offsetY;
|
||||
}
|
||||
|
||||
if(!mouseData)
|
||||
{
|
||||
mouseData = new ObjectMouseData();
|
||||
|
||||
mouseData.objectId = identifier;
|
||||
this._mouseActiveObjects.set(identifier, mouseData);
|
||||
}
|
||||
|
||||
mouseData.spriteTag = tag;
|
||||
|
||||
if(((type !== MouseEventType.MOUSE_MOVE) || (x !== this._mouseOldX)) || (y !== this._mouseOldY))
|
||||
{
|
||||
this.bufferMouseEvent(mouseEvent, identifier);
|
||||
}
|
||||
|
||||
checkedSprites.push(identifier);
|
||||
}
|
||||
|
||||
if((type === MouseEventType.MOUSE_MOVE) && (!mouseData || (mouseData.spriteTag !== tag)))
|
||||
{
|
||||
mouseEvent = this.createMouseEvent(x, y, (x - extendedSprite.x), (y - extendedSprite.y), MouseEventType.ROLL_OVER, tag, altKey, ctrlKey, shiftKey, buttonDown);
|
||||
}
|
||||
else
|
||||
{
|
||||
mouseEvent = this.createMouseEvent(x, y, (x - extendedSprite.x), (y - extendedSprite.y), type, tag, altKey, ctrlKey, shiftKey, buttonDown);
|
||||
|
||||
mouseEvent.spriteOffsetX = extendedSprite.offsetX;
|
||||
mouseEvent.spriteOffsetY = extendedSprite.offsetY;
|
||||
}
|
||||
|
||||
if(!mouseData)
|
||||
{
|
||||
mouseData = new ObjectMouseData();
|
||||
|
||||
mouseData.objectId = identifier;
|
||||
this._mouseActiveObjects.set(identifier, mouseData);
|
||||
}
|
||||
|
||||
mouseData.spriteTag = tag;
|
||||
|
||||
if(((type !== MouseEventType.MOUSE_MOVE) || (x !== this._mouseOldX)) || (y !== this._mouseOldY))
|
||||
{
|
||||
this.bufferMouseEvent(mouseEvent, identifier);
|
||||
}
|
||||
|
||||
checkedSprites.push(identifier);
|
||||
didHitSprite = true;
|
||||
}
|
||||
|
||||
didHitSprite = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { AlphaTolerance } from '@nitrots/api';
|
||||
import { GetRenderer, TextureUtils } from '@nitrots/utils';
|
||||
import { GlRenderTarget, Point, RendererType, Sprite, Texture, TextureSource, WebGPURenderer } from 'pixi.js';
|
||||
import { Point, RendererType, Sprite, Texture, TextureSource, WebGPURenderer } from 'pixi.js';
|
||||
|
||||
const BYTES_PER_PIXEL = 4;
|
||||
|
||||
@@ -12,6 +12,7 @@ export class ExtendedSprite extends Sprite
|
||||
private _alphaTolerance: number = AlphaTolerance.MATCH_OPAQUE_PIXELS;
|
||||
private _varyingDepth: boolean = false;
|
||||
private _clickHandling: boolean = false;
|
||||
private _skipMouseHandling: boolean = false;
|
||||
|
||||
private _updateId1: number = -1;
|
||||
private _updateId2: number = -1;
|
||||
@@ -43,7 +44,7 @@ export class ExtendedSprite extends Sprite
|
||||
|
||||
public containsPoint(point: Point): boolean
|
||||
{
|
||||
if(!point || (this.alphaTolerance > 255) || !this.texture || (this.texture === Texture.EMPTY) || (this.blendMode !== 'normal')) return false;
|
||||
if(!point || (this.alphaTolerance > 255) || !this.texture || (this.texture === Texture.EMPTY)) return false;
|
||||
|
||||
point = new Point((point.x * this.scale.x), (point.y * this.scale.y));
|
||||
|
||||
@@ -92,12 +93,12 @@ export class ExtendedSprite extends Sprite
|
||||
pixels = TextureUtils.getPixels(new Texture(textureSource))?.pixels ?? null;
|
||||
}
|
||||
|
||||
else if(renderer.type === RendererType.WEBGL)
|
||||
else if((renderer.type as RendererType) === RendererType.WEBGL)
|
||||
{
|
||||
pixels = new Uint8ClampedArray(BYTES_PER_PIXEL * width * height);
|
||||
|
||||
const renderTarget = renderer.renderTarget.getRenderTarget(textureSource);
|
||||
const glRenderTarget = renderer.renderTarget.getGpuRenderTarget(renderTarget) as GlRenderTarget;
|
||||
const glRenderTarget = renderer.renderTarget.getGpuRenderTarget(renderTarget);
|
||||
|
||||
const gl = renderer.gl;
|
||||
|
||||
@@ -181,4 +182,14 @@ export class ExtendedSprite extends Sprite
|
||||
{
|
||||
this._clickHandling = flag;
|
||||
}
|
||||
|
||||
public get skipMouseHandling(): boolean
|
||||
{
|
||||
return this._skipMouseHandling;
|
||||
}
|
||||
|
||||
public set skipMouseHandling(flag: boolean)
|
||||
{
|
||||
this._skipMouseHandling = flag;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user