Exemplo n.º 1
0
		void instanceDetach (const scene::Path& path)
		{
			if (--m_instanceCounter.m_count == 0) {
				m_entity.detach(m_keyObservers);
				m_entity.instanceDetach(path_find_mapfile(path.begin(), path.end()));
			}
		}
scene::INodePtr Quake3MapReader::createEntity(const EntityKeyValues& keyValues)
{
    // Get the classname from the EntityKeyValues
    EntityKeyValues::const_iterator found = keyValues.find("classname");

    if (found == keyValues.end())
	{
		throw FailureException("Quake3MapReader::createEntity(): could not find classname.");
    }

    // Otherwise create the entity and add all of the properties
    std::string className = found->second;
	IEntityClassPtr classPtr = GlobalEntityClassManager().findClass(className);

	if (classPtr == NULL)
	{
		rError() << "[mapdoom3]: Could not find entity class: "
			<< className << std::endl;

		// greebo: EntityClass not found, insert a brush-based one
		classPtr = GlobalEntityClassManager().findOrInsert(className, true);
	}

	// Create the actual entity node
    IEntityNodePtr node(GlobalEntityCreator().createEntity(classPtr));

    for (EntityKeyValues::const_iterator i = keyValues.begin();
         i != keyValues.end();
         ++i)
    {
        node->getEntity().setKeyValue(i->first, i->second);
    }

    return node;
}
Exemplo n.º 3
0
		void instanceAttach (const scene::Path& path)
		{
			if (++m_instanceCounter.m_count == 1) {
				m_entity.instanceAttach(path_find_mapfile(path.begin(), path.end()));
				m_traverse.instanceAttach(path_find_mapfile(path.begin(), path.end()));
				m_entity.attach(m_keyObservers);
			}
		}
Exemplo n.º 4
0
		void renderSolid (Renderer& renderer, const VolumeTest& volume, const Matrix4& localToWorld, bool selected) const
		{
			if (selected) {
				m_renderOrigin.render(renderer, volume, localToWorld);
			}

			ASSERT_NOTNULL(m_entity.getEntityClass().m_state_wire);
			renderer.SetState(m_entity.getEntityClass().m_state_wire, Renderer::eWireframeOnly);
		}
Exemplo n.º 5
0
		void renderSolid (Renderer& renderer, const VolumeTest& volume, const Matrix4& localToWorld) const
		{
			renderer.SetState(m_entity.getEntityClass().m_state_fill, Renderer::eFullMaterials);
			if (m_particle == NULL || !m_particle->getImage().empty())
				renderer.addRenderable(m_renderParticle, localToWorld);
			else
				renderer.addRenderable(m_renderAABBSolid, localToWorld);
		}
Exemplo n.º 6
0
		void construct ()
		{
			read_aabb(m_aabb_local, m_entity.getEntityClass());

			m_keyObservers.insert("targetname", NamedEntity::IdentifierChangedCaller(m_named));
			m_keyObservers.insert("origin", OriginKey::OriginChangedCaller(m_originKey));
			m_keyObservers.insert("particle", ParticleChangedCaller(*this));
		}
Exemplo n.º 7
0
		void renderWireframe (Renderer& renderer, const VolumeTest& volume, const Matrix4& localToWorld) const
		{
			renderer.SetState(m_entity.getEntityClass().m_state_wire, Renderer::eWireframeOnly);
			renderer.addRenderable(m_renderAABBWire, localToWorld);
			renderArrow(renderer, volume, localToWorld);
			if (GlobalRegistry().get("user/ui/xyview/showEntityNames") == "1") {
				renderer.addRenderable(m_renderName, localToWorld);
			}
		}
Exemplo n.º 8
0
 void renderWireframe(Renderer& renderer, const VolumeTest& volume, const Matrix4& localToWorld) const
 {
   renderer.SetState(m_entity.getEntityClass().m_state_wire, Renderer::eWireframeOnly);
   renderer.addRenderable(m_aabb_wire, localToWorld);
   renderArrow(renderer, volume, localToWorld);
   if(g_showNames)
   {
     renderer.addRenderable(m_renderName, localToWorld);
   }
 }
