src/Player.cc
author nireco
Sun, 07 Dec 2008 19:14:42 +0000
changeset 250 84c553d61291
parent 248 e40ef56dc62c
child 255 99431fdb0dc8
permissions -rw-r--r--
fixed digging, now bugs differently. Changed image_drawing to draw image 1:1
218
86d22fe82b30 add static Engine::graphicsEnabled function and disable player graphics loading when false
terom
parents: 217
diff changeset
     1
236
0048ba274152 move weapons definition out to Weapons.cc
terom
parents: 235
diff changeset
     2
#include "Player.hh"
0048ba274152 move weapons definition out to Weapons.cc
terom
parents: 235
diff changeset
     3
#include "Weapons.hh"
199
f5c86420facd Jeejee, hirvee hinaus ohi toistaseks.
saiam
parents: 198
diff changeset
     4
#include "Engine.hh"
233
ff4ecea83cf5 start using CL_ResourceManager, change most draw methods to take a Graphics*, implment even better input handling, and draw weapon names
terom
parents: 231
diff changeset
     5
#include "Graphics.hh"
198
8698cbb101df ja viel? lis??
ekku
parents:
diff changeset
     6
209
68cc4248a508 sneak in some ugly ugly ugly Multiple Inheritance that hopefully nobody ever notices
terom
parents: 208
diff changeset
     7
#include <cstdlib>
215
69de8d9fcc0a image is working.. well.. run it from build/src folder.
nireco
parents: 213
diff changeset
     8
#include <ClanLib/display.h>
216
a384bf0634f0 a bit better image_drawing
nireco
parents: 215
diff changeset
     9
#include <string>
218
86d22fe82b30 add static Engine::graphicsEnabled function and disable player graphics loading when false
terom
parents: 217
diff changeset
    10
#include <cassert>
215
69de8d9fcc0a image is working.. well.. run it from build/src folder.
nireco
parents: 213
diff changeset
    11
220
1c92222af6d3 use Player static vars for texture loading, and load from the PROJECT_DATA_DIR path
terom
parents: 219
diff changeset
    12
// player static state
1c92222af6d3 use Player static vars for texture loading, and load from the PROJECT_DATA_DIR path
terom
parents: 219
diff changeset
    13
bool Player::skin_loaded = false;
1c92222af6d3 use Player static vars for texture loading, and load from the PROJECT_DATA_DIR path
terom
parents: 219
diff changeset
    14
CL_Surface Player::skin_surface;
215
69de8d9fcc0a image is working.. well.. run it from build/src folder.
nireco
parents: 213
diff changeset
    15
220
1c92222af6d3 use Player static vars for texture loading, and load from the PROJECT_DATA_DIR path
terom
parents: 219
diff changeset
    16
// XXX: give these better names and move elsewhere
248
e40ef56dc62c scrolling looks like it works
nireco
parents: 241
diff changeset
    17
const int img_num_aim = 2;
219
ec472f8ac482 fixed walkingspeed and improved drawing
nireco
parents: 218
diff changeset
    18
const int img_num_step = 4;
248
e40ef56dc62c scrolling looks like it works
nireco
parents: 241
diff changeset
    19
const int img_height = 20;
e40ef56dc62c scrolling looks like it works
nireco
parents: 241
diff changeset
    20
const int img_width = 17;
216
a384bf0634f0 a bit better image_drawing
nireco
parents: 215
diff changeset
    21
198
8698cbb101df ja viel? lis??
ekku
parents:
diff changeset
    22
Player::Player(GameState &state, Vector position, bool visible) : 
236
0048ba274152 move weapons definition out to Weapons.cc
terom
parents: 235
diff changeset
    23
    PhysicsObject(state.world, PLAYER_MASS, position, Vector(0, 0)), state(state), visible(visible),
239
550397d9d479 implement network weapon changes and fix weapon firing
terom
parents: 237
diff changeset
    24
    weapons(buildWeaponsList()), selectedWeapon(0), animation_step(0), rope(*this) 
