QTfrontend/namegen.cpp
author nemo
Thu, 01 Jul 2010 23:41:10 -0400
changeset 3608 c509bbc779e7
parent 3344 b18a166e6ca4
child 4976 088d40d8aba2
permissions -rw-r--r--
Revert prior attempted optimisation. Gridding the land pays in some situations, but not all. Restricting to an upper bound might help, but overall, seems too fuzzy to be worth it. On one side is increased cost of Add/Delete + extra test on collision check, on the other is skipping the list iteration. Perhaps for large lists.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1907
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
     1
/*
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
     2
 * Hedgewars, a free turn based strategy game
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
     3
 * Copyright (c) 2009 Martin Minarik <ttsmj@pokec.sk>
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
     4
 *
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License as published by
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
     7
 * the Free Software Foundation; version 2 of the License
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
     8
 *
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    12
 * GNU General Public License for more details.
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    13
 *
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    17
 */
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    18
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    19
#include <QFile>
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    20
#include <QTextStream>
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    21
#include <QApplication>
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    22
#include <QStringList>
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    23
#include <QLineEdit>
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    24
#include "namegen.h"
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    25
#include "hwform.h"
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    26
#include "hwconsts.h"
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    27
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    28
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    29
HWNamegen::HWNamegen() :
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2192
diff changeset
    30
    TypesAvliable(false)
1907
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    31
{
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    32
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2192
diff changeset
    33
    TypesLoad();
1907
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    34
}
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    35
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    36
HWNamegen::~HWNamegen()
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    37
{
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    38
}
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    39
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    40
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    41
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    42
void HWNamegen::TeamRandomName(HWTeam*& team, const int &i)
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    43
{
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2192
diff changeset
    44
    RandomNameByHat(team,i);
1907
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    45
}
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    46
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    47
void HWNamegen::TeamRandomNames(HWTeam*& team, const bool changeteamname)
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    48
{
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2192
diff changeset
    49
    if ((TypesHatnames.size() > 0) && TypesAvliable){
1907
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    50
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2192
diff changeset
    51
        int kind = (rand()%(TypesHatnames.size()));
1907
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    52
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2192
diff changeset
    53
        if (changeteamname){
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2192
diff changeset
    54
            if (TypesTeamnames[kind].size() > 0){
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2192
diff changeset
    55
                team->TeamName = TypesTeamnames[kind][rand()%(TypesTeamnames[kind].size())];
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2192
diff changeset
    56
            }
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2192
diff changeset
    57
            team->Grave = "Simple"; // Todo: make it semi-random
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2192
diff changeset
    58
            team->Fort = "Island"; // Todo: make it semi-random
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2192
diff changeset
    59
            team->Voicepack = "Default";
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2192
diff changeset
    60
        }
1907
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    61
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2192
diff changeset
    62
        for(int i = 0; i < 8; i++)
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2192
diff changeset
    63
        {
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2192
diff changeset
    64
            if ((TypesHatnames[kind].size()) > 0){
3344
b18a166e6ca4 Frontend:
smxx
parents: 2948
diff changeset
    65
                team->Hedgehogs[i].Hat = TypesHatnames[kind][rand()%(TypesHatnames[kind].size())];
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2192
diff changeset
    66
            }
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2192
diff changeset
    67
            RandomNameByHat(team,i);
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2192
diff changeset
    68
        }
1907
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    69
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2192
diff changeset
    70
    }
1907
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    71
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    72
}
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    73
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    74
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    75
void HWNamegen::RandomNameByHat(HWTeam*& team, const int &i)
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    76
{
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2192
diff changeset
    77
    QStringList Dictionaries;
3344
b18a166e6ca4 Frontend:
smxx
parents: 2948
diff changeset
    78
    HatCfgLoad(team->Hedgehogs[i].Hat,Dictionaries);
1907
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    79
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2192
diff changeset
    80
    QStringList Dictionary;
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2192
diff changeset
    81
    DictLoad(Dictionaries[rand()%(Dictionaries.size())],Dictionary);
1907
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    82
3344
b18a166e6ca4 Frontend:
smxx
parents: 2948
diff changeset
    83
    team->Hedgehogs[i].Name = Dictionary[rand()%(Dictionary.size())];
1907
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    84
}
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    85
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    86
void HWNamegen::DictLoad(const QString filename, QStringList &list)
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    87
{
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    88
     list.clear();
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    89
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    90
     QFile file(QString("%1/Names/%2.txt").arg(datadir->absolutePath()).arg(filename));
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    91
     if (file.open(QIODevice::ReadOnly | QIODevice::Text))
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    92
     {
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    93
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    94
         QTextStream in(&file);
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    95
         while (!in.atEnd()) {
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    96
             QString line = in.readLine();
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    97
             if(line != QString(""))
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    98
                 {list.append(line);}
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
    99
         }
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   100
     }
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   101
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   102
     if (list.size()==0)
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   103
         list.append(filename);
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   104
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   105
}
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   106
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   107
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   108
void HWNamegen::HatCfgLoad(const QString hatname, QStringList &list)
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   109
{
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   110
     list.clear();
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   111
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   112
     QFile file(QString("%1/Names/%2.cfg").arg(datadir->absolutePath()).arg(hatname));
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   113
     if (file.open(QIODevice::ReadOnly | QIODevice::Text))
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   114
     {
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   115
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   116
         QTextStream in(&file);
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   117
         while (!in.atEnd()) {
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   118
             QString line = in.readLine();
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   119
             if(line != QString(""))
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   120
                 {list.append(line);}
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   121
         }
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   122
     }
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   123
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   124
     if (list.size()==0)
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   125
         list.append(QString("generic"));
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   126
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   127
}
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   128
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   129
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   130
void HWNamegen::TypesLoad()
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   131
{
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   132
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   133
     QFile file(QString("%1/Names/types.ini").arg(datadir->absolutePath()));
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   134
     if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   135
         {TypesAvliable = FALSE; return;}
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   136
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   137
     int counter = 0; //counter starts with 0 (teamnames mode)
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   138
     TypesTeamnames.append(QStringList());
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   139
     TypesHatnames.append(QStringList());
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   140
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   141
     QTextStream in(&file);
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   142
     while (!in.atEnd()) {
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   143
         QString line = in.readLine();
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   144
         if (line == QString("#####")){
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   145
             counter++; //toggle mode (teamnames || hats)
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   146
             if ((counter%2) == 0){
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   147
                 TypesTeamnames.append(QStringList());
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   148
                 TypesHatnames.append(QStringList());
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   149
             }
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   150
         } else if ((line == QString("*****")) || (line == QString("*END*"))){
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   151
             TypesAvliable = TRUE; return; // bye bye
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   152
         } else {
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   153
             if ((counter%2) == 0){ // even => teamnames mode
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   154
                 TypesTeamnames[(counter/2)].append(line);
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   155
             } else { // odd => hats mode
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   156
                 TypesHatnames[((counter-1)/2)].append(line);
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   157
             }
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   158
         }
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   159
//         Types.append(line);
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   160
     }
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   161
         TypesAvliable = TRUE;
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   162
     return;
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   163
}
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   164
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents:
diff changeset
   165