示例#1
0
func Check() {
  var clnk;
  if(GetAction()S="Falling") return(Falling());
    
  while(clnk=FindObject(0,-25,0,50,100,OCF_CrewMember(),0,0,0,clnk)) 
    if(GetAlive(clnk) && !Random(2)) { 
      Sound("Earthquake"); 
      SetAction("Falling");
      SetPhase(phase);
      RemoveVertex(0);
      RemoveVertex(0);
    }
}
示例#2
0
//----------------------------------------------------------------------------
bool CIsoSurface::VETable::Remove (TriangleKey& rkTri)
{
    for (int i = 0; i < 18; i++)
    {
        Vertex& rkV = m_akVertex[i];
        if ( rkV.Valid && rkV.AdjQuantity == 2 )
        {
            rkTri.V[0] = i;
            rkTri.V[1] = rkV.Adj[0];
            rkTri.V[2] = rkV.Adj[1];
            RemoveVertex(i);
            return true;
        }
    }

    return false;
}
示例#3
0
//----------------------------------------------------------------------------
bool VETable::Remove (Triangle3& rkTri)
{
    for (int i = 0; i < 18; i++)
    {
        Vertex& rkV = m_akVertex[i];
        if ( rkV.m_bValid && rkV.m_iAdjQuantity == 2 )
        {
            rkTri.i0 = i;
            rkTri.i1 = rkV.m_aiAdj[0];
            rkTri.i2 = rkV.m_aiAdj[1];
            RemoveVertex(i);
            return true;
        }
    }

    return false;
}
示例#4
0
//----------------------------------------------------------------------------
bool MTMesh::Remove (int label0, int label1, int label2)
{
	TIter iter = mTMap.find(MTITriangle(label0, label1, label2));
	if (iter == mTMap.end())
	{
		// The triangle does not exist.
		return false;
	}
	int t = iter->second;

	MTTriangle& triangle = mTriangles[t];

	// Detach triangle from edges.
	int e0 = triangle.Edge(0);
	int e1 = triangle.Edge(1);
	int e2 = triangle.Edge(2);
	MTEdge& edge0 = mEdges[e0];
	MTEdge& edge1 = mEdges[e1];
	MTEdge& edge2 = mEdges[e2];
	DetachTriangleFromEdge(t, triangle, 0, e0, edge0);
	DetachTriangleFromEdge(t, triangle, 1, e1, edge1);
	DetachTriangleFromEdge(t, triangle, 2, e2, edge2);

	// Detach triangle from vertices.
	int v0 = triangle.Vertex(0);
	MTVertex& vertex0 = mVertices[v0];
	vertex0.RemoveTriangle(t);

	int v1 = triangle.Vertex(1);
	MTVertex& vertex1 = mVertices[v1];
	vertex1.RemoveTriangle(t);

	int v2 = triangle.Vertex(2);
	MTVertex& vertex2 = mVertices[v2];
	vertex2.RemoveTriangle(t);

	// Detach edges from vertices (only if last edge to reference vertex).
	bool e0Destroy = (edge0.Triangle(0) == -1);
	if (e0Destroy)
	{
		vertex0.RemoveEdge(e0);
		vertex1.RemoveEdge(e0);
	}

	bool e1Destroy = (edge1.Triangle(0) == -1);
	if (e1Destroy)
	{
		vertex1.RemoveEdge(e1);
		vertex2.RemoveEdge(e1);
	}

	bool e2Destroy = (edge2.Triangle(0) == -1);
	if (e2Destroy)
	{
		vertex0.RemoveEdge(e2);
		vertex2.RemoveEdge(e2);
	}

	// Removal of components from the sets and maps starts here.  Be careful
	// using set indices, component references, and map iterators since
	// deletion has side effects.  Deletion of a component might cause another
	// component to be moved within the corresponding set or map.
	bool v0Destroy = (vertex0.GetNumEdges() == 0);
	bool v1Destroy = (vertex1.GetNumEdges() == 0);
	bool v2Destroy = (vertex2.GetNumEdges() == 0);

	// Remove edges if no longer used.
	if (e0Destroy)
	{
		RemoveEdge(label0, label1);
	}

	if (e1Destroy)
	{
		RemoveEdge(label1, label2);
	}

	if (e2Destroy)
	{
		RemoveEdge(label2, label0);
	}

	// Remove vertices if no longer used.
	if (v0Destroy)
	{
		RemoveVertex(label0);
	}

	if (v1Destroy)
	{
		RemoveVertex(label1);
	}

	if (v2Destroy)
	{
		RemoveVertex(label2);
	}

	// Remove triangle (definitely no longer used).
	RemoveTriangle(label0, label1, label2);
	return true;
}