222
293ddf4c067d reorganize PhysicsObject/Player/Projectile lists so that PhysicsObject doesn't need to know about its subclasses anymore, and PhysicsWorld doesn't need to know about GameState
ekku
parents: 221
diff changeset
    25
{
236
0048ba274152 move weapons definition out to Weapons.cc
terom
parents: 235
diff changeset
    26
    // XXX: populate weapons from somewhere else
0048ba274152 move weapons definition out to Weapons.cc
terom
parents: 235
diff changeset
    27
220
1c92222af6d3 use Player static vars for texture loading, and load from the PROJECT_DATA_DIR path
terom
parents: 219
diff changeset
    28
    // build the player's shape
1c92222af6d3 use Player static vars for texture loading, and load from the PROJECT_DATA_DIR path
terom
parents: 219
diff changeset
    29
    // XXX: these dimensions are incorrect...
198
8698cbb101df ja viel? lis??
ekku
parents:
diff changeset
    30
    std::vector<Vector> shape(4);
8698cbb101df ja viel? lis??
ekku
parents:
diff changeset
    31
    shape[0] = Vector(0,-9);
8698cbb101df ja viel? lis??
ekku
parents:
diff changeset
    32
    shape[1] = Vector(6,0);
8698cbb101df ja viel? lis??
ekku
parents:
diff changeset
    33
    shape[2] = Vector(0,9); 
8698cbb101df ja viel? lis??
ekku
parents:
diff changeset
    34
    shape[3] = Vector(-6,0);
220
1c92222af6d3 use Player static vars for texture loading, and load from the PROJECT_DATA_DIR path
terom
parents: 219
diff changeset
    35
198
8698cbb101df ja viel? lis??
ekku
parents:
diff changeset
    36
    // Initialize the shape of the player (salmiakki shape)
8698cbb101df ja viel? lis??
ekku
parents:
diff changeset
    37
    setShape(shape);
220
1c92222af6d3 use Player static vars for texture loading, and load from the PROJECT_DATA_DIR path
terom
parents: 219
diff changeset
    38
1c92222af6d3 use Player static vars for texture loading, and load from the PROJECT_DATA_DIR path
terom
parents: 219
diff changeset
    39
    // XXX: this should be a PhysicsObject constructor arg
198
8698cbb101df ja viel? lis??
ekku
parents:
diff changeset
    40
    collision_elasticity = PLAYER_COLLISION_ELASTICITY;
8698cbb101df ja viel? lis??
ekku
parents:
diff changeset
    41
}
236
0048ba274152 move weapons definition out to Weapons.cc
terom
parents: 235
diff changeset
    42
209
68cc4248a508 sneak in some ugly ugly ugly Multiple Inheritance that hopefully nobody ever notices
terom
parents: 208
diff changeset
    43
void Player::handleDig (Vector position, float radius) {
235
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    44
    // XXX: clean this bit up
250
84c553d61291 fixed digging, now bugs differently. Changed image_drawing to draw image 1:1
nireco
parents: 248
diff changeset
    45
    // calculate new position and velocity
84c553d61291 fixed digging, now bugs differently. Changed image_drawing to draw image 1:1
nireco
parents: 248
diff changeset
    46
    Vector shotPosition = position + getDirection() * PROJECTILE_START_DISTANCE;
84c553d61291 fixed digging, now bugs differently. Changed image_drawing to draw image 1:1
nireco
parents: 248
diff changeset
    47
    // execute
84c553d61291 fixed digging, now bugs differently. Changed image_drawing to draw image 1:1
nireco
parents: 248
diff changeset
    48
    new Projectile(state, shotPosition, Vector(0, 0), false, radius, 1);
209
68cc4248a508 sneak in some ugly ugly ugly Multiple Inheritance that hopefully nobody ever notices
terom
parents: 208
diff changeset
    49
}
68cc4248a508 sneak in some ugly ugly ugly Multiple Inheritance that hopefully nobody ever notices
terom
parents: 208
diff changeset
    50
