コード例 #1
0
ファイル: max_sharing.cpp プロジェクト: skbaek/lean
 level apply(level const & l) {
     auto r = m_lvl_cache.find(l);
     if (r != m_lvl_cache.end())
         return *r;
     level res;
     switch (l.kind()) {
     case level_kind::Zero:   case level_kind::Param:
     case level_kind::Global: case level_kind::Meta:
         res = l;
         break;
     case level_kind::Succ:
         res = update_succ(l, apply(succ_of(l)));
         break;
     case level_kind::Max:
         res = update_max(l, apply(max_lhs(l)), apply(max_rhs(l)));
         break;
     case level_kind::IMax:
         res = update_max(l, apply(imax_lhs(l)), apply(imax_rhs(l)));
         break;
     }
     m_lvl_cache.insert(res);
     return res;
 }
コード例 #2
0
ファイル: draw.cpp プロジェクト: EricWF/chips
 void draw_helptext(sf::RenderWindow & win, level const & lvl)
 {
     auto CheckHelp = Concept<EntityIs<entity_id::hint>>(
         AtPosition(lvl.chip.get<position>())
       );
     
     std::string msg;
     if (lvl.state == level_state::failed) {
         msg = "Level Failed! Better luck next time";
     }
     else if (lvl.state == level_state::passed) {
         msg = "Level Passed!";
     }
     else if (CheckHelp.contains(lvl.entity_list)) {
         msg = lvl.help();
     }
     else { return; }
         
     auto & res = resource_manager::get();
     sf::Text txt(msg, res[font_uid::arial], 25);
     txt.setPosition((float)helptext_xpos, (float)helptext_ypos);
     txt.setColor(sf::Color::Red);
     win.draw(txt);
 }
