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; }
BOOL DestroyRoutine(ObjDescType rtds) { if(!DestroyRoutine(rtds)) return FALSE; free(GetObjPtr(rtds, &Rt_Carrier)); return TRUE; }
CObj* CLinkMap::GetObjInLinkMap( const D3DXVECTOR3 & vPos, DWORD dwLinkType, int nLinkLevel ) { CObj** ppObj = GetObjPtr( vPos, dwLinkType, nLinkLevel ); if( ppObj ) return *ppObj; else return NULL; }
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; }
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 ) ); } }
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; }
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; }
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); }
/* void SetNodeNum(ObjDescType ds) { } */ static inline NodeType* GetNodePtr(ObjDescType ds) { return GetObjPtr(ds,&Node_Carrier); }
static RoutineType* GetRoutinePrt(ObjDescType rtds) { return GetObjPtr(rtds,&Rt_Carrier); }
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 ); } }
static OperationType* GetOperationPtr(ObjDescType ods) { return GetObjPtr(ods,&Op_Carrier); }