public Node(Tile a_tile) { x = a_tile.x; y = a_tile.y; //if the tile is blocked if (a_tile.m_type == Tile.Tiletype.Blocked) { m_type = Nodetype.Blocked;//block the node } }
/// <summary> /// gets the closest vehicle node of the desired type, /// optionally returning the next pos on sidewalk instead of the node pos. /// All credit goes to Eddlm! /// </summary> /// <param name="desiredPos"></param> /// <param name="roadtype"></param> /// <param name="sidewalk"></param> /// <returns></returns> public static Vector3 GenerateSpawnPos(Vector3 desiredPos, Nodetype roadtype, bool sidewalk) { Vector3 finalpos = Vector3.Zero; bool forceOffroad = false; OutputArgument outArgA = new OutputArgument(); int nodeNumber = 1; int roadTypeAsInt = 0; switch (roadtype) { case Nodetype.Offroad: roadTypeAsInt = 1; forceOffroad = true; break; default: roadTypeAsInt = (int)roadtype; break; } int nodeID = Function.Call <int>( Hash.GET_NTH_CLOSEST_VEHICLE_NODE_ID, desiredPos.X, desiredPos.Y, desiredPos.Z, nodeNumber, roadTypeAsInt, 300f, 300f); if (forceOffroad) { while (!Function.Call <bool>(Hash._GET_IS_SLOW_ROAD_FLAG, nodeID) && nodeNumber < 500) { nodeNumber++; nodeID = Function.Call <int>(Hash.GET_NTH_CLOSEST_VEHICLE_NODE_ID, desiredPos.X, desiredPos.Y, desiredPos.Z, nodeNumber, roadTypeAsInt, 300f, 300f); } } Function.Call(Hash.GET_VEHICLE_NODE_POSITION, nodeID, outArgA); finalpos = outArgA.GetResult <Vector3>(); if (sidewalk) { finalpos = World.GetNextPositionOnSidewalk(finalpos); } return(finalpos); }
public override void update() { // Add Regulatory List and Chemical to the add layout of RegulatoryListMember CswNbtMetaDataObjectClass RegListMemberOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.RegulatoryListMemberClass ); foreach( CswNbtMetaDataNodeType RegListMemberNT in RegListMemberOC.getNodeTypes() ) { foreach( CswNbtMetaDataNodeTypeProp PropNTP in RegListMemberNT.getNodeTypeProps().Where( p => Int32.MinValue != p.ObjectClassPropId ) ) { switch( PropNTP.getObjectClassPropName() ) { case CswNbtObjClassRegulatoryListMember.PropertyName.RegulatoryList: PropNTP.updateLayout( CswEnumNbtLayoutType.Add, true, DisplayRow: 1, DisplayColumn: 1 ); break; case CswNbtObjClassRegulatoryListMember.PropertyName.Chemical: PropNTP.updateLayout( CswEnumNbtLayoutType.Add, true, DisplayRow: 2, DisplayColumn: 1 ); break; } } } // Remove ability to add Regulatory List Members from Chemicals tab on Regulatory List CswNbtMetaDataObjectClass RegListMemOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.RegulatoryListMemberClass ); CswNbtMetaDataObjectClass RegListOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.RegulatoryListClass ); foreach( CswNbtMetaDataNodeType Nodetype in RegListOC.getNodeTypes() ) { CswNbtMetaDataNodeTypeProp ChemicalsNTP = Nodetype.getNodeTypePropByObjectClassProp( CswNbtObjClassRegulatoryList.PropertyName.Chemicals ); CswNbtView ChemicalsView = _CswNbtSchemaModTrnsctn.restoreView( ChemicalsNTP.ViewId ); CswNbtViewRoot.forEachRelationship EachRelationship = delegate( CswNbtViewRelationship Relationship ) { if( Relationship.SecondId == RegListMemOC.ObjectClassId ) { Relationship.AllowAdd = false; } }; ChemicalsView.Root.eachRelationship( EachRelationship, null ); ChemicalsView.save(); } } // update()
public Node(int a_x, int a_y, Nodetype a_type) { x = a_x; y = a_y; m_type = a_type; }