~widelands-dev/widelands-website/trunk

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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
from django.db import models

import settings
if settings.USE_SPHINX:
    from djangosphinx import SphinxSearch

class Tribe(models.Model):
    name = models.CharField(max_length=100)
    displayname = models.CharField(max_length=100)


class Ware(models.Model):
    name = models.CharField(max_length=100)
    displayname = models.CharField(max_length=100)
    tribe = models.ForeignKey(Tribe)
    image_url = models.CharField( max_length=256 ) # URL to include this, i wasn't able to feed django local images

    help = models.TextField(max_length=256) # This limit shall probably cover the longest help (found 209, nothing more)
    
    if settings.USE_SPHINX:
        search          = SphinxSearch(
            weights = {
                'displayname': 100,
                'help': 60,
                'name': 20,
                }
        )


    def __unicode__(self):
        return u'%s' % self.name


class BuildingManager(models.Manager):
    def small(self):
        return self.all().filter(size="S")
    def medium(self):
        return self.all().filter(size="M")
    def big(self):
        return self.all().filter(size="B")
    def mine(self):
        return self.all().filter(size="I")


        # return self.build_wares.count()

    pass

class Building(models.Model):
    SIZES = (
            ('S', 'small'),
            ('M', 'medium'),
            ('B', 'big'),
            ('I', 'mine'),
    )
    TYPES = (
            ('P', 'productionsite'),
            ('W', 'warehouse'),
            ('M', 'military site'),
            ('T', 'trainings site'),
    )
    
    objects = BuildingManager()
    
    if settings.USE_SPHINX:
        search          = SphinxSearch(
            weights = {
                'displayname': 100,
                'help': 60,
                'name': 20,
                }
        )


    name = models.CharField(max_length=100)
    displayname = models.CharField(max_length=100)
    tribe = models.ForeignKey(Tribe)
    image_url = models.CharField( max_length=256 ) # URL to include this, i wasn't able to feed django local images
   
    size = models.CharField(max_length=1,choices=SIZES)
    type = models.CharField( max_length=1, choices=TYPES) # productionsite...

    help = models.TextField(blank=True)
    
    # Enhances to
    enhancement = models.OneToOneField('self',related_name='enhanced_from', blank=True, null=True)

    # Build cost
    build_wares = models.ManyToManyField(Ware, related_name="build_ware_for_buildings", blank=True)
    build_costs = models.CharField(max_length=100,blank=True) # ' '.joined() integer strings

    # Store
    store_wares = models.ManyToManyField(Ware, related_name="stored_ware_for_buildings",blank=True)
    store_count = models.CharField(max_length=100, blank=True) # ' '.joined() integer strings
    
    # Output
    output_wares = models.ManyToManyField(Ware, related_name="produced_by_buildings",blank=True)

    def has_build_cost(self):
        return (self.build_wares.all().count() != 0)
    def get_build_cost(self):
        count = map(int,self.build_costs.split( ))
        for c,w in zip(count,self.build_wares.all()):
            yield [w]*c
    
    def produces(self):
        return (self.output_wares.all().count() != 0)
    def get_outputs(self):
        return self.output_wares.all()
    
    def has_stored_wares(self):
        return (self.store_wares.all().count() != 0)
    def get_stored_wares(self):
        count = map(int,self.store_count.split( ))
        for c,w in zip(count,self.store_wares.all()):
            yield [w]*c


    def __unicode__(self):
        return u"%s/%s" %(self.tribe.name,self.name)