File: minimap.py

package info (click to toggle)
snowballz 0.9.5.1-2
  • links: PTS, VCS
  • area: main
  • in suites: lenny
  • size: 10,888 kB
  • ctags: 1,242
  • sloc: python: 7,511; makefile: 53; sh: 2
file content (88 lines) | stat: -rw-r--r-- 2,442 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
from __future__ import division
import data
from OpenGL.GL import *

class MiniMap:
    def __init__(self):
        self.scale = min(data.view.h/data.map.size[0], data.view.w/data.map.size[1])
        self.draw_x = -(self.scale*data.map.size[0]-data.view.w)//2
        self.draw_y = (self.scale*data.map.size[1]-data.view.h)//2+data.view.h


    def draw(self):
        glDisable(GL_TEXTURE_2D)
        glPushMatrix()

        glTranslatef(self.draw_x, self.draw_y, 0)

        # Scale minimap to fill screen height
        glScalef(self.scale,self.scale,1)

        # Draw minimap bg.
        glColor4f(0,0,0, 0.3)

        glBegin(GL_QUADS)
        glVertex2f(0, 0)
        glVertex2f(data.map.size[0], 0)
        glVertex2f(data.map.size[0], -data.map.size[1])
        glVertex2f(0, -data.map.size[1])
        glEnd()
        glColor4f(1,1,1,1)

        glPointSize(4)
        # Draw buildings on minimap.
        glBegin(GL_POINTS)
        for b in data.buildings:
            if b.player:
                if b.player:
                    glColor4f(*b.player.glcolor+[1])
                else:
                    glColor4f(1,1,1, 1)
                glVertex2i(b.x, -b.y)
        glEnd()

        # Draw penguins on minimap.
        glPointSize(2)
        glBegin(GL_POINTS)
        for u in data.units:
            if u.igloo.player:
                glColor3f(*u.igloo.player.glcolor)
            else:
                glColor3f(1,1,1)
            glVertex2i(u.x, -u.y)
        glEnd()

        for d in data.map._dynamic_objects:
            if d.minimapimage and not d.hidden:
                d.doanimate()
                d.minimapicon.render()

        # Draw screen on minimap.
        glColor4f(0, 0.3, 0.3, 0.3)
        x = data.view.x/32
        y = data.view.y/32

        glTranslatef(x, -y, 0)
        glBegin(GL_QUADS)
        glVertex2f(0, 0)
        glVertex2f(data.view.scale_w/32, 0)
        glVertex2f(data.view.scale_w/32, -data.view.scale_h/32)
        glVertex2f(0, -data.view.scale_h/32)
        glEnd()
        glColor4f(1,1,1,1)

        glPopMatrix()



    def pos_to_mappos(self, cx, cy):
        cx -= self.scale*data.view.scale_w//32//2
        cy -= self.scale*data.view.scale_h//32//2

        # Get the position of the mouse relative to the minimap.
        px = cx - self.draw_x
        py = cy - self.draw_y

        py += self.scale*data.map.size[1]

        return px*32//self.scale, py*32//self.scale