236
0048ba274152 move weapons definition out to Weapons.cc
terom
parents: 235
diff changeset
    51
void Player::handleCreateProjectile (Weapon *weapon, Vector position, Vector velocity) {
0048ba274152 move weapons definition out to Weapons.cc
terom
parents: 235
diff changeset
    52
    new Projectile(state, position, velocity, true, weapon->getExplosionRadius());
199
f5c86420facd Jeejee, hirvee hinaus ohi toistaseks.
saiam
parents: 198
diff changeset
    53
}
237
3d5465bcb67d tweak weapon params and improve weapon changing
terom
parents: 236
diff changeset
    54
        
3d5465bcb67d tweak weapon params and improve weapon changing
terom
parents: 236
diff changeset
    55
void Player::handleChangeWeapon (unsigned int weaponIndex) {
3d5465bcb67d tweak weapon params and improve weapon changing
terom
parents: 236
diff changeset
    56
    assert(weaponIndex < weapons.size());
3d5465bcb67d tweak weapon params and improve weapon changing
terom
parents: 236
diff changeset
    57
3d5465bcb67d tweak weapon params and improve weapon changing
terom
parents: 236
diff changeset
    58
    selectedWeapon = weaponIndex;
3d5465bcb67d tweak weapon params and improve weapon changing
terom
parents: 236
diff changeset
    59
}
199
f5c86420facd Jeejee, hirvee hinaus ohi toistaseks.
saiam
parents: 198
diff changeset
    60
221
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
    61
void Player::printDebugInfo (void) {
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
    62
    Engine::log(DEBUG, "layer.debug") << "In air: " << this->inAir;
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
    63
}
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
    64
        
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
    65
void Player::tick (TimeMS dt) {
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
    66
    // let PhysicsObject execute
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
    67
    PhysicsObject::tick(dt);
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
    68
    
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
    69
    // tick current weapon reload
236
0048ba274152 move weapons definition out to Weapons.cc
terom
parents: 235
diff changeset
    70
    if (getCurrentWeapon())
0048ba274152 move weapons definition out to Weapons.cc
terom
parents: 235
diff changeset
    71
        getCurrentWeapon()->tickReload(dt);
221
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
    72
}
241
e95b1602d836 implement the ROT (Rope Over TCP) protocol
terom
parents: 239
diff changeset
    73
        
e95b1602d836 implement the ROT (Rope Over TCP) protocol
terom
parents: 239
diff changeset
    74
void Player::handleRopeState (RopeState state) {
e95b1602d836 implement the ROT (Rope Over TCP) protocol
terom
parents: 239
diff changeset
    75
    
e95b1602d836 implement the ROT (Rope Over TCP) protocol
terom
parents: 239
diff changeset
    76
}
e95b1602d836 implement the ROT (Rope Over TCP) protocol
terom
parents: 239
diff changeset
    77
e95b1602d836 implement the ROT (Rope Over TCP) protocol
terom
parents: 239
diff changeset
    78
void Player::handleRopeLength (float length) {
e95b1602d836 implement the ROT (Rope Over TCP) protocol
terom
parents: 239
diff changeset
    79
e95b1602d836 implement the ROT (Rope Over TCP) protocol
terom
parents: 239
diff changeset
    80
}
199
f5c86420facd Jeejee, hirvee hinaus ohi toistaseks.
saiam
parents: 198
diff changeset
    81
236
0048ba274152 move weapons definition out to Weapons.cc
terom
parents: 235
diff changeset
    82
