-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCTarget.cpp
60 lines (57 loc) · 1.71 KB
/
CTarget.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
#include "stdafx.h"
#include "Resource.h"
#include <mmsystem.h>
#include <ddraw.h>
#include "gamelib.h"
#include <set>
#include "CTarget.h"
#include "CSprite.h"
#include "CConvert.h"
#include "mygame.h"
namespace game_framework {
/////////////////////////////////////////////////////////////////////////////
// 這個class為Sprite鎖定的目標,可能是一個點或是一個物件
/////////////////////////////////////////////////////////////////////////////
CTarget::CTarget():isNull(true),isPoint(false),isSprite(false){
this->sprite = NULL;
}
CTarget::CTarget(CPoint point):isNull(false),isPoint(true),isSprite(false){
this->mapPoint = point;
this->sprite = NULL;
}
CTarget::CTarget(CSprite* sprite):isNull(false),isPoint(false),isSprite(true){
this->sprite = sprite;
}
CSprite* CTarget::Sprite(){return sprite;}
CPoint CTarget::MapPoint(){return mapPoint;}
bool CTarget::IsPoint(){return isPoint;}
bool CTarget::IsNull(){return isNull;}
bool CTarget::IsSprite(){return isSprite;}
CTarget CTarget::Null(){return CTarget();}
bool CTarget::IsAttackable(CSprite* sprite){
if(IsSprite()){
return Sprite()->IsAttackable() && sprite->Player() !=Sprite()->Player();
}
return false;
}
bool CTarget::IsCollectable(CSprite* sprite){
if(IsSprite()){
return Sprite()->IsCollectable() && InRange(sprite,1);
}
return false;
}
bool CTarget::IsRepairable(CSprite* sprite){
if(IsSprite()){
return Sprite()->IsRepairable() && InRange(sprite,1) && sprite->Player()==Sprite()->Player();
}
return false;
}
bool CTarget::InRange(CSprite* sprite,int range){
CRect rect(this->sprite->GridRect());
rect.InflateRect(range,range,range+1,range+1);
if(rect.PtInRect(sprite->GridPoint())){
return true;
}
return false;
}
}