void Player_Reset(Entity* player) { //destroy all the pointers Entity_Destroy(player); player->playerC = PlayerC_Create(); player->movementC = MovementC_Create(); player->movementC->speed = BASE_PLAYER_SPEED; player->hp = 10; player->weaponsC = WeaponsComponent_Create(false); WeaponsComponent_AddWeaponToInventory(player->weaponsC, Weapon_Create(Weapon_Handgun)); WeaponsComponent_ChangeWeapon(player->weaponsC, Weapon_Handgun); player->weaponsC->bullets[Weapon_Handgun] = 100; player->weaponsC->is_monster = false; }
Entity Player_Create(float x, float y, int w, int h) { Entity p; p.t = Cat_Player; p.sub_category = Player_Normal; p.x = x; p.y = y; p.hp = 10; p.in_dark = false; p.movementC = MovementC_Create(); p.movementC->speed = BASE_PLAYER_SPEED; p.playerC = PlayerC_Create(); p.playerC->cameraX = -screen_width_g/2 + p.x; p.playerC->cameraY = -screen_height_g/2 + p.y; Graphics_SetCamera((float)(-screen_width_g/2 + p.x), (float)(-screen_height_g/2 + p.y)); printf("in character camera x = %f, camera y = %f", (-screen_width_g/2 + p.x), (-screen_height_g/2 + p.y)); p.weaponsC = WeaponsComponent_Create(false); p.weaponsC->bullets[Weapon_Handgun] = 50; //p.weaponsC->bullets[Weapon_GrenadeLauncher] = 100; //BoundingBox_Create(&p, w, h); p.box = BoundingBox_CreateWithOffset(x, y, 16, 16, 2, 2); WeaponsComponent_AddWeaponToInventory(p.weaponsC, Weapon_Create(Weapon_Handgun)); /*WeaponsComponent_AddWeaponToInventory(p.weaponsC, Weapon_Create(Weapon_Shotgun)); WeaponsComponent_AddWeaponToInventory(p.weaponsC, Weapon_Create(Weapon_GrenadeLauncher)); WeaponsComponent_AddWeaponToInventory(p.weaponsC, Weapon_Create(Weapon_AutomaticRifle));*/ WeaponsComponent_ChangeWeapon(p.weaponsC, Weapon_Handgun); p.weaponsC->is_monster = false; return p; }
void Player_PickUpBonus(Entity* player, Entity* bonus) { WeaponsC* wc = player->weaponsC; int type = bonus->sub_category; //Weapon_Type weapon_type = 999; if(type <= Bonus_TheBigGun) { Weapon_Type weapon_type = 0; switch(type) { case Bonus_GrenadeLauncher: weapon_type = Weapon_GrenadeLauncher; break; case Bonus_Rifle: weapon_type = Weapon_AutomaticRifle; break; case Bonus_Shotgun: weapon_type = Weapon_Shotgun; break; case Bonus_Handgun: weapon_type = Weapon_Handgun; break; case Bonus_TheBigGun: weapon_type = Weapon_TheBigGun; break; } if(wc->weapons_inventory[weapon_type] != NULL) { WeaponsComponent_AddAmmo(wc, weapon_type, wc->weapons_inventory[weapon_type]->magazine_max_bullets); } else { WeaponsComponent_AddWeaponToInventory( wc, Weapon_Create(weapon_type)); if(!reloading_g) { wc->bullets[weapon_type] += wc->weapons_inventory[weapon_type]->magazine_max_bullets; } } bonus->alive = false; } else if(type == Bonus_Time_Stop) { if(player->playerC->time_stop < player->playerC->max_time_stop) { player->playerC->time_stop += 10; if(player->playerC->time_stop > player->playerC->max_time_stop) { player->playerC->time_stop = player->playerC->max_time_stop; } bonus->alive = false; } } }
void Player_Create( ) { if( player ) { Player_Free( ); Memory_Free( player ); } player = Memory_New( TPlayer ); // create main pivot player->pivot = Entity_Create( ); // create camera player->cameraPivot = Entity_Create(); Entity_MakeCamera( player->cameraPivot ); Entity_Attach( player->cameraPivot, player->pivot ); player->cameraPivot->localPosition = Vec3_Set( 0, 0.4, 0 ); // add physical body Shape_CreateSphere( &player->shape, 1.0f ); Body_Create( &player->body, &player->shape ); Dynamics_AddBody( &player->body ); player->body.position.y = 10; player->body.elasticity = 0.05f; player->cameraOffset = Vec3_Set( 0, 0.4, 0 ); player->cameraShakeOffset = Vec3_Zero(); player->velocity = Vec3_Zero(); player->destVelocity = Vec3_Zero(); // set parameters player->speed = 4.5f; player->speedMultiplier = 1.8f; player->jumpStrength = 0.1f; player->mouseSensivity = 0.2f; player->yaw = 0.0f; player->pitch = 0.0f; player->maxPitch = M_PI / 2.0; player->pathLength = 0.0f; player->crouchRadius = 0.5f; player->standRadius = 1.0f; player->crouch = false; player->move = false; player->run = false; player->onGround = false; player->cameraShakeCoeff = 0.0f; // ================== // step sounds Player_SetSoundGroup( "data/sounds/dirt", STEP_SOIL, "data/materials/soil.mtl" ); Player_SetSoundGroup( "data/sounds/stonestep", STEP_ROCK, "data/materials/stone.mtl" ); Player_SetSoundGroup( "data/sounds/wood", STEP_WOOD, "data/materials/wood.mtl" ); Player_SetSoundGroup( "data/sounds/metal", STEP_METAL, "data/materials/metal.mtl" ); // set default step sounds player->stepSoundGroup = &player->stepSounds[STEP_SOIL]; player->weapon = Weapon_Create( WEAPON_BLASTER ); Entity_Attach( player->weapon->model, player->cameraPivot ); player->interface.font = Font_LoadFromFile( "data/fonts/font3.ttf", 16 ); player->interface.ammo = GUI_CreateText( Renderer_GetScreenResolutionWidth() - 200, Renderer_GetScreenResolutionHeight() - 200, 190, 190, "Ammo:\n", player->interface.font ); }
void LevelEditor_ReadEntity(FILE* save_file, Entity* buffer, World* world) { Main_Category main_cat; int sub_category; float angle, x, y; fread(&main_cat, sizeof(Main_Category), 1, save_file); fread(&sub_category, sizeof(int), 1, save_file); fread(&x, sizeof(float), 1, save_file); fread(&y, sizeof(float), 1, save_file); fread(&angle, sizeof(float), 1, save_file); free(buffer); buffer = Entity_Create(main_cat, sub_category, x, y, angle, world); fread(&buffer->box, sizeof(Box), 1, save_file); fread(&buffer->alive, sizeof(bool), 1, save_file); fread(&buffer->alive_timer, sizeof(bool), 1, save_file); fread(&buffer->is_ennemy, sizeof(bool), 1, save_file); fread(&buffer->solid, sizeof(bool), 1, save_file); fread(&buffer->collision_direction, sizeof(Direction), 1, save_file); bool has_movementC = false; fread(&has_movementC, sizeof(bool), 1, save_file); if(has_movementC != false) { MovementC* mc = buffer->movementC; fread(&mc->speed, sizeof(float), 1, save_file); fread(&mc->dx, sizeof(float), 1, save_file); fread(&mc->dy, sizeof(float), 1, save_file); } bool is_zombie = false; fread(&is_zombie, sizeof(bool), 1, save_file); if(is_zombie != false) { ZombieC* zc = buffer->zombieC; fread(&zc->aggressive, sizeof(bool), 1, save_file); fread(&zc->idling, sizeof(bool), 1, save_file); fread(&zc->rand_move_timer, sizeof(int), 1, save_file); fread(&zc->zombie_type, sizeof(Zombie_Type), 1, save_file); fread(&zc->dodging_timer, sizeof(int), 1, save_file); fread(&zc->ai_timer, sizeof(int), 1, save_file); fread(&zc->attack_timer, sizeof(int), 1, save_file); fread(&zc->shoot_timer, sizeof(int), 1, save_file); fread(&zc->pattern_timer, sizeof(int), 1, save_file); fread(&zc->shoots_fired_in_pattern, sizeof(int), 1, save_file); fread(&zc->pattern_direction_right, sizeof(bool), 1, save_file); fread(&zc->spot_timer, sizeof(bool), 1, save_file); } bool has_weaponC = true; fread(&has_weaponC, sizeof(bool), 1, save_file); if(has_weaponC) { WeaponsC* wc = buffer->weaponsC; for(int i = 0 ; i < NB_WEAPON_TYPES ; i++) { fread(&wc->bullets[i], sizeof(int), 1, save_file); } fread(&wc->is_monster, sizeof(bool), 1, save_file); fread(&wc->last_reload, sizeof(int), 1, save_file); fread(&wc->reloading, sizeof(bool), 1, save_file); fread(&wc->reload_timer, sizeof(int), 1, save_file); //we read only the weapon type, then //we'll find the weapon in the inventory and set the pointer to it Weapon_Type current_weapon = No_Weapon; fread(¤t_weapon, sizeof(Weapon_Type), 1, save_file); int nb_of_weapons = 0; fread(&nb_of_weapons, sizeof(int), 1, save_file); for(int i = 0 ; i < nb_of_weapons ; i++) { Weapon_Type weapon_type = No_Weapon; fread(&weapon_type, sizeof(Weapon_Type), 1, save_file); Weapon* weapon = Weapon_Create(weapon_type); fread(&weapon->last_shot, sizeof(int), 1, save_file); fread(&weapon->magazine_bullets, sizeof(int), 1, save_file); if(weapon_type == current_weapon) { wc->current_weapon = weapon; } weapon->parent = wc; WeaponsComponent_AddWeaponToInventory(wc, weapon); } } }