예제 #1
0
BOOL CLinkMap::InsertObjLink( CObj* pObj )
{
	if( pObj->GetType() == OT_MOVER && ( (CMover*)pObj )->IsPlayer() && pObj->GetLinkLevel() != 0 )
		WriteError( "ML//%s//%d//%d", ( (CMover*)pObj )->GetName(), ( (CMover*)pObj )->m_idPlayer, pObj->GetLinkLevel() );
	
	CObj** ppObj = GetObjPtr( pObj->GetLinkPos(), pObj->GetLinkType(), pObj->GetLinkLevel() );
	if( ppObj )
	{
		CObj* pBegObj = *ppObj;
		if( pBegObj )
		{
			if( pObj->m_pNext || pObj->m_pPrev )
			{
				Error("헉 InsertObjWorld 새로 추가된 오브젝트가 Next와 Prev에 값이 있네?? Type = %d \n", pObj->GetType());
			}
			pBegObj->InsNextNode(pObj);
		}
		else 
		{
			*ppObj = pObj;
			if( pObj->m_pNext || pObj->m_pPrev )
			{
				Error("헉 InsertObjWorld 새로 추가된 오브젝트가 Next와 Prev에 값이 있네?? Type = %d \n", pObj->GetType());
			}
		}
	}
	else
	{
		Error("헉 InsObjInFld에서 범위를 벗어난게 추가되려고 하네?\n");
		return FALSE;
	}
	return TRUE;
}
예제 #2
0
BOOL DestroyRoutine(ObjDescType rtds)
{
  if(!DestroyRoutine(rtds)) return FALSE;

  free(GetObjPtr(rtds, &Rt_Carrier));

  return TRUE;
}
예제 #3
0
CObj* CLinkMap::GetObjInLinkMap( const D3DXVECTOR3 & vPos, DWORD dwLinkType, int nLinkLevel )
{
	CObj** ppObj = GetObjPtr( vPos, dwLinkType, nLinkLevel );
	if( ppObj )
		return *ppObj;
	else
		return NULL;
}
예제 #4
0
BOOL CLinkMap::SetObjInLinkMap( const D3DXVECTOR3 & vPos, DWORD dwLinkType, int nLinkLevel, CObj* pObj )
{
	CObj** ppObj = GetObjPtr( vPos, dwLinkType, nLinkLevel );
	if( ppObj )
	{
		*ppObj = pObj;
		return TRUE;
	}
	else
		return FALSE;
}
예제 #5
0
void            FCStartSF( void ) {
//===========================

// Start definition of a statement function.

    sym_id      sf;

    if( OZOpts & OZOPT_O_INLINE ) {
        // skip the statement function
        FCodeSeek( GetObjPtr() );
    } else {
        sf = GetPtr();
        SFEndLabel = GetU16();
        CGControl( O_GOTO, NULL, GetLabel( SFEndLabel ) );
        CGControl( O_LABEL, NULL, GetLabel( sf->u.ns.si.sf.u.location ) );
    }
}
예제 #6
0
BOOL DestroyNode(ObjDescType nds)
{
	NodeType* pnode;

	pnode=GetObjPtr(nds, &Node_Carrier);
	if(!pnode) return FALSE;
	
	DetachNode(nds);

	if(pnode->pReqList) DestroyObjectList(pnode->pReqList);
	if(pnode->pItfList) DestroyObjectList(pnode->pItfList);
	if(pnode->pOpList) DestroyObjectList(pnode->pOpList);
	if(pnode->pRtList) DestroyObjectList(pnode->pRtList);
	if(pnode->pReqQueue) DestroyQueue(pnode->pReqQueue);
	
	free(pnode);
	
	return TRUE;
}
예제 #7
0
BOOL CLinkMap::RemoveObjLink( CObj* pObj )
{
	if( pObj->GetType() == OT_MOVER && ( (CMover*)pObj )->IsPlayer() && pObj->GetLinkLevel() != 0 )
		WriteError( "ROL//%s//%d//%d", ( (CMover*)pObj )->GetName(), ( (CMover*)pObj )->m_idPlayer, pObj->GetLinkLevel() );

	CObj** ppObj = GetObjPtr( pObj->GetLinkPos(), pObj->GetLinkType(), pObj->GetLinkLevel() );
	if( ppObj )
	{
		if( !pObj->m_pPrev && *ppObj != pObj )
			return RemoveObjLink2( pObj );

		if( *ppObj == pObj )
			*ppObj = pObj->GetNextNode();
		pObj->DelNode();
		return TRUE;
	}

	D3DXVECTOR3 vPos = pObj->GetLinkPos();
	WriteError( "ROL//POS OVERFLOW//%d, %d, %f, %f, %f, %f, %f, %f", 
			pObj->GetType(), pObj->GetIndex(), pObj->GetPos().x, pObj->GetPos().y, pObj->GetPos().z, vPos.x, vPos.y, vPos.z );
	if( RemoveObjLink2( pObj ) == FALSE )
		pObj->DelNode();
	return FALSE;
}
예제 #8
0
	const void* CConstObject::GetObjPtr(const char* name, _U32 index, const DDLReflect::STRUCT_INFO* type) const
	{
		return GetObjPtr(Zion::StringFormat("%s[%d]", name, type).c_str(), type);
	}
