changeset 27:69254db89020

missing effects file
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Mon, 22 Aug 2011 22:00:09 +0200
parents 59b340afd783
children 0532cbb323bf
files effect.py
diffstat 1 files changed, 61 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/effect.py	Mon Aug 22 22:00:09 2011 +0200
@@ -0,0 +1,61 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+import pygame
+
+def outlined_text(font, text, color, border_color):
+    notcolor = [c^0xFF for c in border_color]
+    base = font.render(text, 0, border_color, notcolor)
+    size = base.get_width() + 2, base.get_height() + 2
+    image = pygame.Surface(size, 16)
+    image.fill(notcolor)
+    base.set_colorkey(0)
+    image.blit(base, (0, 0))
+    image.blit(base, (2, 0))
+    image.blit(base, (0, 2))
+    image.blit(base, (2, 2))
+    base.set_colorkey(0)
+    base.set_palette_at(1, color)
+    image.blit(base, (1, 1))
+    image.set_colorkey(notcolor)
+    return image
+
+class CaptionSprite(pygame.sprite.Sprite):
+    def __init__(self, x, y, text, color, delay):
+        super(CaptionSprite, self).__init__()
+        font = pygame.font.Font(None, 18)
+        self.text = text
+        self.color = color
+        bgcolor = (32, 32, 32)
+        self.image = outlined_text(font, text, color, bgcolor)
+        self.rect = self.image.get_rect()
+        self.x = x
+        self.y = y
+        self.rect.center = (x * 24 + 12, y * 16 + 8 - 24)
+        self.ttl = 16
+        self.delay = delay
+
+    def update(self):
+        if self.delay:
+            self.delay -= 1
+            self.image.set_alpha(max(0, 255 - self.delay * 24))
+            return
+        self.rect.move_ip(0, -2)
+        self.ttl -= 1
+        if self.ttl < 5:
+            self.image.set_alpha(self.ttl * 51)
+        if self.ttl <= 0:
+            self.kill()
+
+class Caption(object):
+    def __init__(self, x, y, text, color=(255, 255, 255)):
+        self.x = x
+        self.y = y
+        self.text = text
+        self.color = color
+
+    def render(self, to_display, delay=0):
+        self.sprite = CaptionSprite(self.x, self.y, self.text,
+                                    self.color, delay)
+        to_display.effects.add(self.sprite)
+