123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- #include "Player.h"
- #include "Game.h"
- Player::Player( Framework::Vec3<float> location, int dimensionId, int entityId )
- : Entity( PlayerEntityType::INSTANCE, location, dimensionId, entityId )
- {
- maxHP = 10;
- currentHP = 10;
- stamina = 10;
- maxStamina = 10;
- hunger = 10;
- maxHunger = 10;
- thirst = 10;
- maxThirst = 10;
- keyState = 0;
- jumping = 0;
- }
- void Player::setName( Framework::Text name )
- {
- this->name = name;
- }
- const char* Player::getName() const
- {
- return name;
- }
- void Player::tick( const Dimension* zDimension, Game* zGame )
- {
- speed = { 0, 0, speed.z };
- if( (keyState | Key::MOVE_FRONT) == keyState )
- speed += {faceDir.x * 1.5f, faceDir.y * 1.5f, 0};
- if( (keyState | Key::MOVE_BACK) == keyState )
- speed += {-faceDir.x * 1.5f, -faceDir.y * 1.5f, 0};
- if( (keyState | Key::MOVE_RIGHT) == keyState )
- {
- Vec3<float> right = Vec3<float>( faceDir ).rotateZ( (float)PI / 2.f );
- speed += {right.x * 1.5f, right.y * 1.5f, 0};
- }
- if( (keyState | Key::MOVE_LEFT) == keyState )
- {
- Vec3<float> left = Vec3<float>( faceDir ).rotateZ( -(float)PI / 2.f );
- speed += {left.x * 1.5f, left.y * 1.5f, 0};
- }
- if( (keyState | Key::MOVE_DOWN) == keyState && !jumping )
- speed.z = -1.5f;
- return Entity::tick( zDimension, zGame );
- }
- void Player::api( Framework::StreamReader* zRequest, NetworkResponse* zResponse )
- {
- char byte;
- zRequest->lese( &byte, 1 );
- switch( byte )
- {
- case 0:
- zRequest->lese( &byte, 1 );
- switch( byte )
- {
- case 0:
- keyState = keyState & ~Key::MOVE_FRONT;
- break;
- case 1:
- keyState = keyState & ~Key::MOVE_LEFT;
- break;
- case 2:
- keyState = keyState & ~Key::MOVE_BACK;
- break;
- case 3:
- keyState = keyState & ~Key::MOVE_RIGHT;
- break;
- case 4:
- if( gravityMultiplier == 0.f )
- speed.z = 0;
- keyState = keyState & ~Key::MOVE_DOWN;
- break;
- case 5:
- keyState = keyState & ~Key::ROTATE_LEFT;
- break;
- case 6:
- keyState = keyState & ~Key::ROTATE_RIGHT;
- break;
- case 7:
- if( gravityMultiplier == 0.f )
- speed.z = 0;
- keyState = keyState & ~Key::MOVE_UP;
- break;
- }
- break;
- case 1:
- zRequest->lese( &byte, 1 );
- switch( byte )
- {
- case 0:
- keyState = keyState | Key::MOVE_FRONT;
- break;
- case 1:
- keyState = keyState | Key::MOVE_LEFT;
- break;
- case 2:
- keyState = keyState | Key::MOVE_BACK;
- break;
- case 3:
- keyState = keyState | Key::MOVE_RIGHT;
- break;
- case 4:
- keyState = keyState | Key::MOVE_DOWN;
- break;
- case 5:
- keyState = keyState | Key::ROTATE_LEFT;
- break;
- case 6:
- keyState = keyState | Key::ROTATE_RIGHT;
- break;
- case 7:
- if( (keyState | Key::MOVE_UP) != keyState )
- {
- if( gravityMultiplier > 0 )
- {
- if( jumping )
- {
- // TODO: check if flight is enabled
- gravityMultiplier = 0;
- jumping = 0;
- speed.z = 1.5f;
- }
- else
- {
- jumping = 1;
- speed.z = 5.f;
- }
- }
- else
- speed.z = 1.5f;
- }
- keyState = keyState | Key::MOVE_UP;
- break;
- }
- break;
- case 2
- :
- zRequest->lese( (char*)&faceDir.x, 4 );
- zRequest->lese( (char*)&faceDir.y, 4 );
- zRequest->lese( (char*)&faceDir.z, 4 );
- }
- }
- void Player::onFall( float collisionSpeed )
- {
- Entity::onFall( collisionSpeed );
- gravityMultiplier = 1.f;
- jumping = 0;
- }
- PlayerEntityType::PlayerEntityType()
- : EntityType( ID )
- {}
- void PlayerEntityType::loadSuperEntity( Entity* zEntity, Framework::StreamReader* zReader ) const
- {}
- void PlayerEntityType::saveSuperEntity( Entity* zEntity, Framework::StreamWriter* zWriter ) const
- {}
- Entity* PlayerEntityType::createEntity( Framework::Vec3<float> position, int dimensionId, Game* zTarget, int entityId ) const
- {
- return new Player( position, dimensionId, entityId );
- }
|