void LocalPlayer::fireWeapon (Weapon *weapon) {
223
2fcaf54ed37b basic network-projectiles
terom
parents: 222
diff changeset
    83
    // update reload timer
236
0048ba274152 move weapons definition out to Weapons.cc
terom
parents: 235
diff changeset
    84
    weapon->reload();
223
2fcaf54ed37b basic network-projectiles
terom
parents: 222
diff changeset
    85
    
235
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    86
    // calculate new position and velocity
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    87
    Vector shotPosition = position + getDirection() * PROJECTILE_START_DISTANCE;
236
0048ba274152 move weapons definition out to Weapons.cc
terom
parents: 235
diff changeset
    88
    Vector shotVelocity = velocity + getDirection() * weapon->getSpeed();
223
2fcaf54ed37b basic network-projectiles
terom
parents: 222
diff changeset
    89
2fcaf54ed37b basic network-projectiles
terom
parents: 222
diff changeset
    90
    // execute
2fcaf54ed37b basic network-projectiles
terom
parents: 222
diff changeset
    91
    handleCreateProjectile(weapon, shotPosition, shotVelocity);
2fcaf54ed37b basic network-projectiles
terom
parents: 222
diff changeset
    92
}
237
3d5465bcb67d tweak weapon params and improve weapon changing
terom
parents: 236
diff changeset
    93
        
3d5465bcb67d tweak weapon params and improve weapon changing
terom
parents: 236
diff changeset
    94
void LocalPlayer::changeWeapon (int delta) {
3d5465bcb67d tweak weapon params and improve weapon changing
terom
parents: 236
diff changeset
    95
    // need to handle negative deltas
3d5465bcb67d tweak weapon params and improve weapon changing
terom
parents: 236
diff changeset
    96
    handleChangeWeapon((weapons.size() + selectedWeapon + delta) % weapons.size());
3d5465bcb67d tweak weapon params and improve weapon changing
terom
parents: 236
diff changeset
    97
}
223
2fcaf54ed37b basic network-projectiles
terom
parents: 222
diff changeset
    98
221
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
    99
