-
Notifications
You must be signed in to change notification settings - Fork 3
/
Player.java
135 lines (111 loc) · 3.25 KB
/
Player.java
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package org.gdc.gdcalaga;
import org.newdawn.slick.Color;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Image;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.geom.Vector2f;
/*
* Upgrades planned for the player:
* Droppable: Health, shields, rapid fire mode, more bullets
* Buyable: Speed
*/
public class Player extends Entity
{
private static final int SIZE_WIDTH = 49;
private static final int SIZE_HEIGHT = 29;
private static final int SPEED = 220;
private float health;
protected Vector2f velocity;
private int alliance;
private static int totalPoints = 0; //the score is static in case we give players multiple lives in the future
Image ship;
public Player(EntityManager manager, Vector2f position)
{
super(manager);
pos.set(position);
size = new Vector2f(SIZE_WIDTH, SIZE_HEIGHT);
velocity = new Vector2f(SPEED, SPEED);
health = 10;
alliance = 1;
shape = new RectShape(pos, size);
try {
ship= new Image("Pics/Player.png");
} catch (SlickException e) {
e.printStackTrace();
}
}
public void update(float delta)
{
RectShape rect = (RectShape)shape;
rect.pos.set(this.pos);
}
public void draw(Graphics g)
{
int drawX = (int)(pos.x - size.x / 2);
int drawY = (int)(pos.y - size.y / 2);
float scale = size.x / ship.getWidth();
ship.draw(drawX, drawY, scale, Color.white);
}
public void moveUp(float delta)
{
pos.y -= velocity.y * delta / 1000;
pos.y = Math.max(size.y / 2, pos.y);
}
public void moveDown(float delta)
{
pos.y += velocity.y * delta / 1000;
pos.y = Math.min(720 - size.y / 2, pos.y);
}
public void moveLeft(float delta)
{
pos.x -= velocity.x * delta / 1000;
pos.x = Math.max(0 + size.x / 2, pos.x);
}
public void moveRight(float delta)
{
pos.x += velocity.x * delta / 1000;
pos.x = Math.min(1280 - size.x / 2, pos.x);
}
public void fire()
{
Vector2f position = new Vector2f(pos.x + size.x / 2, pos.y);
Bullet newBullet = new Bullet(entities, position, 1, alliance);
newBullet.setSpeed(500, 0);
}
public void Collide(Entity other)
{
if(other instanceof Bullet && ((Bullet)other).getAlliance()!=alliance)
{
Hurt(((Bullet)other).getDamage());
}
}
public void Hurt(float dmg){
health-=dmg;
}
public float getHealth()
{
return health;
}
public int getAlliance()
{
return alliance;
}
public static int getTotalPoints()
{
return totalPoints;
}
public static void increaseTotalPoints(int pointValue)
{
totalPoints += pointValue;
}
//my idea here is that ship upgrades will cost points to buy, like in most games.
public static void decreaseTotalPoints(int pointValue)
{
if( (totalPoints - pointValue) >= 0)
{
totalPoints -= pointValue;
}
else
System.out.println("Can't spend any more points!"); //TODO Fix error message
}
}