Example #1
0
	entity_handle create_character(cosmos& world, const components::transform spawn_transform, const vec2i screen_size, const std::string name, const assets::animation_response_id torso_set) {
		const auto character = world.create_entity(name);

		name_entity(character, entity_name::PERSON);

		const auto crosshair = create_character_crosshair(world, screen_size);
		crosshair.get<components::crosshair>().character_entity_to_chase = character;
		crosshair.set_logic_transform(spawn_transform.pos);

		ingredients::wsad_character(character, crosshair, torso_set);
		
		auto& element = character += components::gui_element();
		element.rect_world.last_state.screen_size = screen_size;

		ingredients::wsad_character_physics(character);

		character.get<components::physics>().set_transform(spawn_transform);

		ingredients::character_inventory(character);

		const auto corpse_of_sentience = world.create_entity("corpse_of_sentience");
		name_entity(corpse_of_sentience, entity_name::CORPSE);
		ingredients::wsad_character_corpse(corpse_of_sentience);

		character.map_sub_entity(sub_entity_name::CORPSE_OF_SENTIENCE, corpse_of_sentience);

		character.add_standard_components();

		// LOG("Character mass: %x", character.get<components::physics>().get_mass());
		return character;
	}
Example #2
0
void relations_mixin<false, D>::make_cloned_sub_entities_recursive(const entity_id from) const {
	auto& self = *static_cast<const D*>(this);
	auto& cosmos = self.get_cosmos();
	auto from_rels = cosmos[from].get_sub_entities_component();

	for (const auto& id : from_rels.other_sub_entities)
		add_sub_entity(cosmos.clone_entity(id));

	for (const auto& id : from_rels.sub_entities_by_name)
		map_sub_entity(id.first, cosmos.clone_entity(id.second));
}
Example #3
0
	entity_handle create_character_crosshair(cosmos& world, const vec2i screen_size) {
		auto root = world.create_entity("crosshair");
		auto recoil = world.create_entity("crosshair_recoil_body");
		auto zero_target = world.create_entity("zero_target");

		{
			auto& sprite = root += components::sprite();
			auto& render = root += components::render();
			auto& transform = root += components::transform();
			auto& crosshair = root += components::crosshair();
			auto& processing = root += components::processing();
			
			sprite.set(assets::texture_id::TEST_CROSSHAIR, rgba(255, 255, 255, 255));

			render.layer = render_layer::CROSSHAIR;

			crosshair.base_offset.set(-20, 0);
			crosshair.sensitivity.set(3, 3);
			crosshair.visible_world_area.set(1920, 1080);
			crosshair.update_bounds();

			ingredients::make_always_visible(root);
		}

		{
			auto& force_joint = recoil += components::force_joint();
			zero_target += components::transform();
			components::physics body;
			components::fixtures colliders;

			auto& sprite = recoil += components::sprite();

			sprite.set(assets::texture_id::TEST_CROSSHAIR, rgba(0, 255, 0, 0));

			auto& render = recoil += components::render();
			render.layer = render_layer::OVER_CROSSHAIR;
			ingredients::make_always_visible(recoil);

			auto& info = colliders.new_collider();

			info.shape.from_renderable(recoil);

			info.filter = filters::renderable();
			//info.filter.categoryBits = 0;
			info.density = 0.1f;
			info.sensor = true;

			body.linear_damping = 5;
			body.angular_damping = 5;

			force_joint.chased_entity = zero_target;
			//force_joint.consider_rotation = false;
			//force_joint.distance_when_force_easing_starts = 10.f;
			//force_joint.force_towards_chased_entity = 1000.f;
			//force_joint.power_of_force_easing_multiplier = 1.f;
			force_joint.divide_transform_mode = true;

			recoil += body;
			recoil += colliders;
			recoil.get<components::fixtures>().set_owner_body(recoil);
		}

		root.map_sub_entity(sub_entity_name::CROSSHAIR_RECOIL_BODY, recoil);
		
		root.add_standard_components();
		recoil.add_standard_components();
		zero_target.add_standard_components();

		return root;
	}