void create_game(ng::i_layout& aLayout) { auto spritePlane = std::make_shared<ng::sprite_plane>(); aLayout.add_item(spritePlane); spritePlane->set_font(ng::font(spritePlane->font(), ng::font::Bold, 28)); spritePlane->set_background_colour(ng::colour::Black); spritePlane->enable_z_sorting(true); for (uint32_t i = 0; i < 1000; ++i) spritePlane->add_shape(std::make_shared<ng::rectangle>( *spritePlane, ng::vec3{static_cast<ng::scalar>(std::rand() % 800), static_cast<ng::scalar>(std::rand() % 800), -(static_cast<ng::scalar>(std::rand() % 32))}, ng::size{static_cast<ng::scalar>(std::rand() % 64), static_cast<ng::scalar>(std::rand() % 64)}, ng::colour(std::rand() % 64, std::rand() % 64, std::rand() % 64))); //spritePlane->set_uniform_gravity(); //spritePlane->set_gravitational_constant(0.0); //spritePlane->create_earth(); auto& spaceshipSprite = spritePlane->create_sprite(ng::image(sSpaceshipImagePattern, { {0, ng::colour()}, {1, ng::colour::LightGoldenrod}, {2, ng::colour::DarkGoldenrod4} })); spaceshipSprite.physics().set_mass(1.0); spaceshipSprite.set_size(ng::size(36.0, 36.0)); spaceshipSprite.set_position_3D(ng::vec3(400.0, 18.0, 1.0)); auto shipInfo = std::make_shared<ng::text>(*spritePlane, ng::vec3{}, "", ng::font("SnareDrum One NBP", "Regular", 24.0), ng::colour::White); shipInfo->set_border(1.0); shipInfo->set_margins(ng::margins(2.0)); shipInfo->set_buddy(spaceshipSprite, ng::vec3{18.0, 18.0, 0.0}); spritePlane->add_shape(shipInfo); spritePlane->sprites_painted([spritePlane](ng::graphics_context& aGraphicsContext) { aGraphicsContext.draw_text(ng::point(0.0, 0.0), "Hello, World!", spritePlane->font(), ng::colour::White); }); spritePlane->physics_applied([spritePlane, &spaceshipSprite, shipInfo]() { const auto& keyboard = ng::app::instance().keyboard(); spaceshipSprite.physics().set_acceleration({ keyboard.is_key_pressed(ng::ScanCode_RIGHT) ? 16.0 : keyboard.is_key_pressed(ng::ScanCode_LEFT) ? -16.0 : 0.0, keyboard.is_key_pressed(ng::ScanCode_UP) ? 16.0 : keyboard.is_key_pressed(ng::ScanCode_DOWN) ? -16.0 : 0.0 }); if (keyboard.is_key_pressed(ng::ScanCode_X)) spaceshipSprite.physics().set_spin_degrees(30.0); else if (keyboard.is_key_pressed(ng::ScanCode_Z)) spaceshipSprite.physics().set_spin_degrees(-30.0); else spaceshipSprite.physics().set_spin_degrees(0.0); if (keyboard.is_key_pressed(ng::ScanCode_SPACE)) spritePlane->add_sprite(std::make_shared<bullet>(spaceshipSprite)); std::ostringstream oss; oss << "VELOCITY: " << spaceshipSprite.physics().velocity().magnitude() << " m/s" << "\n"; oss << "ACCELERATION: " << spaceshipSprite.physics().acceleration().magnitude() << " m/s/s"; shipInfo->set_value(oss.str()); }); }
void SDFloader::read(std::string file) { // delete eventually existing scene scene_.materials.clear(); scene_.shapes.clear(); scene_.cameras.clear(); scene_.lights.clear(); std::ifstream f; std::string s; f.open(file, std::ios::in); while (!f.eof()) { // Solange noch Daten vorliegen getline(f, s); // Lese eine Zeile std::istringstream iss(s); std::string sub; iss >> sub; if(sub == "define"){ iss >> sub; if(sub == "material") add_material(iss); else if(sub == "shape") add_shape(iss); else if(sub == "camera") add_camera(iss); else if(sub == "light") add_light(iss); } else if(sub == "transform")
static void PopulateOutputShapesAttr(const std::vector<Variable>& src, AttrMap& dst) { auto& attr = dst["_output_shapes"]; auto list = attr.mutable_list(); for (auto output : src) { PopulateShape(output.Shape(), *list->add_shape()); } }
bool CollisionObject2D::_set(const StringName &p_name, const Variant &p_value) { String name = p_name; if (name.begins_with("shapes/")) { int idx = name.get_slicec('/', 1).to_int(); String what = name.get_slicec('/', 2); if (what == "shape") { if (idx >= shapes.size()) add_shape(RefPtr(p_value)); else set_shape(idx, RefPtr(p_value)); } else if (what == "transform") set_shape_transform(idx, p_value); else if (what == "trigger") set_shape_as_trigger(idx, p_value); } else return false; return true; }