void LocalPlayer::handleInput (PlayerInput input) {
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   100
    // Movement force, vertical is always zero
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   101
    Vector move_force = Vector(0, 0); 
199
f5c86420facd Jeejee, hirvee hinaus ohi toistaseks.
saiam
parents: 198
diff changeset
   102
221
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   103
    // Crosshair angle change
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   104
    float aim_delta = 0; 
199
f5c86420facd Jeejee, hirvee hinaus ohi toistaseks.
saiam
parents: 198
diff changeset
   105
221
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   106
    // handle movement left/right by applying a horizontal force, but limit the player's speed
235
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
   107
    // also update facing if needed
221
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   108
    if ((input & INPUT_MOVE_LEFT) && (velocity.x > -PLAYER_MAX_SPEED)) {
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   109
        setFacing(false);
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   110
        move_force.x -= PLAYER_MOVE_FORCE;
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   111
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   112
    }
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   113
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   114
    if ((input & INPUT_MOVE_RIGHT) && (velocity.x < PLAYER_MAX_SPEED)) {
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   115
        setFacing(true);
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   116
        move_force.x += PLAYER_MOVE_FORCE;
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   117
    }
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   118
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   119
    // handle aim by creating a aim angle delta
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   120
    if (input & INPUT_AIM_UP)
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   121
        aim_delta += CROSSHAIR_ANGLE_SPEED;
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   122
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   123
    if (input & INPUT_AIM_DOWN)
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   124
        aim_delta -= CROSSHAIR_ANGLE_SPEED;
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   125
    
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   126
    // handle jumping by invoking the jump method
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   127
    // XXX: the direction should ideally be given using some other method
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   128
    if (input & INPUT_JUMP) {
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   129
        if (input & INPUT_MOVE_LEFT)
199
f5c86420facd Jeejee, hirvee hinaus ohi toistaseks.
saiam
parents: 198
diff changeset
   130
            jump(-1);
221
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   131
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   132
        else if (input & INPUT_MOVE_RIGHT)
199
f5c86420facd Jeejee, hirvee hinaus ohi toistaseks.
saiam
parents: 198
diff changeset
   133
            jump(1);
221
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   134
199
f5c86420facd Jeejee, hirvee hinaus ohi toistaseks.
saiam
parents: 198
diff changeset
   135
        else
f5c86420facd Jeejee, hirvee hinaus ohi toistaseks.
saiam
parents: 198
diff changeset
   136
            jump(0);
f5c86420facd Jeejee, hirvee hinaus ohi toistaseks.
saiam
parents: 198
diff changeset
   137
    }
221
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   138
    
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   139
    // outsource digging to Player::handleDig, since this modifies the Terrain and Network needs to know
235
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
   140
    if (input & INPUT_DIG)
221
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   141
        handleDig(position, 15);
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   142
    
237
3d5465bcb67d tweak weapon params and improve weapon changing
terom
parents: 236
diff changeset
   143
    // change weapon back/forth
3d5465bcb67d tweak weapon params and improve weapon changing
terom
parents: 236
diff changeset
   144
    if (input & INPUT_CHANGE_PREV)
3d5465bcb67d tweak weapon params and improve weapon changing
terom
parents: 236
diff changeset
   145
        changeWeapon(-1);
3d5465bcb67d tweak weapon params and improve weapon changing
terom
parents: 236
diff changeset
   146
3d5465bcb67d tweak weapon params and improve weapon changing
terom
parents: 236
diff changeset
   147
    if (input & INPUT_CHANGE_NEXT)
3d5465bcb67d tweak weapon params and improve weapon changing
terom
parents: 236
diff changeset
   148
        changeWeapon(+1);
213
5bd5afab4673 some stuff to Weapon and shoot
nireco
parents: 212
diff changeset
   149
221
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   150
    // validate shoot events, and then outsource to handleShoot so Network can intercept it
236
0048ba274152 move weapons definition out to Weapons.cc
terom
parents: 235
diff changeset
   151
    if ((input & INPUT_SHOOT) && getCurrentWeapon()->canShoot())
0048ba274152 move weapons definition out to Weapons.cc
terom
parents: 235
diff changeset
   152
        fireWeapon(getCurrentWeapon());
221
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   153
    
241
e95b1602d836 implement the ROT (Rope Over TCP) protocol
terom
parents: 239
diff changeset
   154
    // rope throw+release+changeLength, but supress spurious events
225
22ecb9cb9245 Rope can be drawn.
ekku
parents: 223
diff changeset
   155
    if (input & INPUT_ROPE)
235
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
   156
        rope.throwRope();
225
22ecb9cb9245 Rope can be drawn.
ekku
parents: 223
diff changeset
   157
241
e95b1602d836 implement the ROT (Rope Over TCP) protocol
terom
parents: 239
diff changeset
   158
    if (input & INPUT_UNROPE && rope.getState() != ROPE_FOLDED)
229
355e46effa41 Rope works
ekku
parents: 225
diff changeset
   159
        rope.release();
355e46effa41 Rope works
ekku
parents: 225
diff changeset
   160
241
e95b1602d836 implement the ROT (Rope Over TCP) protocol
terom
parents: 239
diff changeset
   161
    if (input & INPUT_ROPE_UP && rope.getState() == ROPE_FIXED)
235
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
   162
        rope.changeLength(-ROPE_GROWTH_RATE);
231
5085764e1dbb Rope length changing possible
ekku
parents: 229
diff changeset
   163
241
e95b1602d836 implement the ROT (Rope Over TCP) protocol
terom
parents: 239
diff changeset
   164
    if (input & INPUT_ROPE_DOWN && rope.getState() == ROPE_FIXED)
235
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
   165
        rope.changeLength(ROPE_GROWTH_RATE);
231
5085764e1dbb Rope length changing possible
ekku
parents: 229
diff changeset
   166
235
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
   167
    // XXX: how should this be written? What does this do? Probably broken under network play
221
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   168
    if (move_force.x != 0) 
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   169
        animation_step = (animation_step + 1) % img_num_step;
199
f5c86420facd Jeejee, hirvee hinaus ohi toistaseks.
saiam
parents: 198
diff changeset
   170
221
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   171
    // apply aim delta
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   172
    if (aim_delta)
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   173
        changeAim(aim_delta);
219
ec472f8ac482 fixed walkingspeed and improved drawing
nireco
parents: 218
diff changeset
   174
221
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   175
    // apply force
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   176
    if (!move_force.zero())
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   177
        applyForce(move_force);
199
f5c86420facd Jeejee, hirvee hinaus ohi toistaseks.
saiam
parents: 198
diff changeset
   178
}
f5c86420facd Jeejee, hirvee hinaus ohi toistaseks.
saiam
parents: 198
diff changeset
   179
