Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- typedef struct Relativity {
- char xzOffset;
- char yOffset;
- int distance;
- } Relativity_t;
- void lcars_RenderViewScreen(void){
- char i;
- int vWidth = 228, vHeight = 173;
- for( i = 0; i <= (sizeof(MapData)/sizeof(MapObject_t)); i++){
- MapObject_t *object = &MapData[i];
- if( object->type == OBJ_SHIP || object->type == OBJ_PROJ ){
- Relativity_t data;
- GetOffsets(&data, object->Position.coords[0] - PlayerData->Position.coords[0], object->Position.coords[1] - PlayerData->Position.coords[1], object->Position.coords[2] - PlayerData->Position.coords[2]);
- if( data.distance <= VISUAL_RANGE ){
- unsigned char diffXZ, diffY;
- diffXZ = data.xzOffset - PlayerData->Position.angles[0];
- if( diffXZ > 128 ) diffXZ = 256 - diffXZ;
- diffY = data.yOffset - PlayerData->Position.angles[1];
- if( diffY > 128 ) diffY = 256 - diffY;
- if( (diffXZ <= 45) && (diffY <= 45) ){
- char tempXZ, tempY;
- int xcoord = data.xzOffset - PlayerData->Position.angles[0] + 45;
- char ycoord = data.yOffset - PlayerData->Position.angles[1] + 45;
- int scale = 10 * data.distance / VISUAL_RANGE;
- scale = 11 - scale;
- scale += (scale == 0);
- xcoord = (xcoord * vWidth) / 91;
- ycoord = (ycoord * vHeight) / 91;
- if(object->type == OBJ_SHIP)
- gfx_ScaledTransparentSprite_NoClip(sprite_BorgSphere, xcoord, ycoord, scale, scale);
- if(object->type == OBJ_PROJ)
- gfx_ScaledTransparentSprite_NoClip(sprite_Phaser, xcoord, ycoord, scale, scale);
- }
- }
- }
- }
- }
- void GetOffsets( Relativity_t *data, int delta_x, int delta_y, int delta_z){
- int xzangle = atan( delta_y / delta_z );
- int yangle = atan( delta_x / delta_z );
- double partDist = (delta_x * delta_x) + (delta_y * delta_y) + (delta_z * delta_z);
- data->xzOffset = 255 * xzangle / 360;
- data->yOffset = 255 * yangle / 360;
- data->distance = sqrt(partDist);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement