Beispiel #1
0
void animation_free(animation *ani) {
    iterator it;

    // Free animation string
    str_free(&ani->animation_string);

    // Free collision coordinates
    vector_free(&ani->collision_coords);

    // Free extra strings
    vector_iter_begin(&ani->extra_strings, &it);
    str *tmp_str = NULL;
    while((tmp_str = iter_next(&it)) != NULL) {
        str_free(tmp_str);
    }
    vector_free(&ani->extra_strings);

    // Free animations
    vector_iter_begin(&ani->sprites, &it);
    sprite *tmp_sprite = NULL;
    while((tmp_sprite = iter_next(&it)) != NULL) {
        sprite_free(tmp_sprite);
    }
    vector_free(&ani->sprites);
}
Beispiel #2
0
int ai_block_projectile(controller *ctrl, ctrl_event **ev) {
    ai *a = ctrl->data;
    object *o = ctrl->har;

    iterator it;
    object **o_tmp;
    vector_iter_begin(&a->active_projectiles, &it);
    while((o_tmp = iter_next(&it)) != NULL) {
        object *o_prj = *o_tmp;
        if(projectile_get_owner(o_prj) == o)  {
            continue;
        }
        if(o_prj->cur_sprite && maybe(a->difficulty)) {
            vec2i pos_prj = vec2i_add(object_get_pos(o_prj), o_prj->cur_sprite->pos);
            vec2i size_prj = object_get_size(o_prj);
            if (object_get_direction(o_prj) == OBJECT_FACE_LEFT) {
                pos_prj.x = object_get_pos(o_prj).x + ((o_prj->cur_sprite->pos.x * -1) - size_prj.x);
            }
            if(fabsf(pos_prj.x - o->pos.x) < 120) {
                a->cur_act = (o->direction == OBJECT_FACE_RIGHT ? ACT_DOWN|ACT_LEFT : ACT_DOWN|ACT_RIGHT);
                controller_cmd(ctrl, a->cur_act, ev);
                return 1;
            }
        }

    }

    return 0;
}
Beispiel #3
0
void menu_tick(menu *menu) {
    iterator it;
    component **tmp;
    vector_iter_begin(&menu->objs, &it);
    while((tmp = iter_next(&it)) != NULL) {
        (*tmp)->tick(*tmp);
    }
}
Beispiel #4
0
void menu_render(menu *menu) {
    iterator it;
    component **tmp;
    video_render_sprite(&menu->sur, menu->x, menu->y, BLEND_ALPHA, 0);
    vector_iter_begin(&menu->objs, &it);
    while((tmp = iter_next(&it)) != NULL) {
        (*tmp)->render(*tmp);
    }
}
Beispiel #5
0
int menu_get_ypos(menu *menu) {
    int ypos = 8;
    iterator it;
    vector_iter_begin(&menu->objs, &it);
    component **tmp;
    while((tmp = iter_next(&it)) != NULL) {
        ypos += (*tmp)->h;
    }
    return ypos;
}
Beispiel #6
0
static void xysizer_render(component *c) {
    sizer *s = component_get_obj(c);

    // Just render all children
    iterator it;
    component **tmp;
    vector_iter_begin(&s->objs, &it);
    while((tmp = iter_next(&it)) != NULL) {
        component_render(*tmp);
    }
}
Beispiel #7
0
void font_free(font *font) {
    font->size = FONT_UNDEFINED;
    iterator it;
    vector_iter_begin(&font->textures, &it);
    texture **tex = NULL;
    while((tex = iter_next(&it)) != NULL) {
        texture_free(*tex);
        free(*tex);
    }
    vector_free(&font->textures);
}
Beispiel #8
0
static int xysizer_action(component *c, int action) {
    sizer *s = sizer_get_obj(c);

    // Just pass events to all children
    iterator it;
    component **tmp;
    vector_iter_begin(&s->objs, &it);
    while((tmp = iter_next(&it)) != NULL) {
        component_action(*tmp, action);
    }

    return 1; // Wasn't handled here (event though it might have been)
}
Beispiel #9
0
void ticktimer_run(ticktimer *tt) {
    iterator it;
    vector_iter_begin(&tt->units, &it);
    ticktimer_unit *unit;
    while((unit = iter_next(&it)) != NULL) {
        if(unit->ticks <= 0) {
            unit->callback(unit->userdata);
            vector_delete(&tt->units, &it);
        } else {
            unit->ticks--;
        }
    }
}
Beispiel #10
0
static int xysizer_event(component *c, SDL_Event *event) {
    sizer *s = component_get_obj(c);

    // Just pass events to all children
    int handled = 0;
    iterator it;
    component **tmp;
    vector_iter_begin(&s->objs, &it);
    while((tmp = iter_next(&it)) != NULL) {
        handled |= component_event(*tmp, event);
    }

    return 1; // Wasn't handled here (event though it might have been)
}
Beispiel #11
0
void shaderprog_free(shaderprogram *prog) {
    // Detach shaders
    iterator it;
    vector_iter_begin(&prog->shaders, &it);
    shader *tmp;
    while((tmp = iter_next(&it)) != NULL) {
        glDetachShader(prog->id, tmp->id);
        shader_free(tmp);
    }
    vector_free(&prog->shaders);
    
    // Destroy program
    glDeleteProgram(prog->id);
}
Beispiel #12
0
static void xysizer_layout(component *c, int x, int y, int w, int h) {
    sizer *s = component_get_obj(c);

    // Set layout for all components in the sizer
    iterator it;
    component **tmp;
    vector_iter_begin(&s->objs, &it);
    while((tmp = iter_next(&it)) != NULL) {
        // Set component position and size from the component hint
        int m_x = ((*tmp)->x_hint < x) ? x : (*tmp)->x_hint;
        int m_y = ((*tmp)->y_hint < y) ? y : (*tmp)->y_hint;
        int m_w = ((*tmp)->w_hint < 0) ? 0 : (*tmp)->w_hint;
        int m_h = ((*tmp)->h_hint < 0) ? 0 : (*tmp)->h_hint;
        if(m_w == 0 || m_h == 0) {
            DEBUG("Warning: Gui component hidden, because size is 0. Make sure size hints are set!");
        }
        component_layout(*tmp, m_x, m_y, m_w, m_h);
    }
}
Beispiel #13
0
void menu_select(menu *menu, component *c) {
    component **tmp;
    iterator it;
    int i = 0;
    vector_iter_begin(&menu->objs, &it);
    while((tmp = iter_next(&it)) != NULL) {
        if (*tmp == c) {
            break;
        }
        i++;
    }
    if (tmp == NULL) {
        return;
    }

    tmp = vector_get(&menu->objs, menu->selected);
    (*tmp)->selected=0; // unselect the old component
    c->selected = 1; //select the new one
    menu->selected = i;
}
Beispiel #14
0
int console_cmd_help(game_state *gs, int argc, char **argv) {
    // print list of commands
    vector sorted;
    iterator it;
    hashmap_pair *pair, **ppair;

    vector_create(&sorted, sizeof(hashmap_pair*));
    hashmap_iter_begin(&con->cmds, &it);
    while((pair = iter_next(&it)) != NULL) {
        vector_append(&sorted, &pair);
    }
    vector_sort(&sorted, &sort_command_by_name);
    vector_iter_begin(&sorted, &it);
    while((ppair = iter_next(&it)) != NULL) {
        char *name = (*ppair)->key;
        command *cmd = (*ppair)->val;
        console_output_add(name);
        console_output_add(" - ");
        console_output_addline(cmd->doc);
    }
    vector_free(&sorted);
    return 0;
}