236
0048ba274152 move weapons definition out to Weapons.cc
terom
parents: 235
diff changeset
   180
Weapon* Player::getCurrentWeapon() {
235
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
   181
    return weapons[selectedWeapon % weapons.size()];
212
4389c1e6b9b8 Weapon.cc&hh
nireco
parents: 211
diff changeset
   182
}
215
69de8d9fcc0a image is working.. well.. run it from build/src folder.
nireco
parents: 213
diff changeset
   183
248
e40ef56dc62c scrolling looks like it works
nireco
parents: 241
diff changeset
   184
void Player::draw (Graphics *g, Vector camera) {
233
ff4ecea83cf5 start using CL_ResourceManager, change most draw methods to take a Graphics*, implment even better input handling, and draw weapon names
terom
parents: 231
diff changeset
   185
    CL_GraphicContext *gc = g->get_gc();
248
e40ef56dc62c scrolling looks like it works
nireco
parents: 241
diff changeset
   186
    int cx = (int)camera.x, cy = (int)camera.y;
233
ff4ecea83cf5 start using CL_ResourceManager, change most draw methods to take a Graphics*, implment even better input handling, and draw weapon names
terom
parents: 231
diff changeset
   187
216
a384bf0634f0 a bit better image_drawing
nireco
parents: 215
diff changeset
   188
    int aim_img_idx = (int)((1 - (getAim()+KG_PI/2)/KG_PI)*img_num_aim);
219
ec472f8ac482 fixed walkingspeed and improved drawing
nireco
parents: 218
diff changeset
   189
    int step_img_idx = animation_step%img_num_step;
217
de56d9d16705 and yet better image drawing
nireco
parents: 216
diff changeset
   190
220
1c92222af6d3 use Player static vars for texture loading, and load from the PROJECT_DATA_DIR path
terom
parents: 219
diff changeset
   191
    // load skin image if not yet loaded
1c92222af6d3 use Player static vars for texture loading, and load from the PROJECT_DATA_DIR path
terom
parents: 219
diff changeset
   192
    if (!skin_loaded) {
1c92222af6d3 use Player static vars for texture loading, and load from the PROJECT_DATA_DIR path
terom
parents: 219
diff changeset
   193
        skin_surface = CL_Surface(PLAYER_SKIN_PATH);
1c92222af6d3 use Player static vars for texture loading, and load from the PROJECT_DATA_DIR path
terom
parents: 219
diff changeset
   194
        skin_loaded = true;
1c92222af6d3 use Player static vars for texture loading, and load from the PROJECT_DATA_DIR path
terom
parents: 219
diff changeset
   195
    }
221
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   196
    
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   197
    // XXX: this logic looks weird
250
84c553d61291 fixed digging, now bugs differently. Changed image_drawing to draw image 1:1
nireco
parents: 248
diff changeset
   198
    CL_Rectf destination(position.x - img_width/2 -cx, position.y - img_height/2 -cy, position.x + img_width/2 -cx, position.y + img_height/2 -cy);
218
86d22fe82b30 add static Engine::graphicsEnabled function and disable player graphics loading when false
terom
parents: 217
diff changeset
   199
86d22fe82b30 add static Engine::graphicsEnabled function and disable player graphics loading when false
terom
parents: 217
diff changeset
   200
    if (!getFacing()) {
250
84c553d61291 fixed digging, now bugs differently. Changed image_drawing to draw image 1:1
nireco
parents: 248
diff changeset
   201
        destination = CL_Rect(position.x + img_width/2 -cx, position.y - img_height/2 -cy, position.x - img_width/2 -cx, position.y + img_height/2 -cy);
217
de56d9d16705 and yet better image drawing
nireco
parents: 216
diff changeset
   202
    }
de56d9d16705 and yet better image drawing
nireco
parents: 216
diff changeset
   203
220
1c92222af6d3 use Player static vars for texture loading, and load from the PROJECT_DATA_DIR path
terom
parents: 219
diff changeset
   204
    skin_surface.draw_subpixel(
221
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   205
            CL_Rectf(
248
e40ef56dc62c scrolling looks like it works
nireco
parents: 241
diff changeset
   206
                step_img_idx * img_width, 
e40ef56dc62c scrolling looks like it works
nireco
parents: 241
diff changeset
   207
                aim_img_idx * img_height, 
e40ef56dc62c scrolling looks like it works
nireco
parents: 241
diff changeset
   208
                (1 + step_img_idx) * img_width, 
e40ef56dc62c scrolling looks like it works
nireco
parents: 241
diff changeset
   209
                (aim_img_idx + 1) * img_height
221
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   210
            ), 
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   211
            destination, gc
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 220
diff changeset
   212
    );
217
de56d9d16705 and yet better image drawing
nireco
parents: 216
diff changeset
   213
    
215
69de8d9fcc0a image is working.. well.. run it from build/src folder.
nireco
parents: 213
diff changeset
   214
    const uint16_t chlen = 10;
248
e40ef56dc62c scrolling looks like it works
nireco
parents: 241
diff changeset
   215
    int x = position.x -cx;
e40ef56dc62c scrolling looks like it works
nireco
parents: 241
diff changeset
   216
    int y = position.y -cy;
218
86d22fe82b30 add static Engine::graphicsEnabled function and disable player graphics loading when false
terom
parents: 217
diff changeset
   217
    
86d22fe82b30 add static Engine::graphicsEnabled function and disable player graphics loading when false
terom
parents: 217
diff changeset
   218
    // draw "crosshair"
215
69de8d9fcc0a image is working.. well.. run it from build/src folder.
nireco
parents: 213
diff changeset
   219
    if (facingRight) {
216
a384bf0634f0 a bit better image_drawing
nireco
parents: 215
diff changeset
   220
        gc->draw_line(x + std::cos(aim)*chlen/2, 
a384bf0634f0 a bit better image_drawing
nireco
parents: 215
diff changeset
   221
                      y - std::sin(aim)*chlen/2,
215
69de8d9fcc0a image is working.. well.. run it from build/src folder.
nireco
parents: 213
diff changeset
   222
                      x + std::cos(aim)*chlen,
69de8d9fcc0a image is working.. well.. run it from build/src folder.
nireco
parents: 213
diff changeset
   223
                      y - std::sin(aim)*chlen,
69de8d9fcc0a image is working.. well.. run it from build/src folder.
nireco
parents: 213
diff changeset
   224
                      CL_Color::black);
69de8d9fcc0a image is working.. well.. run it from build/src folder.
nireco
parents: 213
diff changeset
   225
    } else {
216
a384bf0634f0 a bit better image_drawing
nireco
parents: 215
diff changeset
   226
        gc->draw_line(x - std::cos(aim)*chlen/2, 
a384bf0634f0 a bit better image_drawing
nireco
parents: 215
diff changeset
   227
                      y - std::sin(aim)*chlen/2,
215
69de8d9fcc0a image is working.. well.. run it from build/src folder.
nireco
parents: 213
diff changeset
   228
                      x - std::cos(aim)*chlen,
69de8d9fcc0a image is working.. well.. run it from build/src folder.
nireco
parents: 213
diff changeset
   229
                      y - std::sin(aim)*chlen,
69de8d9fcc0a image is working.. well.. run it from build/src folder.
nireco
parents: 213
diff changeset
   230
                      CL_Color::black);
69de8d9fcc0a image is working.. well.. run it from build/src folder.
nireco
parents: 213
diff changeset
   231
    }
233
ff4ecea83cf5 start using CL_ResourceManager, change most draw methods to take a Graphics*, implment even better input handling, and draw weapon names
terom
parents: 231
diff changeset
   232
248
e40ef56dc62c scrolling looks like it works
nireco
parents: 241
diff changeset
   233
    rope.draw(g, camera);
215
69de8d9fcc0a image is working.. well.. run it from build/src folder.
nireco
parents: 213
diff changeset
   234
}
69de8d9fcc0a image is working.. well.. run it from build/src folder.
nireco
parents: 213
diff changeset
   235
