Esempio n. 1
0
result_t BinarySerializeNode::WriteToBuffer ( const void* _pData, uint _size )
{
    //
    uint originalSize = m_Capacity;
    uint restSize = m_Capacity - m_CurPos;

    ex_assert_return ( originalSize > 0, EResult::write_failed, "The size of the node can't be zero for writing." );

    // if rest size less than the size we try to write, enlarge the size twice
    while ( restSize < _size )
    {
        m_Capacity *= 2;
        restSize = m_Capacity - m_CurPos;
    }

    // resize 
    if ( m_Capacity > originalSize )
    {
        m_pData = ex_realloc( m_pData, m_Capacity );
    }

    // copy the data to m_pData
    memcpy ( (void*)((int8*)m_pData + m_CurPos), _pData, _size );
    m_CurPos += _size;

    return EResult::ok;
}
Esempio n. 2
0
int main (void) {
    int i = 0;
    void *buffer[BUF_SIZE];

    ex_sdk_init ();

    i = 0;
    while ( i < BUF_SIZE ) {
        buffer[i] = ex_malloc( EX_MB(1) );
        ++i;
    }

    i = 0;
    while ( i < BUF_SIZE ) {
        buffer[i] = ex_realloc( buffer[i], EX_KB(1) * rand() % 2048  );
        ++i;
    }

    i = 0;
    while ( i < BUF_SIZE ) {
        ex_free(buffer[i]);
        ++i;
    }

    ex_sdk_deinit ();
    return 0;
}
Esempio n. 3
0
void spawn_tile_collision (Spawn *self, Tile *tile, Map *map) {
    /* Kartenrand / unbegehbar */
    if(self->x >= map->x || self->y >= map->y || !tile_can_walk(*tile)) {
        /* umkehren */
        switch(self->direction) {
            case NORTH:
                self->y++;
                break;
            case SOUTH:
                self->y--;
                break;
            case EAST:
                self->x--;
                break;
            case WEST:
                self->x++;
                break;
        }
        if (tile->type == TILE_TYPE_WALL) {
            damage_spawn(self, 1, map);
            push_msg("Kopf -> Wand (-1HP)", map);
        }
    }
    else {
        if (tile->number_of_items > 0) {
            /* Items aufsammeln. */
            self->inventory = ex_realloc(self->inventory, (self->inventory_size + tile->number_of_items) * sizeof(Item*));
            for (unsigned int ii = 0; ii < tile->number_of_items; ++ii) {
                if(tile->items[ii]->type != ITEM_TYPE_INVALID) {
                    self->inventory[++self->inventory_size - 1] = tile->items[ii];
                }
            }
            /* Aufzählen, was aufgesammelt */
            for(unsigned int i = 0; i < tile->number_of_items; ++i) {
                if(tile->items[i]->type != ITEM_TYPE_INVALID) {
                    char* item_message = (char*)ex_calloc(22 + strlen(tile->items[i]->name), 1);                
                    sprintf(item_message, "Du hast aufgenommen: %s", tile->items[i]->name);
                    push_msg(item_message, map);
                    free(item_message);
                }
            }
            self->selected_item=self->inventory_size-1;
            
            free(tile->items);
            tile->items = NULL;
            tile->number_of_items = 0;
        } 
        /* Ausgang */
        else if(tile->type == TILE_TYPE_EXIT) {
            map->finished = 1;
        }
    }
}
Esempio n. 4
0
/**
 * Fügt einem Spawn damage Punkte Schaden zu, entfernt ihn von der Map
 * und lässt seine Items fallen, falls es ihn tötet.
 */
void damage_spawn(Spawn *spawn, unsigned int damage, Map *map){
    /*Sonderbahandlung für den Spieler*/
    if(spawn->type==SPAWN_TYPE_PLAYER){
        if(spawn->hp<=damage)
            spawn->hp=0;
        else
            spawn->hp-=damage;
    }
    else{
        /*wenns ihn tötet, entfernen*/
        if (spawn->hp <= damage) {
            Spawn **new_spawns = ex_calloc(map->number_of_spawns - 1, sizeof(Spawn *));
            for (unsigned int ii = 0, jj = 0; ii < map->number_of_spawns; ++ii) {
                if (map->spawns[ii] != spawn) {
                    new_spawns[jj++] = map->spawns[ii];
                }
            }
            free(map->spawns);
            map->spawns = new_spawns;
            --map->number_of_spawns;
    
            /* Items fallen lassen */
            if(spawn->inventory_size > 0) {
                unsigned int i, j, new_size;
                Tile* died_here = &map->tiles[spawn->y * map->x + spawn->x];
                new_size = died_here->number_of_items + spawn->inventory_size;
                died_here->items = (Item**)ex_realloc(died_here->items, new_size * sizeof(Item*));
    
                for(i = died_here->number_of_items, j = 0; i < new_size && j < spawn->inventory_size; ++i, ++j, ++died_here->number_of_items, --spawn->inventory_size) {
                    died_here->items[i] = spawn->inventory[j];
                }
    
                free(spawn->inventory);
                spawn->inventory = NULL;
            }
            free_spawn(spawn);
        }
        else {
            spawn->hp -= damage;
        }
    }
}
Esempio n. 5
0
result_t BinarySerializeNode::loadFromFile ( const char* _fileName )
{
    IFile::smart_ptr_t spFile = futil::file::readonly<PhysicalFile>(_fileName);
    if ( spFile )
    {
        // read raw data
        m_Capacity = uint(spFile->size());
        m_CurPos = 0;
        m_pData = ex_realloc ( m_pData, m_Capacity );

        //
        spFile->read ( m_pData, m_Capacity );

        //
        setLoading ();
    }
    else 
    {
        return EResult::not_found;
    }

    return EResult::ok;
}
Esempio n. 6
0
result_t BinarySerializeNode::loadFromFile ( IFile::smart_ptr_t _spFile, futil::sz_t _bytesToLoad )
{
    if ( _spFile )
    {
        //
        futil::sz_t restBytes = _spFile->sizeToEnd();
        ex_assert_return ( _bytesToLoad <= restBytes, EResult::read_failed, "the rest bytes of the file is less than the bytes you try to read." );

        // read raw data
        m_Capacity = uint(_bytesToLoad);
        m_CurPos = 0;

        if ( m_Capacity > 0 )
        {
            m_pData = ex_realloc ( m_pData, m_Capacity );
            _spFile->read ( m_pData, m_Capacity );
        }

        //
        setLoading ();
    }
    
    return EResult::ok;
}