Esempio n. 1
0
    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"));
            }
        }
    }
Esempio n. 2
0
    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);
    }
Esempio n. 3
0
    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);
    }
Esempio n. 4
0
    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);
    }