|
|
@@ -637,6 +637,7 @@ class NodeSprite(Node2D): |
|
|
|
"rect":[0,0,0,0], |
|
|
|
"image":"", |
|
|
|
"scale":[1.0, 1.0], |
|
|
|
"scale_dirty":True, |
|
|
|
"surface":None |
|
|
|
} |
|
|
|
|
|
|
@@ -809,6 +810,8 @@ class NodeSprite(Node2D): |
|
|
|
if surf is not None: |
|
|
|
# Do some prescaling work, if needed. |
|
|
|
if self._NODESPRITE_DATA["scale_dirty"]: |
|
|
|
self._NODESPRITE_DATA["scale_dirty"] = False |
|
|
|
self._NODESPRITE_UpdateFrameSurface(surf) |
|
|
|
self._NODESPRITE_UpdateScaleSurface(scale, surf) |
|
|
|
fsurf = surf # Initial assumption that the surface is also the "frame" |
|
|
|
# If we have a "frame" surface, however, let's get it and blit the rect into the frame surface. |
|
|
@@ -828,9 +831,24 @@ class NodeSprite(Node2D): |
|
|
|
# Call on all children |
|
|
|
Node._render(self, surface) |
|
|
|
|
|
|
|
def _NODESPRITE_UpdateFrameSurface(self, surf): |
|
|
|
rect = self.rect |
|
|
|
ssize = surf.get_size() |
|
|
|
if rect[2] == ssize[0] and rect[3] == ssize[1]: |
|
|
|
if "frame_surf" in self._NODESPRITE_DATA: |
|
|
|
del self._NODESPRITE_DATA |
|
|
|
return |
|
|
|
|
|
|
|
if "frame_surf" not in self._NODESPRITE_DATA: |
|
|
|
self._NODESPRITE_DATA["frame_surf"] = pygame.Surface((rect[2], rect[3]), pygame.SRCALPHA, surf) |
|
|
|
else: |
|
|
|
fsurf = self._NODESPRITE_DATA["frame_surf"] |
|
|
|
fsize = fsurf.get_size() |
|
|
|
if fsize[0] != rect[2] or fsize[1] != rect[3]: |
|
|
|
self._NODESPRITE_DATA["frame_surf"] = pygame.Surface((rect[2], rect[3]), pygame.SRCALPHA, surf) |
|
|
|
|
|
|
|
|
|
|
|
def _NODESPRITE_UpdateScaleSurface(self, scale, surf): |
|
|
|
self._NODESPRITE_DATA["scale_dirty"] = False |
|
|
|
ssurf = None |
|
|
|
if "scale_surf" in self._NODESPRITE_DATA: |
|
|
|
ssurf = self._NODESPRITE_DATA["scale_surf"] |
|
|
@@ -874,16 +892,7 @@ class NodeSprite(Node2D): |
|
|
|
elif rect[1] + rect[3] > isize[1]: |
|
|
|
rect[3] = isize[1] - rect[1] |
|
|
|
|
|
|
|
fssize = [0,0] |
|
|
|
if rect[2] > 0 and rect[3] > 0: |
|
|
|
if rect[2] < isize[0] or rect[1] < isize[1]: |
|
|
|
surf = self._NODESPRITE_DATA["surface"]() |
|
|
|
self._NODESPRITE_DATA["frame_surf"] = pygame.Surface((rect[2], rect[3]), pygame.SRCALPHA, surf) |
|
|
|
|
|
|
|
if fssize[0] > 0 and fssize[1] > 0: |
|
|
|
pass |
|
|
|
elif "frame_surf" in self._NODESPRITE_DATA: |
|
|
|
del self._NODESPRITE_DATA["frame_surf"] |
|
|
|
self._NODESPRITE_DATA["scale_dirty"] = True |
|
|
|
|
|
|
|
|
|
|
|
|