コード例 #3
0
expr_type::expr_type(level const & l):
    expr_cell(expr_kind::Type, l.hash(), false),
    m_level(l) {
}
コード例 #4
0
ファイル: renderer.cpp プロジェクト: jordonp/block-race
void renderer::set_level(level& level) {
    current_level = &level;
    level.upload(*this);
}
コード例 #5
0
ファイル: collision_utils.cpp プロジェクト: LungTakumi/anura
bool point_standable(const level& lvl, const entity& e, int x, int y, collision_info* info, ALLOW_PLATFORM allow_platform)
{
	if(allow_platform == SOLID_AND_PLATFORMS  && lvl.standable(x, y, info ? &info->surf_info : NULL) ||
	   allow_platform != SOLID_AND_PLATFORMS  && lvl.solid(x, y, info ? &info->surf_info : NULL)) {
		if(info) {
			info->read_surf_info();
		}

		if(info && !lvl.solid(x, y)) {
			info->platform = true;
		}
		return true;
	}

	const point pt(x, y);

	const std::vector<entity_ptr>& chars = lvl.get_solid_chars();

	for(std::vector<entity_ptr>::const_iterator i = chars.begin();
	    i != chars.end(); ++i) {
		const entity_ptr& obj = *i;
		if(&e == obj.get()) {
			continue;
		}

		if(allow_platform == SOLID_AND_PLATFORMS || obj->solid_platform()) {
			const rect& platform_rect = obj->platform_rect_at(pt.x);
			if(point_in_rect(pt, platform_rect) && obj->platform()) {
				if(info) {
					info->collide_with = obj;
					info->friction = obj->surface_friction();
					info->traction = obj->surface_traction();
					info->adjust_y = y - platform_rect.y();
					info->platform = !obj->solid_platform();
				}

				return true;
			}
		}

		if((e.weak_solid_dimensions()&obj->solid_dimensions()) == 0 &&
		   (e.solid_dimensions()&obj->weak_solid_dimensions()) == 0) {
			continue;
		}

		if(!point_in_rect(pt, obj->solid_rect())) {
			continue;
		}

		const frame& f = obj->current_frame();
		const int xpos = obj->face_right() ? x - obj->x() : obj->x() + f.width() - x - 1;

		const solid_info* solid = obj->solid();

		if(solid && solid->solid_at(x - obj->x(), y - obj->y(), info ? &info->collide_with_area_id : NULL)) {
			if(info) {
				info->collide_with = obj;
				info->friction = obj->surface_friction();
				info->traction = obj->surface_traction();
			}

			return true;
		}
	}

	return false;
}
コード例 #6
0
ファイル: pewpew.cpp プロジェクト: mastergreg/pewpew
void new_game(void)
{
    gs.gs_run();
    menu_pages.push(&lv);
    lv.reset();
}
コード例 #7
0
ファイル: ships.cpp プロジェクト: slyra/pewpew
void ship::die()
{
  lv.shipExplode(position);
}
コード例 #8
0
ファイル: ghost.cpp プロジェクト: deipfei/MacPan
//search areas perpendicular to direction of travel for places to change direction
bool ghost::search_for_intersection(level l){
    //std::cout << "searching" << std::endl;
    bool opening = false;
    bool curr = true;
    std::vector<sf::FloatRect> levelcol = l.get_collisions();
    if (xvel != 0){
        sf::FloatRect colcheck (collision_box.left, collision_box.top + (4 * ghostvel), collision_box.width, collision_box.height);
        for (unsigned i = 0; i < levelcol.size(); i++){
            if (colcheck.intersects(levelcol.at(i))){
                curr = false;
                break;
            }
        }

        if (curr){
            return true;
        }

        curr = true;
        colcheck = sf::FloatRect(collision_box.left, collision_box.top - (4 * ghostvel), collision_box.width, collision_box.height);
        for (unsigned i = 0; i < levelcol.size(); i++){
            if (colcheck.intersects(levelcol.at(i))){
                curr = false;
                break;
            }
        }

        return curr;
    } else if (yvel != 0){
        sf::FloatRect colcheck (collision_box.left + (4 * ghostvel), collision_box.top, collision_box.width, collision_box.height);
        for (unsigned i = 0; i < levelcol.size(); i++){
            if (colcheck.intersects(levelcol.at(i))){
                curr = false;
                break;
            }
        }

        if (curr){
            return true;
        }

        curr = true;
        colcheck  = sf::FloatRect(collision_box.left - (4 * ghostvel), collision_box.top, collision_box.width, collision_box.height);
        for (unsigned i = 0; i < levelcol.size(); i++){
            if (colcheck.intersects(levelcol.at(i))){
                curr = false;
                break;
            }
        }

        return curr;
    } else {
        sf::FloatRect colcheck (collision_box.left, collision_box.top + (4 * ghostvel), collision_box.width, collision_box.height);
        for (unsigned i = 0; i < levelcol.size(); i++){
            if (colcheck.intersects(levelcol.at(i))){
                curr = false;
                break;
            }
        }

        if (curr){
            return true;
        }

        curr = true;
        colcheck  = sf::FloatRect(collision_box.left + (4 * ghostvel), collision_box.top, collision_box.width, collision_box.height);
        for (unsigned i = 0; i < levelcol.size(); i++){
            if (colcheck.intersects(levelcol.at(i))){
                curr = false;
                break;
            }
        }

        if (curr){
            return true;
        }

        curr = true;
        colcheck  = sf::FloatRect(collision_box.left - (4 * ghostvel), collision_box.top, collision_box.width, collision_box.height);
        for (unsigned i = 0; i < levelcol.size(); i++){
            if (colcheck.intersects(levelcol.at(i))){
                curr = false;
                break;
            }
        }

        if (curr){
            return true;
        }

        curr = true;
        colcheck  = sf::FloatRect(collision_box.left, collision_box.top - (4 * ghostvel), collision_box.width, collision_box.height);
        for (unsigned i = 0; i < levelcol.size(); i++){
            if (colcheck.intersects(levelcol.at(i))){
                curr = false;
                break;
            }
        }

        return curr;
    }

}