예제 #9
0
/*
void SetNodeNum(ObjDescType ds)
{
	
}
*/
static inline NodeType* GetNodePtr(ObjDescType ds)
{
	return GetObjPtr(ds,&Node_Carrier);
}
예제 #10
0
static RoutineType* GetRoutinePrt(ObjDescType rtds)
{
  return GetObjPtr(rtds,&Rt_Carrier);
}
예제 #11
0
void    FCSFCall( void ) {
//==================

// Call a statement function.

    sym_id      sf;
    sym_id      sf_arg;
    sym_id      tmp;
    cg_type     sf_type;
    cg_name     arg_list;
    cg_name     value;
    cg_cmplx    z;
    obj_ptr     curr_obj;

    sf = GetPtr();
    arg_list = NULL;
    value = NULL;
    sf_type = 0;
    for(;;) {
        sf_arg = GetPtr();
        if( sf_arg == NULL ) break;
        if( sf_arg->u.ns.u1.s.typ == FT_CHAR ) {
            value = Concat( 1, CGFEName( sf_arg, TY_CHAR ) );
        } else {
            sf_type = F772CGType( sf_arg );
            if( TypeCmplx( sf_arg->u.ns.u1.s.typ ) ) {
                XPopCmplx( &z, sf_type );
                sf_type = CmplxBaseType( sf_type );
                value = ImagPtr( SymAddr( sf_arg ), sf_type );
                CGTrash( CGAssign( value, z.imagpart, sf_type ) );
                value = CGFEName( sf_arg, sf_type );
                value = CGAssign( value, z.realpart, sf_type );
            } else {
                value = CGFEName( sf_arg, sf_type );
                value = CGAssign( value, XPopValue( sf_type ), sf_type );
            }
        }
        if( arg_list == NULL ) {
            arg_list = value;
        } else {
            arg_list = CGBinary( O_COMMA, arg_list, value, TY_DEFAULT );
        }
    }
    if( sf->u.ns.u1.s.typ == FT_CHAR ) {
        tmp = GetPtr();
        value = CGUnary( O_POINTS, CGFEName( tmp, TY_CHAR ), TY_CHAR );
        value = CGAssign( CGFEName( sf, TY_CHAR ), value, TY_CHAR );
        if( arg_list == NULL ) {
            arg_list = value;
        } else {
            arg_list = CGBinary( O_COMMA, arg_list, value, TY_DEFAULT );
        }
        value = CGFEName( tmp, TY_CHAR );
    } else {
        sf_type = F772CGType( sf );
        if( !(OZOpts & OZOPT_O_INLINE) ) {
            value = CGUnary( O_POINTS, CGFEName( sf, sf_type ), sf_type );
        }
    }
    if( OZOpts & OZOPT_O_INLINE ) {
        if( arg_list != NULL ) {
            CGTrash( arg_list );
        }
        curr_obj = FCodeSeek( sf->u.ns.si.sf.u.sequence );
        GetObjPtr();
        FCodeSequence();
        FCodeSeek( curr_obj );
        if( sf->u.ns.u1.s.typ == FT_CHAR ) {
            CGTrash( XPop() );
            XPush( value );
        } else if( TypeCmplx( sf->u.ns.u1.s.typ ) ) {
            XPopCmplx( &z, sf_type );
            sf_type = CmplxBaseType( sf_type );
            XPush( TmpVal( MkTmp( z.imagpart, sf_type ), sf_type ) );
            XPush( TmpVal( MkTmp( z.realpart, sf_type ), sf_type ) );
        } else {
            XPush( TmpVal( MkTmp( XPopValue( sf_type ), sf_type ), sf_type ) );
        }
    } else {
        value = CGWarp( arg_list, GetLabel( sf->u.ns.si.sf.u.location ), value );
        // consider: y = f( a, f( b, c, d ), e )
        // make sure that inner reference to f gets evaluated before we assign
        // arguments for outer reference
        value = CGEval( value );
        if( TypeCmplx( sf->u.ns.u1.s.typ ) ) {
            SplitCmplx( TmpPtr( MkTmp( value, sf_type ), sf_type ), sf_type );
        } else {
            XPush( value );
        }
        RefStmtFunc( sf );
    }
}
예제 #12
0
static OperationType* GetOperationPtr(ObjDescType ods)
{
	return GetObjPtr(ods,&Op_Carrier);
}