Example #1
0
/* add an object to the current render list */
void bucketAddTypeToList(RENDER_TYPE objectType, void* pObject)
{
	BUCKET_TAG newTag;
	int32_t    z;
	bool       useCalculateZ = false;

	switch (objectType)
	{
		case RENDER_EFFECT:
			switch (((EFFECT*)pObject)->group)
			{
				case EFFECT_EXPLOSION:
				case EFFECT_CONSTRUCTION:
				case EFFECT_SMOKE:
				case EFFECT_FIREWORK:
					useCalculateZ = true;
					break;
				default: break;
			}
			break;
		case RENDER_SHADOW:
		case RENDER_PROJECTILE:
		case RENDER_PROXMSG:
			useCalculateZ = true;
			break;
		default: break;
	}
	// NOTE bucketCalculateState calls bucketCalculateZ, don't know why not just use bucketCalculateZ.
	z = useCalculateZ ? bucketCalculateZ(objectType, pObject) : bucketCalculateState(objectType, pObject);

	if (z < 0)
	{
		/* Object will not be render - has been clipped! */
		if(objectType == RENDER_DROID || objectType == RENDER_STRUCTURE)
		{
			/* Won't draw selection boxes */
			((BASE_OBJECT *)pObject)->sDisplay.frameNumber = 0;
		}

		return;
	}

	//put the object data into the tag
	newTag.objectType = objectType;
	newTag.pObject = pObject;
	newTag.actualZ = z;

	//add tag to bucketArray
	bucketArray.push_back(newTag);
}
Example #2
0
static SDWORD bucketCalculateState(RENDER_TYPE objectType, void* pObject)
{
	SDWORD				z = 0;
	const iIMDShape*	pie;

	if (bucketCalculateZ(objectType,pObject) < 0)
	{
		return -1;
	}

	switch(objectType)
	{
		case RENDER_EFFECT:
			switch(((EFFECT*)pObject)->group)
			{
				case EFFECT_WAYPOINT:
				case EFFECT_EXPLOSION:
				case EFFECT_CONSTRUCTION:
					pie = ((EFFECT*)pObject)->imd;
					z = INT32_MAX - pie->texpage;
				break;

				case EFFECT_SMOKE:
				case EFFECT_GRAVITON:
				case EFFECT_BLOOD:
				case EFFECT_STRUCTURE:
				case EFFECT_DESTRUCTION:
				default:
					z = INT32_MAX - 42;
				break;
			}
		break;
		case RENDER_DROID:
			pie = BODY_IMD(((DROID*)pObject),0);
			z = INT32_MAX - pie->texpage;
		break;
		case RENDER_STRUCTURE:
			pie = ((STRUCTURE*)pObject)->sDisplay.imd;
			z = INT32_MAX - pie->texpage;
		break;
		case RENDER_FEATURE:
			pie = ((FEATURE*)pObject)->sDisplay.imd;
			z = INT32_MAX - pie->texpage;
		break;
		case RENDER_PROXMSG:
			z = INT32_MAX - 40;
		break;
		case RENDER_PROJECTILE:
			pie = ((PROJECTILE*)pObject)->psWStats->pInFlightGraphic;
			z = INT32_MAX - pie->texpage;
		break;
		case RENDER_ANIMATION:
			pie = ((COMPONENT_OBJECT*)pObject)->psShape;
			z = INT32_MAX - pie->texpage;
		break;
		case RENDER_DELIVPOINT:
			pie = pAssemblyPointIMDs[((FLAG_POSITION*)pObject)->
				factoryType][((FLAG_POSITION*)pObject)->factoryInc];
			z = INT32_MAX - pie->texpage;
		break;
		default:
		break;
	}

	return z;
}
Example #3
0
/* add an object to the current render list */
void bucketAddTypeToList(RENDER_TYPE objectType, void *pObject, const glm::mat4 &viewMatrix)
{
    const iIMDShape *pie;
    BUCKET_TAG	newTag;
    int32_t		z = bucketCalculateZ(objectType, pObject, viewMatrix);

    if (z < 0)
    {
        /* Object will not be render - has been clipped! */
        if (objectType == RENDER_DROID || objectType == RENDER_STRUCTURE)
        {
            /* Won't draw selection boxes */
            ((BASE_OBJECT *)pObject)->sDisplay.frameNumber = 0;
        }

        return;
    }

    switch (objectType)
    {
    case RENDER_EFFECT:
        switch (((EFFECT *)pObject)->group)
        {
        case EFFECT_EXPLOSION:
        case EFFECT_CONSTRUCTION:
        case EFFECT_SMOKE:
        case EFFECT_FIREWORK:
            // Use calculated Z
            break;

        case EFFECT_WAYPOINT:
            pie = ((EFFECT *)pObject)->imd;
            z = INT32_MAX - pie->texpage;
            break;

        default:
            z = INT32_MAX - 42;
            break;
        }
        break;
    case RENDER_DROID:
        pie = BODY_IMD(((DROID *)pObject), 0);
        z = INT32_MAX - pie->texpage;
        break;
    case RENDER_STRUCTURE:
        pie = ((STRUCTURE *)pObject)->sDisplay.imd;
        z = INT32_MAX - pie->texpage;
        break;
    case RENDER_FEATURE:
        pie = ((FEATURE *)pObject)->sDisplay.imd;
        z = INT32_MAX - pie->texpage;
        break;
    case RENDER_DELIVPOINT:
        pie = pAssemblyPointIMDs[((FLAG_POSITION *)pObject)->
                                 factoryType][((FLAG_POSITION *)pObject)->factoryInc];
        z = INT32_MAX - pie->texpage;
        break;
    case RENDER_PARTICLE:
        z = 0;
        break;
    default:
        // Use calculated Z
        break;
    }

    //put the object data into the tag
    newTag.objectType = objectType;
    newTag.pObject = pObject;
    newTag.actualZ = z;

    //add tag to bucketArray
    bucketArray.push_back(newTag);
}