summaryrefslogtreecommitdiff
path: root/Unit.cpp
blob: e496231c755162f30b13a5e5dc050605d3d0c586 (plain) (blame)
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
/* **************************************
 * 	Includes							*
 * **************************************/
 
#include "Unit.h"
#include "PeasantSpr.c"
 
/* **************************************
 * 	Defines								*
 * **************************************/
 
/* **************************************
 * 	Local variables						*
 * **************************************/

/* Sprites */
static TYPE_SPRITE PeasantSpr;
static TYPE_SPRITE PeasantWalkingSpr;

/* Tables */ 
static uint8_t UnitHPTable[] = { 25 };
static TYPE_SPRITE * UnitSprTable[] = {&PeasantSpr};
static TYPE_SPRITE * UnitWalkingSprTable[] = {&PeasantWalkingSpr};

void UnitInit(void)
{
	PeasantSpr.Data = Peasant_SprData;
	PeasantSpr.w = GfxGetWidthFromSpriteData(Peasant_SprData);
	PeasantSpr.h = GfxGetHeightFromSpriteData(Peasant_SprData);
	PeasantSpr.flip = 0;
	PeasantSpr.rotation = 0;
	PeasantSpr.color = GFX_BLACK;
	
	PeasantWalkingSpr.Data = Peasant_Walking_SprData;
	PeasantWalkingSpr.w = GfxGetWidthFromSpriteData(Peasant_Walking_SprData);
	PeasantWalkingSpr.h = GfxGetHeightFromSpriteData(Peasant_Walking_SprData);
	PeasantWalkingSpr.flip = 0;
	PeasantWalkingSpr.rotation = 0;
	PeasantWalkingSpr.color = GFX_BLACK;
}

void UnitDraw(TYPE_CAMERA * ptrCamera, TYPE_UNIT * ptrUnit, bool bSelected)
{
	uint8_t id = ptrUnit->id;
	TYPE_SPRITE * ptrSpr;
	static uint8_t walk_counter = 0;
	static bool mirror = false;
	
	if(ptrUnit->alive == false)
	{
		return;
	}
	
	ptrSpr = ptrUnit->walk ? UnitWalkingSprTable[id] : UnitSprTable[id];
	
	ptrSpr->rotation = ptrUnit->dir ? ROTCCW : NOROT;
	ptrSpr->flip = mirror ? FLIPH : NOFLIP;
	
	CameraApplyCoordinatesToSprite(	ptrCamera,
									ptrSpr,
									ptrUnit->x,
									ptrUnit->y );
	
	GfxDrawSprite(ptrSpr);
	
	if(	(bSelected == true) && (ptrUnit->selected == false)	)
	{
		TYPE_COLLISION_BLOCK cb;
		
		cb = CameraApplyCoordinatesToCoordinates(ptrCamera, ptrUnit->x, ptrUnit->y);
		
		GfxDrawCircle(cb.x + 3, cb.y + 3, UnitGetWidthFromID(ptrUnit->id) >> 2, GFX_GRAY);
	}
	else if(ptrUnit->selected == true)
	{
		TYPE_COLLISION_BLOCK cb;
		
		cb = CameraApplyCoordinatesToCoordinates(ptrCamera, ptrUnit->x, ptrUnit->y);
		
		GfxDrawCircle(cb.x + 3, cb.y + 3, UnitGetWidthFromID(ptrUnit->id) >> 2, GFX_BLACK);
	}
	
	if(++walk_counter > 10)
	{
		walk_counter = 0;
		mirror = mirror ? true : false;
	}
}

uint8_t UnitGetWidthFromID(uint8_t id)
{
	return GfxGetWidthFromSpriteData(UnitSprTable[id]->Data);
}

uint8_t UnitGetHeightFromID(uint8_t id)
{
	return GfxGetHeightFromSpriteData(UnitSprTable[id]->Data);
}

uint8_t UnitGetHpFromID(uint8_t id)
{
	return UnitHPTable[id];
}

void UnitSelectedOptions(TYPE_UNIT* ptrUnit)
{
	
}