OSDN Git Service

Merge branch 'master' of o_ggy@git.sourceforge.jp:/gitroot/moflib/moflib
[moflib/moflib.git] / saisei-1.0 / rpg / rpg / oldcode / World.cpp
1 #include "World.h"
2 #include "mof/ConsoleIO.h"
3
4
5
6
7 et::World::World(std::vector<et::RegenerationEvent>& regenerationHistory)
8 {
9         m_regenerationLevel = 0;
10         m_term = 0;
11         int regenePoint = 0;
12
13         std::vector<et::RegenerationEvent> stock;
14         
15         m_pAreaMap = new et::AreaMap(10 , 10);
16         for(int i = 0 ; i < regenerationHistory.size() ; i++){
17                 et::RegenerationEvent event = regenerationHistory.at(i);
18                 if(event.isSleepEvent()){
19                         m_term++;
20                         for(int j = 0 ; j < stock.size() ; j++){
21                                 regenePoint += updateAreaPowerLevel(stock.at(j).position , stock.at(j));
22                         }
23                         stock.clear();
24                 }
25                 else stock.push_back(event);
26         }
27         
28         for(int i = 0 ; i < stock.size() ; i++){
29                 //\94z\92u\8dÏ\82Ý\83G\83\8c\83\81\83\93\83g\82Æ\82µ\82Ä\8f\88\97\9d
30                 et::Area area = m_pAreaMap->get(stock.at(i).position.x , stock.at(i).position.y);
31                 if(stock.at(i).forest)area.forestGen = true;
32         }
33         m_regenerationLevel = regenePoint / 10;
34 }
35
36 et::World::~World(void)
37 {
38         delete m_pAreaMap;
39 }
40
41
42 int et::World::updateAreaPowerLevel(mof::Vector2D& position , et::RegenerationEvent& event){
43         int regenePoint = 0;
44         static int tableX[] = { -1 , 0 , 1 , -1 , 0 , 1 , -1 , 0 , 1};
45         static int tableY[] = { -1 , -1 , -1 , 0 , 0 , 0 , 1 , 1 , 1};
46         static int tableEffect[] = { 1  , 3 , 1 , 3 , 5 , 3 , 1 , 3 , 1};
47         for(int i = 0 ; i < 9 ; i++){
48                 mof::Vector2D target = position;
49                 target.x += tableX[i];
50                 target.y += tableY[i];
51                 if(0 <= target.x && target.x < m_pAreaMap->getWidth() && 0 <= target.y && target.y < m_pAreaMap->getHeight() ){
52                         et::Area area = m_pAreaMap->get(target.x , target.y);
53                         if(event.forest){
54                                 int tmp = area.powerLevel.forest;
55                                 area.powerLevel.forest += tableEffect[i]; 
56                                 if(area.powerLevel.forest > 9)area.powerLevel.forest = 9;
57                                 regenePoint += area.powerLevel.forest - tmp;
58                         }
59                         m_pAreaMap->set(target.x , target.y , area);
60                 }
61                 
62         }
63         return regenePoint;
64         
65 }
66
67 et::Area& et::World::getArea(int x , int y){
68         return m_pAreaMap->get(x , y);
69 }
70
71 void et::World::setArea(int x , int y , et::Area& area){
72         m_pAreaMap->set(x , y , area);
73 }
74
75
76
77 et::AreaPowerLevelMap et::World::getAreaPowerLevelMap(){
78         et::AreaPowerLevelMap powerLevelMap(m_pAreaMap->getWidth() , m_pAreaMap->getHeight());
79         for(int x = 0 ; x < powerLevelMap.getWidth() ; x++){
80                 for(int y = 0 ; y < powerLevelMap.getHeight() ; y++)powerLevelMap.set(x , y , m_pAreaMap->get(x , y).powerLevel);
81         }
82         return powerLevelMap;
83 }