-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCBuildingBuilder.cpp
92 lines (84 loc) · 2.56 KB
/
CBuildingBuilder.cpp
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
#include "stdafx.h"
#include "Resource.h"
#include <mmsystem.h>
#include <ddraw.h>
#include "gamelib.h"
#include "CBuildingBuilder.h"
#include "CTownCenter.h"
#include "CConvert.h"
#include "mygame.h"
namespace game_framework {
/////////////////////////////////////////////////////////////////////////////
// 這個class為蓋房子專用的類別,管理尚未放至於地圖上的房子,
/////////////////////////////////////////////////////////////////////////////
CBuildingBuilder* CBuildingBuilder::buildingBuilder=NULL;
CBuildingBuilder* CBuildingBuilder::GetBuildingBuilder(){
if(buildingBuilder==NULL){
buildingBuilder = new CBuildingBuilder();
}
return buildingBuilder;
}
void CBuildingBuilder::ReleaseBuildingBuilder(){
delete buildingBuilder;
buildingBuilder = NULL;
}
CBuildingBuilder::CBuildingBuilder(){
building = NULL;
}
CBuildingBuilder::~CBuildingBuilder(){
if(building){
building->OnDie();
}
building=NULL;
}
bool CBuildingBuilder::IsBuilding(){
return building!=NULL;
}
void CBuildingBuilder::SetBuilding(CBuilding* building){
if(this->building!=NULL){
this->building->Player()->AddDieSprite(this->building);
CSelectionPanel::GetSelectionPanel()->AddSpriteToEraseQueue(this->building);
//this->building->SetVisionCount();
//this->building->OnDie();
}
this->building = building;
}
void CBuildingBuilder::PutBuilding(){
CRect rect = building->GridRect();
CGameMap* map = CGameMap::GetMap();
if(map->CanPutHere(rect)){
CPoint mapPoint(CConvert::GetMapPointByScreenPoint(CMouse::GetMouse()->Point()));
building->SetMapPointAndMapTile(mapPoint);
building->SetVisionCount();
CSelectionPanel* panel = CSelectionPanel::GetSelectionPanel();//設定所有選取物件鎖定這個建築物
set<CSprite*>::iterator it;
for(it = panel->SelectedSprites().begin();it!=panel->SelectedSprites().end();it++){
if((*it)->Target().IsSprite()){//清除之前鎖定的單位
(*it)->Target().Sprite()->targetedSprites.erase(*it);
}
(*it)->SetTarget(CTarget(building));
}
building = NULL;
}else{
CancelBuilding();
}
}
void CBuildingBuilder::CancelBuilding(){
//補回資源
CPlayer::GetPlayer()->ResourceTable() += building->spendResource;
SetBuilding(NULL);
}
void CBuildingBuilder::OnMove(){
if(building!=NULL){
CMouse* mouse = CMouse::GetMouse();
CPoint gridPoint = CConvert::GetGridPointByScreenPoint(mouse->Point());
building->SetMapPoint(CConvert::GetMapPointByGridPoint(gridPoint)+CPoint(63,63));
}
}
void CBuildingBuilder::OnShow(){
if(building!=NULL){
building->OnShowSelectedLine();
building->OnShow();
}
}
}