~danigm/pixwar/trunk

« back to all changes in this revision

Viewing changes to pixwar/Unit.py

  • Committer: danigm
  • Date: 2008-05-19 17:44:05 UTC
  • mfrom: (9.2.2 pixWar)
  • Revision ID: danigm@arch_box-20080519174405-gevqmm23iio6zwie
Explosion en los planetas cuando se conquistan
instalador que no va bien, con setuptools

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
"""
 
2
Clase que define una unidad de ataque
 
3
"""
 
4
 
 
5
import pygame
 
6
import utils
 
7
import Path
 
8
import math
 
9
import Explosion
 
10
import random
 
11
 
 
12
'''
 
13
def create_units(group, num, player, destino, allsprites):
 
14
    units = [Unit(i, player, destino, allsprites) for i in range(num)]
 
15
    if group != None:
 
16
        group.add(units)
 
17
    else:
 
18
        return units
 
19
'''
 
20
def circle(t, (x,y), r):
 
21
    r1 = r
 
22
    if t > 10:
 
23
        r1 *= (t/10)
 
24
    x1 = r1 * math.cos(t) + x
 
25
    y1 = r1 * math.sin(t) + y
 
26
    return (x1,y1)
 
27
 
 
28
def create_units(group, num, player, destino, allsprites, planeta_orig=None):
 
29
    u = Unit(num, player, destino, allsprites, porig=planeta_orig)
 
30
    if group != None:
 
31
        group.add(u)
 
32
    else:
 
33
        return u
 
34
 
 
35
class Unit(pygame.sprite.Sprite):
 
36
    def __init__(self, size, player, destino, allsprites, porig):
 
37
        self.gsize = 15
 
38
        pygame.sprite.Sprite.__init__(self) #call Sprite intializer
 
39
        self.size = size
 
40
        self.size2 = self.size+10
 
41
        self.image = pygame.Surface((self.size2+1, int(self.size2 * 0.70)+1))
 
42
        self.image.fill((0,0,0))
 
43
        self.image.set_colorkey((0,0,0))
 
44
        self.player = player
 
45
        
 
46
        x1 = int(self.size2 * 0.70)
 
47
        x2 = int(self.size2 * 0.35)
 
48
        triangulo = [(0,0), (0, x1), (self.size2, x2)]
 
49
        self.rect = pygame.draw.polygon(self.image, self.player.get_color(), triangulo, 2)
 
50
        
 
51
        self.ruta = Path.Path()
 
52
        
 
53
        if porig is None:
 
54
            porig = self.player.get_selected()
 
55
 
 
56
        orig = porig.get_pos()
 
57
        radio = porig.get_radio()
 
58
        orig = circle(random.randint(0,10), orig, radio)
 
59
        self.ruta.calcular_ruta(orig, destino.get_pos())
 
60
        self.destino = destino
 
61
 
 
62
        x, y = orig
 
63
        z, t = self.destino.get_pos()
 
64
        zx = z - x
 
65
        ty = t - y
 
66
        self.dist = math.sqrt(zx * zx + ty * ty)
 
67
 
 
68
        self.angle = self.ruta.get_angle()
 
69
 
 
70
        self.image = pygame.transform.rotate(self.image, self.angle)
 
71
        self.rect = self.image.get_rect()
 
72
        self.allsprites = allsprites
 
73
        self.t = 0
 
74
 
 
75
    # La velocidad depende de la distancia, esto hay que arreglarlo,
 
76
    # para que sea continua, hay que tener en cuenta la distancia para
 
77
    # poder aumentar la velocidad en distancias cortas
 
78
    def update(self):
 
79
        if self.t < 1 and self.gsize > 0:
 
80
            self.t += 0.1 / (self.gsize * self.dist/300.0 * 1.0)
 
81
            self.rect.center = self.ruta.posicion(self.t)
 
82
        else:
 
83
            if self.destino.llegada_unidades(self):
 
84
                self.allsprites.add(Explosion.Explosion(self.destino.get_pos(), (255,255,0), self.get_size()*5))
 
85
 
 
86
    def get_size(self):
 
87
        return self.size
 
88
 
 
89
    def get_player(self):
 
90
        return self.player
 
91
 
 
92
    def explotar(self):
 
93
        #self.allsprites.add(Explosion.Explosion(self.destino.get_pos(), (255,255,0), self.get_size()*5))
 
94
        pass
 
95
 
 
96
    def get_pos(self):
 
97
        return self.rect.center
 
98
 
 
99
    def get_color(self):
 
100
        return self.player.get_color()