Exemplo n.º 9
0
  void construct()
  {
    read_aabb(m_aabb_local, m_entity.getEntityClass());

    m_keyObservers.insert("classname", ClassnameFilter::ClassnameChangedCaller(m_filter));
    m_keyObservers.insert(Static<KeyIsName>::instance().m_nameKey, NamedEntity::IdentifierChangedCaller(m_named));
    m_keyObservers.insert("angle", AnglesKey::AngleChangedCaller(m_anglesKey));
    m_keyObservers.insert("angles", AnglesKey::AnglesChangedCaller(m_anglesKey));
    m_keyObservers.insert("origin", OriginKey::OriginChangedCaller(m_originKey));
  }
Exemplo n.º 10
0
		void renderSolid (Renderer& renderer, const VolumeTest& volume, const Matrix4& localToWorld, bool selected) const
		{
			renderer.SetState(m_entity.getEntityClass().m_state_wire, Renderer::eWireframeOnly);
			renderer.SetState(m_colour.state(), Renderer::eFullMaterials);
			renderer.addRenderable(*this, localToWorld);

			if ((entity::EntitySettings::Instance().showAllLightRadii() || (selected
					&& entity::EntitySettings::Instance().showSelectedLightRadii()))
					&& m_entity.getKeyValue("target").empty()) {
				if (renderer.getStyle() == Renderer::eFullMaterials) {
					renderer.SetState(RenderLightRadiiFill::m_state, Renderer::eFullMaterials);
					renderer.Highlight(Renderer::ePrimitive, false);
					renderer.addRenderable(m_radii_fill, localToWorld);
				} else {
					renderer.addRenderable(m_radii_wire, localToWorld);
				}
			}

			renderer.SetState(m_entity.getEntityClass().m_state_wire, Renderer::eFullMaterials);
		}
Exemplo n.º 11
0
  void instanceDetach(const scene::Path& path)
  {
    if(--m_instanceCounter.m_count == 0)
    {
      m_funcStaticOrigin.disable();

      m_traverse.instanceDetach(path_find_mapfile(path.begin(), path.end()));
      m_entity.instanceDetach(path_find_mapfile(path.begin(), path.end()));
      m_filter.instanceDetach();
    }
  }
Exemplo n.º 12
0
		void construct ()
		{
			read_aabb(m_aabb_local, m_entity.getEntityClass());
			m_ray.origin = m_aabb_local.origin;
			m_ray.direction[0] = 1;
			m_ray.direction[1] = 0;
			m_ray.direction[2] = 0;

			m_keyObservers.insert("targetname", NamedEntity::IdentifierChangedCaller(m_named));
			m_keyObservers.insert("angle", AngleKey::AngleChangedCaller(m_angleKey));
			m_keyObservers.insert("origin", OriginKey::OriginChangedCaller(m_originKey));
		}
Exemplo n.º 13
0
  void destroy()
  {
    m_entity.detach(m_keyObservers);

    if(isModel())
    {
      detachModel();
    }
    else
    {
      detachTraverse();
    }

    m_traverseObservers.detach(m_funcStaticOrigin);
  }
Exemplo n.º 14
0
		void renderWireframe (Renderer& renderer, const VolumeTest& volume, const Matrix4& localToWorld,
				const AABB& childBounds) const
		{
			renderSolid(renderer, volume, localToWorld);

			if (GlobalRegistry().get("user/ui/xyview/showEntityNames") == "1") {
				// don't draw the name for worldspawn
				if (m_entity.getEntityClass().name() == "worldspawn")
					return;

				// place name in the middle of the "children cloud"
				m_name_origin = childBounds.origin;

				renderer.addRenderable(m_renderName, localToWorld);
			}
		}
Exemplo n.º 15
0
  void renderSolid(Renderer& renderer, const VolumeTest& volume, const Matrix4& localToWorld, bool selected) const
  {
    if(isModel() && selected)
    {
      m_renderOrigin.render(renderer, volume, localToWorld);
    }

    renderer.SetState(m_entity.getEntityClass().m_state_wire, Renderer::eWireframeOnly);
    renderer.SetState(m_entity.getEntityClass().m_state_wire, Renderer::eFullMaterials);

    if(!m_curveNURBS.m_renderCurve.m_vertices.empty())
    {
      renderer.addRenderable(m_curveNURBS.m_renderCurve, localToWorld);
    }
    if(!m_curveCatmullRom.m_renderCurve.m_vertices.empty())
    {
      renderer.addRenderable(m_curveCatmullRom.m_renderCurve, localToWorld);
    }
  }
Exemplo n.º 16
0
  void construct()
  {
    default_rotation(m_rotation);

    m_keyObservers.insert("classname", ClassnameFilter::ClassnameChangedCaller(m_filter));
    m_keyObservers.insert(Static<KeyIsName>::instance().m_nameKey, NamedEntity::IdentifierChangedCaller(m_named));
    m_keyObservers.insert("model", Doom3Group::ModelChangedCaller(*this));
    m_keyObservers.insert("origin", OriginKey::OriginChangedCaller(m_originKey));
    m_keyObservers.insert("angle", RotationKey::AngleChangedCaller(m_rotationKey));
    m_keyObservers.insert("rotation", RotationKey::RotationChangedCaller(m_rotationKey));
    m_keyObservers.insert("name", NameChangedCaller(*this));
    m_keyObservers.insert(curve_Nurbs, NURBSCurve::CurveChangedCaller(m_curveNURBS));
    m_keyObservers.insert(curve_CatmullRomSpline, CatmullRomSpline::CurveChangedCaller(m_curveCatmullRom));
    m_keyObservers.insert("skin", ModelSkinKey::SkinChangedCaller(m_skin));

    m_traverseObservers.attach(m_funcStaticOrigin);
    m_isModel = false;
    m_nameKeys.setKeyIsName(keyIsNameDoom3Doom3Group);
    attachTraverse();

    m_entity.attach(m_keyObservers);
  }
Exemplo n.º 17
0
		void renderSolid (Renderer& renderer, const VolumeTest& volume, const Matrix4& localToWorld) const
		{
			renderer.SetState(m_entity.getEntityClass().m_state_wire, Renderer::eWireframeOnly);
		}
Exemplo n.º 18
0
 void renderSolid(Renderer& renderer, const VolumeTest& volume, const Matrix4& localToWorld) const
 {
   renderer.SetState(m_entity.getEntityClass().m_state_fill, Renderer::eFullMaterials);
   renderer.addRenderable(m_aabb_solid, localToWorld);
   renderArrow(renderer, volume, localToWorld);
 }
Exemplo n.º 19
0
void Quake3MapReader::parseEntity(parser::DefTokeniser& tok)
{
    // Map of keyvalues for this entity
    EntityKeyValues keyValues;

    // The actual entity. This is initially null, and will be created when
    // primitives start or the end of the entity is reached
    scene::INodePtr entity;

	// Start parsing, first token must be an open brace
	tok.assertNextToken("{");

	std::string token = tok.nextToken();

	// Reset the primitive counter, we're starting a new entity
	_primitiveCount = 0;

	while (true)
	{
	    // Token must be either a key, a "{" to indicate the start of a
	    // primitive, or a "}" to indicate the end of the entity

	    if (token == "{") // PRIMITIVE
		{ 
			// Create the entity right now, if not yet done
			if (entity == NULL)
			{
				entity = createEntity(keyValues);
			}

			// Parse the primitive block, and pass the parent entity
			parsePrimitive(tok, entity);
	    }
	    else if (token == "}") // END OF ENTITY
		{
            // Create the entity if necessary and return it
	        if (entity == NULL)
			{
	            entity = createEntity(keyValues);
	        }

			break;
	    }
	    else // KEY
		{ 
	        std::string value = tok.nextToken();

	        // Sanity check (invalid number of tokens will get us out of sync)
	        if (value == "{" || value == "}")
			{
				std::string text = (boost::format(_("Parsed invalid value '%s' for key '%s'")) % value % token).str();
	            throw FailureException(text);
	        }

	        // Otherwise add the keyvalue pair to our map
	        keyValues.insert(EntityKeyValues::value_type(token, value));
	    }

	    // Get the next token
	    token = tok.nextToken();
	}

	// Insert the entity
	_importFilter.addEntity(entity);
}