Exemple #1
0
 void CEntity::Init(TConfigurationNode& t_tree) {
    /*
     * Set an ID if it has not been set yet
     * In this way, entities that are part of a composable can have an ID set by the parent
     */
    if(m_strId == "") {
       if(! HasParent()) {
          /*
           * Root-level entity
           */
          try {
             /* Get the id of the entity */
             GetNodeAttribute(t_tree, "id", m_strId);
          }
          catch(CARGoSException& ex) {
             THROW_ARGOSEXCEPTION_NESTED("Failed to initialize an entity.", ex);
          }
       }
       else {
          /*
           * Part of a component
           */
          m_strId = GetParent().GetId() + "." + GetTypeDescription();
       }
    }
 }
Exemple #2
0
void cJoint::ApplyTorque()
{
	tVector torque = mTotalTorque;

	switch (mParams.mType)
	{
	case cWorld::eJointTypeHinge:
		// for hinge joints make sure toque is along axis
		torque = mParams.mAxis.dot(torque) * mParams.mAxis;
		break;
	case cWorld::eJointTypePrismatic:
		this->ApplyForce();
		return;
		break;
	default:
		break;
	}

	ClampTotalTorque(torque);
	mTotalTorque = torque;

	tMatrix trans = BuildWorldTrans();
	torque[3] = 0;
	torque = trans * torque;

	if (HasParent())
	{
		mParent->ApplyTorque(-torque);
	}
	mChild->ApplyTorque(torque);
}
Exemple #3
0
bool
Job::AddParent( Job* parent, MyString &whynot )
{
	if( !this->CanAddParent( parent, whynot ) ) {
		return false;
	}

	if( HasParent( parent ) ) {
		debug_printf( DEBUG_QUIET,
					"Warning: child %s already has parent %s\n",
					GetJobName(), parent->GetJobName() );
		check_warning_strictness( DAG_STRICT_3 );
		return true;
	}

	if( !Add( Q_PARENTS, parent->GetJobID() ) ) {
		whynot = "unknown error appending to PARENTS queue";
		return false;
	}
    if( parent->GetStatus() != STATUS_DONE ) {
		if( !Add( Q_WAITING, parent->GetJobID() ) ) {
            // this node's dependency queues are now out of sync and
            // thus the DAG state is FUBAR, so we should bail...
			EXCEPT( "Failed to add parent %s to job %s",
						parent->GetJobName(), GetJobName() );
			return false;
		}
	}
	whynot = "n/a";
    return true;
}
Exemple #4
0
wxString CLocalPath::GetLastSegment() const
{
	wxASSERT(HasParent());

#ifdef __WXMSW__
	// C:\f\ has parent
	// C:\ does not
	// \\x\y\ shortest UNC
	//   ^ min
	const int min = 2;
#else
	const int min = 0;
#endif
	for (int i = (int)m_path.Len() - 2; i >= min; i--)
	{
		if (m_path[i] == path_separator)
		{
			wxString last = m_path.Mid(i + 1);
			last.RemoveLast();
			return last;
		}
	}

	return _T("");
}
Exemple #5
0
bool CLocalPath::HasLogicalParent() const
{
#ifdef __WXMSW__
	if (m_path.Len() == 3 && m_path[0] != '\\') // Drive root
		return true;
#endif
	return HasParent();
}
Exemple #6
0
void GameObject::SetWorldPos(const Vector2f& pos)
{
    Vector2f parentWorldPos;
    if (HasParent())
    {
        parentWorldPos = GetParent().GetWorldPos();
    }
    m_localPos = pos - parentWorldPos;
}
Exemple #7
0
const Vector2f& GameObject::GetWorldPos() const
{
    m_worldPos = m_localPos;
    if (HasParent())
    {
        m_worldPos += GetParent().GetWorldPos();
    }
    return m_worldPos;
}
CString CServerPath::GetLastSegment() const
{
	if (!HasParent())
		return _T("");
	if (m_Segments.empty())
		return _T("");
	else
		return m_Segments.back();
}
bool CServerPath::IsSubdirOf(const CServerPath &path, bool cmpNoCase) const
{
	if (empty() || path.empty()) {
		return false;
	}

	if (m_type != path.m_type) {
		return false;
	}

	if (!HasParent()) {
		return false;
	}

	if (traits[m_type].prefixmode != 1) {
		if (cmpNoCase ) {
			if( m_data->m_prefix && !path.m_data->m_prefix ) {
				return false;
			}
			else if( !m_data->m_prefix && path.m_data->m_prefix ) {
				return false;
			}
			else if( m_data->m_prefix && path.m_data->m_prefix && fz::stricmp(*m_data->m_prefix, *path.m_data->m_prefix) ) {
				return false;
			}
		}
		if (!cmpNoCase && m_data->m_prefix != path.m_data->m_prefix)
			return false;
	}

	// On MVS, dirs like 'FOO.BAR' without trailing dot cannot have
	// subdirectories
	if (traits[m_type].prefixmode == 1 && !path.m_data->m_prefix)
		return false;

	tConstSegmentIter iter1 = m_data->m_segments.begin();
	tConstSegmentIter iter2 = path.m_data->m_segments.begin();
	while (iter1 != m_data->m_segments.end()) {
		if (iter2 == path.m_data->m_segments.end()) {
			return true;
		}
		if (cmpNoCase) {
			if (fz::stricmp(*iter1, *iter2)) {
				return false;
			}
		}
		else if (*iter1 != *iter2) {
			return false;
		}

		++iter1;
		++iter2;
	}

	return false;
}
bool CLocalPath::HasLogicalParent() const
{
#ifdef FZ_WINDOWS
	if (m_path->size() == 3 && (*m_path)[0] != '\\') {
		// Drive root
		return true;
	}
#endif
	return HasParent();
}
Exemple #11
0
void GameObject::Prepare()
{
	OnPrepare();						// prepare this object

	if (HasChild())					// prepare children
		((GameObject*)GetChild())->Prepare();

	if (HasParent() && !IsLastChild())		// prepare siblings
		((GameObject*)GetFollowing())->Prepare();
}
Exemple #12
0
wxString CServerPath::GetLastSegment() const
{
	if (empty() || !HasParent())
		return wxString();

	if (!m_data->m_segments.empty())
		return m_data->m_segments.back();
	else
		return wxString();
}
Exemple #13
0
CServerPath CServerPath::GetParent() const
{
	ASSERT(HasParent());
	CServerPath path;
	path = *this;
	path.m_Segments.pop_back();
	if (m_nServerType & (FZ_SERVERTYPE_SUB_FTP_MVS | FZ_SERVERTYPE_SUB_FTP_BS2000))
		path.m_Prefix = _T(".");
	return path;
}
Exemple #14
0
void GameObject::SetWorldPos(const Position& pos)
{
    Vector2f parentWorldPos;
    if (HasParent())
    {
        parentWorldPos = GetParent().GetWorldPos();
    }
    m_localPos.x = static_cast<float>(pos.x) - parentWorldPos.x;
    m_localPos.y = static_cast<float>(pos.y) - parentWorldPos.y;
}
Exemple #15
0
void
JVMThreadNode::NameChanged()
{
	CMThreadNode::NameChanged();

	if (!HasParent())
		{
		CMCommand* cmd = new JVMGetThreadParent(this);
		assert( cmd != NULL );
		}
}
Exemple #16
0
void GameObject::Render()
{
	glPushMatrix();
	OnRender();		// Render this object
	
	if (HasChild())		// Render children
		((GameObject*)GetChild())->Render();
	glPopMatrix();

	// Render siblings
	if (HasParent() && !IsLastChild())
		((GameObject*)GetFollowing())->Render();
}
std::wstring CServerPath::GetLastSegment() const
{
	if (empty() || !HasParent()) {
		return std::wstring();
	}

	if (!m_data->m_segments.empty()) {
		return m_data->m_segments.back();
	}
	else {
		return std::wstring();
	}
}
Exemple #18
0
tVector cJoint::CalcJointVel() const
{
	tVector ang_velp = tVector::Zero();
	if (HasParent())
	{
		ang_velp = mParent->GetAngularVelocity();
	}
	
	tVector ang_velc = mChild->GetAngularVelocity();

	tVector joint_vel = ang_velc - ang_velp;
	return joint_vel;
}
Exemple #19
0
CServerPath CServerPath::GetParent() const
{
	if (empty() || !HasParent())
		return CServerPath();

	CServerPath parent(*this);
	CServerPathData& parent_data = parent.m_data.Get();

	parent_data.m_segments.pop_back();

	if (m_type == MVS)
		parent_data.m_prefix = CSparseOptional<wxString>(_T("."));

	return parent;
}
Exemple #20
0
void GameObject::Animate( scalar_t deltaTime )
{
	OnAnimate(deltaTime);		// animate this object

	// animate children
	if (HasChild())
		((GameObject*)GetChild())->Animate(deltaTime);

	// animate siblings
	if (HasParent() && !IsLastChild())
		((GameObject*)GetFollowing())->Animate(deltaTime);

	if (toBeDelete)
		delete this;
}
Exemple #21
0
CServerPath CServerPath::GetParent() const
{
	if (!HasParent())
		return CServerPath();

	CServerPath parent(*this);
	CServerPathData& parent_data = parent.m_data.Get();

	parent_data.m_segments.pop_back();

	if (m_type == MVS)
		parent_data.m_prefix = _T(".");

	return parent;
}
CServerPath CServerPath::GetParent() const
{
	if (empty() || !HasParent()) {
		return CServerPath();
	}

	CServerPath parent(*this);
	CServerPathData& parent_data = parent.m_data.get();

	parent_data.m_segments.pop_back();

	if (m_type == MVS) {
		parent_data.m_prefix = fz::sparse_optional<std::wstring>(L".");
	}

	return parent;
}
Exemple #23
0
bool CServerPath::IsSubdirOf(const CServerPath &path, bool cmpNoCase) const
{
	if (m_bEmpty || path.m_bEmpty)
		return false;

	if (m_type != path.m_type)
		return false;

	if (!HasParent())
		return false;

	if (traits[m_type].prefixmode != 1)
	{
		if (cmpNoCase && m_data->m_prefix.CmpNoCase(path.m_data->m_prefix))
			return false;
		if (!cmpNoCase && m_data->m_prefix != path.m_data->m_prefix)
			return false;
	}

	// On MVS, dirs like 'FOO.BAR' without trailing dot cannot have
	// subdirectories
	if (traits[m_type].prefixmode == 1 && path.m_data->m_prefix == _T(""))
		return false;

	tConstSegmentIter iter1 = m_data->m_segments.begin();
	tConstSegmentIter iter2 = path.m_data->m_segments.begin();
	while (iter1 != m_data->m_segments.end())
	{
		if (iter2 == path.m_data->m_segments.end())
			return true;
		if (cmpNoCase)
		{
			if (iter1->CmpNoCase(*iter2))
				return false;
		}
		else if (*iter1 != *iter2)
			return false;

		iter1++;
		iter2++;
	}

	return false;
}
Exemple #24
0
void cJoint::ApplyForce()
{
	tVector force = mTotalTorque;

	ClampTotalTorque(force);
	mTotalTorque = force;
	force[0] = 0;
	force[1] = force[2];
	force[2] = 0.0;
	force[3] = 0;

	tMatrix trans = BuildWorldTrans();
	force = trans * force;

	if (HasParent())
	{
		mParent->ApplyForce(-force);
	}
	mChild->ApplyForce(force);
}
std::wstring CLocalPath::GetLastSegment() const
{
	assert(HasParent());

#ifdef FZ_WINDOWS
	// C:\f\ has parent
	// C:\ does not
	// \\x\y\ shortest UNC
	//   ^ min
	const int min = 2;
#else
	const int min = 0;
#endif
	for (int i = (int)m_path->size() - 2; i >= min; i--) {
		if ((*m_path)[i] == path_separator) {
			return m_path->substr(i + 1, m_path->size() - i - 2);
		}
	}

	return std::wstring();
}
static bool  TryToAssignMainGroupToNOUN_GR(CGroups& model, int iGr, const CInnerModel& piModel)
{
	try
	{

		CGroup& group = *model.GetGroupPtr(iGr);

		if( group.m_GroupType!= NOUN_GR)
			return false;

		//  ищем слово, в которое не входит ни одного отношени¤ от слов внутри данной группы
		int i = 0;
		vector<bool> HasParent(group.size(), false);
		for( ; i < piModel.m_SynRelations.size(); i++ )
		{
			const CThesSynRelation& piRel =  piModel.m_SynRelations[i];;
			if	(		CPeriod(piRel.m_Word1-1).is_part_of(group) 
					&&	CPeriod(piRel.m_Word2-1).is_part_of(group)
				)
				HasParent[piRel.m_Word2 - 1 - group.m_iFirstWord] = true;
		}
		for (i=0; i < group.size(); i++)
			if (!HasParent[i])
				break;

		//  главное слово не найдено, наверно, плохо заполнен слот отношений
		if( i ==  group.size() )
			return false;

		//  главное слово найдено, берем найти максимальную подгруппу, котора¤ содержит это слово
		group.m_MainGroup = model.get_maximal_subgroup(iGr, i + group.m_iFirstWord);
		return true;
	}
	catch(...)
	{
		return false;
	}

}
CServerPath CServerPath::GetCommonParent(const CServerPath& path) const
{
	if (*this == path) {
		return *this;
	}

	if (empty() || path.empty()) {
		return CServerPath();
	}

	if (m_type != path.m_type ||
		(!traits[m_type].prefixmode && m_data->m_prefix != path.m_data->m_prefix))
	{
		return CServerPath();
	}

	if (!HasParent()) {
		if (path.IsSubdirOf(*this, false)) {
			return *this;
		}
		else {
			return CServerPath();
		}
	}
	else if (!path.HasParent()) {
		if (IsSubdirOf(path, false)) {
			return path;
		}
		else {
			return CServerPath();
		}
	}

	CServerPath parent;
	parent.m_type = m_type;

	CServerPathData& parentData = parent.m_data.get();

	tConstSegmentIter last = m_data->m_segments.end();
	tConstSegmentIter last2 = path.m_data->m_segments.end();
	if (traits[m_type].prefixmode == 1) {
		if (!m_data->m_prefix) {
			--last;
		}
		if (!path.m_data->m_prefix) {
			--last2;
		}
		parentData.m_prefix = GetParent().m_data->m_prefix;
	}
	else
		parentData.m_prefix = m_data->m_prefix;

	tConstSegmentIter iter = m_data->m_segments.begin();
	tConstSegmentIter iter2 = path.m_data->m_segments.begin();
	while (iter != last && iter2 != last2) {
		if (*iter != *iter2) {
			if (!traits[m_type].has_root && parentData.m_segments.empty()) {
				return CServerPath();
			}
			else {
				return parent;
			}
		}

		parentData.m_segments.push_back(*iter);

		++iter;
		++iter2;
	}

	return parent;
}
const StructureItem* StructureItem::GetParent( const StructureItemContainer& items ) const
{
	return !HasParent() ? 0 : &items[GetParent()];
}
Exemple #29
0
const GameObject& GameObject::GetParent() const
{
    assert(HasParent());

    return *m_pParent;
}
Exemple #30
0
CServerPath CServerPath::GetCommonParent(const CServerPath& path) const
{
	if (*this == path)
		return *this;

	if (m_bEmpty || path.m_bEmpty)
		return CServerPath();

	if (m_type != path.m_type ||
		(!traits[m_type].prefixmode && m_data->m_prefix != path.m_data->m_prefix))
	{
		return CServerPath();
	}

	if (!HasParent())
	{
		if (path.IsSubdirOf(*this, false))
			return *this;
		else
			return CServerPath();
	}
	else if (!path.HasParent())
	{
		if (IsSubdirOf(path, false))
			return path;
		else
			return CServerPath();
	}

	CServerPath parent;
	parent.m_bEmpty = false;
	parent.m_type = m_type;

	CServerPathData& parentData = parent.m_data.Get();
	
	std::list<wxString>::const_iterator last = m_data->m_segments.end();
	std::list<wxString>::const_iterator last2 = path.m_data->m_segments.end();
	if (traits[m_type].prefixmode == 1)
	{
		if (m_data->m_prefix.empty())
			last--;
		if (path.m_data->m_prefix.empty())
			last2--;
		parentData.m_prefix = GetParent().m_data->m_prefix;
	}
	else
		parentData.m_prefix = m_data->m_prefix;

	std::list<wxString>::const_iterator iter = m_data->m_segments.begin();
	std::list<wxString>::const_iterator iter2 = path.m_data->m_segments.begin();
	while (iter != last && iter2 != last2)
	{
		if (*iter != *iter2)
		{
			if (!traits[m_type].has_root && parentData.m_segments.empty())
				return CServerPath();
			else
				return parent;
		}

		parentData.m_segments.push_back(*iter);

		iter++;
		iter2++;
	}

	return parent;
}