248
e40ef56dc62c scrolling looks like it works
nireco
parents: 241
diff changeset
   236
void LocalPlayer::draw (Graphics *g, bool displayWeapon, Vector camera) {
233
ff4ecea83cf5 start using CL_ResourceManager, change most draw methods to take a Graphics*, implment even better input handling, and draw weapon names
terom
parents: 231
diff changeset
   237
    // superclass draw
248
e40ef56dc62c scrolling looks like it works
nireco
parents: 241
diff changeset
   238
    Player::draw(g, camera);
219
ec472f8ac482 fixed walkingspeed and improved drawing
nireco
parents: 218
diff changeset
   239
233
ff4ecea83cf5 start using CL_ResourceManager, change most draw methods to take a Graphics*, implment even better input handling, and draw weapon names
terom
parents: 231
diff changeset
   240
    // display weapon name?
236
0048ba274152 move weapons definition out to Weapons.cc
terom
parents: 235
diff changeset
   241
    if (displayWeapon && getCurrentWeapon()) {
0048ba274152 move weapons definition out to Weapons.cc
terom
parents: 235
diff changeset
   242
        const std::string weaponName = getCurrentWeapon()->getName();
0048ba274152 move weapons definition out to Weapons.cc
terom
parents: 235
diff changeset
   243
233
ff4ecea83cf5 start using CL_ResourceManager, change most draw methods to take a Graphics*, implment even better input handling, and draw weapon names
terom
parents: 231
diff changeset
   244
        g->getSimpleFont().draw(
248
e40ef56dc62c scrolling looks like it works
nireco
parents: 241
diff changeset
   245
                position.x - camera.x - g->getSimpleFont().get_width(weaponName) / 2,
e40ef56dc62c scrolling looks like it works
nireco
parents: 241
diff changeset
   246
                position.y - camera.y - 20,
236
0048ba274152 move weapons definition out to Weapons.cc
terom
parents: 235
diff changeset
   247
                weaponName,
233
ff4ecea83cf5 start using CL_ResourceManager, change most draw methods to take a Graphics*, implment even better input handling, and draw weapon names
terom
parents: 231
diff changeset
   248
                g->get_gc()
ff4ecea83cf5 start using CL_ResourceManager, change most draw methods to take a Graphics*, implment even better input handling, and draw weapon names
terom
parents: 231
diff changeset
   249
        );
ff4ecea83cf5 start using CL_ResourceManager, change most draw methods to take a Graphics*, implment even better input handling, and draw weapon names
terom
parents: 231
diff changeset
   250
    }
ff4ecea83cf5 start using CL_ResourceManager, change most draw methods to take a Graphics*, implment even better input handling, and draw weapon names
terom
parents: 231
diff changeset
   251
}
235
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
   252