示例#1
0
文件: player.c 项目: Uint1024/CZombie
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;
}
示例#2
0
文件: player.c 项目: Uint1024/CZombie
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;
}
示例#3
0
文件: player.c 项目: Uint1024/CZombie
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;
        }

    }

}
示例#4
0
文件: player.c 项目: mrDIMAS/OldTech
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 );
}
示例#5
0
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(&current_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);
        }
    }


}