public void DestroyOrphanBlock(int _cIdx, Vector3i _blockPos) { // Destroy if orphan block (no boat) EntityCustomBoat assignedBoat = GetClosestBoat(_blockPos); if (assignedBoat != null) { float closestBoatDistance = Vector3.Distance(_blockPos.ToVector3(), assignedBoat.position); if (closestBoatDistance > 3 && assignedBoat.boatDummyPos != _blockPos) { DebugMsg("BlockDummyBoat DestroyOrphanBlock: Found closest Boat but it's too far, discarding and destroying orphan Dummy Boat Block: _blockPos = " + _blockPos.ToString() + " | Boat pos = " + assignedBoat.position.ToString("0.000")); GameManager.Instance.World.SetBlockRPC(_cIdx, _blockPos, Block.GetBlockValue("water")); } } }
public EntityCustomBoat GetClosestBoat(Vector3i _blockPos) { EntityCustomBoat closestBoat = null; float closestDistance = 1000; Entity curEntity; float curDistance; for (int i = GameManager.Instance.World.Entities.list.Count - 1; i >= 0; i--) { curEntity = GameManager.Instance.World.Entities.list[i]; curDistance = Vector3.Distance(_blockPos.ToVector3(), curEntity.position); if (curEntity.GetType() == typeof(EntityCustomBoat) && curDistance < closestDistance) { closestDistance = curDistance; closestBoat = (EntityCustomBoat)curEntity; } } return(closestBoat); }
public bool FindSetAndOffsetAssignedBoat(int _cIdx, Vector3i _blockPos, BlockValue _blockValue, BlockEntityData _ebcd) { if (_ebcd == null) { DebugMsg("BlockDummyBoat FindSetAndOffsetAssignedBoat: BlockEntityData is NULL, aborting: _blockPos = " + _blockPos.ToString()); } EntityCustomBoat assignedBoat = null; if (_FindSetAndOffsetAssignedBoat(_cIdx, _blockPos, _blockValue, ref assignedBoat)) { DebugMsg("BlockDummyBoat FindSetAndOffsetAssignedBoat: Found Boat Dummy Block BlockEntityData: _blockPos = " + _blockPos.ToString()); assignedBoat.boatDummyBlockEntityData = _ebcd; // Adjust Boat and dummy block transform assignedBoat.bNeedBoatDummyBlockOffset = true; assignedBoat.AdjustBoatAndDummyBoatBlockPositions(); return(true); } return(false); }
public bool _FindSetAndOffsetAssignedBoat(int _cIdx, Vector3i _blockPos, BlockValue _blockValue, ref EntityCustomBoat _assignedBoat) { // Try to find closest Boat _assignedBoat = GetClosestBoat(_blockPos); if (_assignedBoat != null) { if (!_assignedBoat.bHasBoatDummy) { DebugMsg("BlockDummyBoat _FindSetAndOffsetAssignedBoat: Found closest Boat but it is not flagged to have a Dummy Boat Block, skipping: _blockPos = " + _blockPos.ToString() + " | Boat pos = " + _assignedBoat.position.ToString("0.000")); return(false); } if (_assignedBoat.bHasBoatDummy && _assignedBoat.boatDummyBlockEntityData != null && _assignedBoat.boatDummyPos != _blockPos) { DebugMsg("BlockDummyBoat _FindSetAndOffsetAssignedBoat: Found closest Boat but it already as an assigned Dummy Boat Block, skipping: _blockPos = " + _blockPos.ToString() + " | Boat pos = " + _assignedBoat.position.ToString("0.000")); return(false); } float closestBoatDistance = Vector3.Distance(_blockPos.ToVector3(), _assignedBoat.position); if (closestBoatDistance > 3 && _assignedBoat.boatDummyPos != _blockPos) { DebugMsg("BlockDummyBoat _FindSetAndOffsetAssignedBoat: Found closest Boat but it's too far, skipping: _blockPos = " + _blockPos.ToString() + " | Boat pos = " + _assignedBoat.position.ToString("0.000")); return(false); } DebugMsg("BlockDummyBoat _FindSetAndOffsetAssignedBoat: Found closest Boat: _blockPos = " + _blockPos.ToString() + " | Boat pos = " + _assignedBoat.position.ToString("0.000")); _assignedBoat.boatDummyPos = _blockPos; // Rotate boat to block Quaternion newQuat = Quaternion.AngleAxis(CustomVehiclesUtils.BlockYRotToEularYRot((int)_blockValue.rotation), Vector3.up); _assignedBoat.transform.rotation = newQuat; _assignedBoat.SetRotation(newQuat.eulerAngles); return(true); } else { DebugMsg("BlockDummyBoat FindSetAndOffsetAssignedBoat: Could not find closest Boat: _blockPos = " + _blockPos.ToString()); } return(false); }