x


3Dplatformer tutorial GUI script - adding a timer GUI

I have this idea where depending upon whether Lerpz triggers the enemy or not, the timer decreases in value (along with continuously decreasing by seconds). The function of the timer is to allow game time (and can in essence decrease regularly and by a trigger point). I would want this timer to show up as a, "GUI" object like the fuel cells and life icons at the bottom of the screen. The timer can be in the upper top right or left corner of the screen, and I thought of writing it in the GameHUD script of the Lerpz game. Please take a look and let me know if it makes sense to add the timer script here. The GUISkin is basically what I need. So, I need it to be in the same format as the others. Thanks for the help in advance.

// GameHUD: Platformer Tutorial Master GUI script.

// This script handles the in-game HUD, showing the lives, number of fuel cells remaining, etc.

var guiSkin: GUISkin; var nativeVerticalResolution = 1200.0;

// main decoration textures: var healthImage: Texture2D; var healthImageOffset = Vector2(0, 0);

// the health 'pie chart' assets consist of six textures with alpha channels. Only one is ever shown: var healthPieImages : Texture2D[]; var healthPieImageOffset = Vector2(10, 147);

// the lives count is displayed in the health image as a text counter var livesCountOffset = Vector2(425, 160);

// The fuel cell decoration image on the right side var fuelCellsImage: Texture2D; var fuelCellOffset = Vector2(0, 0);

// The counter text inside the fuel cell image var fuelCellCountOffset = Vector2(391, 161);

private var playerInfo : ThirdPersonStatus;

// Cache link to player's state management script for later use. function Awake() { playerInfo = FindObjectOfType(ThirdPersonStatus);

if (!playerInfo)
    Debug.Log("No link to player's state manager.");

}

function OnGUI () {

var itemsLeft = playerInfo.GetRemainingItems(); // fetch items remaining -- the fuel cans. This can be a negative number!

// Similarly, health needs to be clamped to the number of pie segments we can show.
// We also need to check it's not negative, so we'll use the Mathf Clamp() function:
var healthPieIndex = Mathf.Clamp(playerInfo.health, 0, healthPieImages.length);

// Displays fuel cans remaining as a number.    
// As we don't want to display negative numbers, we clamp the value to zero if it drops below this:
if (itemsLeft < 0)
    itemsLeft = 0;

// Set up gui skin
GUI.skin = guiSkin;

// Our GUI is laid out for a 1920 x 1200 pixel display (16:10 aspect). The next line makes sure it rescales nicely to other resolutions.
GUI.matrix = Matrix4x4.TRS (Vector3(0, 0, 0), Quaternion.identity, Vector3 (Screen.height / nativeVerticalResolution, Screen.height / nativeVerticalResolution, 1)); 

// Health & lives info.
DrawImageBottomAligned( healthImageOffset, healthImage); // main image.

// now for the pie chart. This is where a decent graphics package comes in handy to check relative sizes and offsets.
var pieImage = healthPieImages[healthPieIndex-1];
DrawImageBottomAligned( healthPieImageOffset, pieImage );

// Displays lives left as a number. 
DrawLabelBottomAligned( livesCountOffset, playerInfo.lives.ToString() );    

// Now it's the fuel cans' turn. We want this aligned to the lower-right corner of the screen:
DrawImageBottomRightAligned( fuelCellOffset, fuelCellsImage);

DrawLabelBottomRightAligned( fuelCellCountOffset, itemsLeft.ToString() );

}

function DrawImageBottomAligned (pos : Vector2, image : Texture2D) { GUI.Label(Rect (pos.x, nativeVerticalResolution - image.height - pos.y, image.width, image.height), image); }

function DrawLabelBottomAligned (pos : Vector2, text : String) { GUI.Label(Rect (pos.x, nativeVerticalResolution - pos.y, 100, 100), text); }

function DrawImageBottomRightAligned (pos : Vector2, image : Texture2D) { var scaledResolutionWidth = nativeVerticalResolution / Screen.height * Screen.width; GUI.Label(Rect (scaledResolutionWidth - pos.x - image.width, nativeVerticalResolution - image.height - pos.y, image.width, image.height), image); }

function DrawLabelBottomRightAligned (pos : Vector2, text : String) { var scaledResolutionWidth = nativeVerticalResolution / Screen.height * Screen.width; GUI.Label(Rect (scaledResolutionWidth - pos.x, nativeVerticalResolution - pos.y, 100, 100), text); }

more ▼

asked Mar 08 '11 at 11:42 PM

Taragon gravatar image

Taragon
25 19 19 23

(comments are locked)
10|3000 characters needed characters left

0 answers: sort voted first
Be the first one to answer this question
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x3680
x347
x127
x79

asked: Mar 08 '11 at 11:42 PM

Seen: 942 times

Last Updated: Mar 08 '11 at 11:42 PM