Example #1
0
    public BlobManager genBlob(BlobData blobData)
    {
        /*
        this is all worldManager needs to create a blob using blobData
        */

        IntVector3 startPosition = getBlobStartPosition (blobData);
        BlobManager blobManager = startBlob (getNewBlob (), blobData.getMapData (), startPosition);

        blobManager.setBlobData (blobData);
        blobManager.createVoxels ();

        blobManager.setVelocity (blobData.getVelocity (), getDriftFuel (blobData));
        return blobManager;
    }
Example #2
0
    private IntVector3 getBlobStartPosition(BlobData blobData)
    {
        Prism mainPrism = getBlob (mainBlobName).genPrism ();
        IntVector3 vec = blobData.getMoveDirectionUnitVector ();
        IntVector3 pos = new IntVector3 (mainPrism.x, mainPrism.y, mainPrism.z);

        int xOffset = blobData.offset.x;
        int yOffset = blobData.offset.y;

        if (blobData.offset.guarenteeHit) {

            IntVector3 moveDirection = blobData.getMoveDirectionUnitVector ();
            IntVector2 blobOffset = MDCollision.getCenterCollisionPoint (blobData.getMapData (), moveDirection);

            IntVector2 preferredPoint = new IntVector2 (xOffset, yOffset);
            int[,,] mainMapData = ((BlobManager)getBlob (mainBlobName)).mapData;
            IntVector2 mainOffset = MDCollision.getCollisionPoint (mainMapData, preferredPoint, moveDirection);

            xOffset = mainOffset.x - blobOffset.x;
            yOffset = mainOffset.y - blobOffset.y;
        }

        IntVector3 sizeVector = blobData.getSizeVector ();
        int nextOffset = xOffset;
        if (vec.x == 0) {
            pos.x += nextOffset;
            nextOffset = yOffset;
        } else {
            pos.x += vec.x * GameSettings.blobSpawnDistance * -1;
            if (vec.x == 1)
                pos.x -= sizeVector.x;
            if (vec.x == -1)
                pos.x += mainPrism.width;
        }

        if (vec.z == 0) {
            pos.z += nextOffset;
            nextOffset = yOffset;
        } else {
            pos.z += vec.z * GameSettings.blobSpawnDistance * -1;
            if (vec.z == 1)
                pos.z -= sizeVector.z;
            if (vec.z == -1)
                pos.z += mainPrism.depth;
        }

        if (vec.y == 0) {
            pos.y += nextOffset;
        } else {
            pos.y += vec.y * GameSettings.blobSpawnDistance * -1;
            if (vec.y == 1)
                pos.y -= sizeVector.y;
            if (vec.y == -1)
                pos.y += mainPrism.height;
        }
        return pos;
    }