CharacterGenerator.cs

using UnityEngine;
using System.Collections;
using System;

public class CharacterGenerator : MonoBehaviour {
	private PlayerCharacter _toon;
	private const int START_POINTS = 350;
	private const int MIN_STARTING_ATTRIBUTE_VALUE = 10;
	private const int STARTING_VALUE = 50;
	private int pointsLeft;
	
	private const int OFFSET = 5;
	private const int LINE_HEIGHT = 20;
	
	private const int STAT_LABEL_WIDTH = 100;
	private const int BASEVALUE_LABEL_WIDTH = 30;
	private const int BUTTON_WIDTH = 20;
	private const int BUTTON_HEIGHT = 20;
	
	private const int statStartingPos = 40;
	
	public GUISkin mySkin;
	
	public GameObject playerPrefab;
	
	// Use this for initialization
	void Start () {
		GameObject pc = Instantiate(playerPrefab, Vector3.zero, Quaternion.identity) as GameObject;
		
		pc.name = "pc";
		
		//_toon = new PlayerCharacter();
		//_toon.Awake();
		_toon = pc.GetComponent<PlayerCharacter>() as PlayerCharacter;

		// Set default value to character's basic attribute
		pointsLeft = START_POINTS;
		for (int cnt = 0; cnt < Enum.GetValues(typeof(AttributeName)).Length; cnt++) {
			_toon.GetPrimaryAttribute(cnt).BaseValue = STARTING_VALUE;
			pointsLeft -= (STARTING_VALUE - MIN_STARTING_ATTRIBUTE_VALUE);
		}
		_toon.StatUpdate();
	}
	
	// Update is called once per frame
	void Update () {
		
	}
	
	// Below is a menu which adjust values of character
	void OnGUI () {
		GUI.skin = mySkin;
		DisplayName();
		DisplayPointsLeft();
		DisplayAttributes();
		DisplayVitals();
		DisplaySkills();
		if (_toon.Name == "" || pointsLeft > 0)
			DisplayCreateLabel();
		else
			DisplayCreateButton();
	}
	
	private void DisplayName () {
		GUI.Label(new Rect(10, 10, 50, 25), "Name:");
		_toon.Name = GUI.TextField(new Rect(65, 10, 100, 25), _toon.Name);
	}
	
	private void DisplayAttributes () {
		for (int cnt = 0; cnt < Enum.GetValues(typeof(AttributeName)).Length; cnt++) {
			GUI.Label(new Rect( OFFSET, 								// x
								LINE_HEIGHT * cnt + statStartingPos, 	// y
								STAT_LABEL_WIDTH, 						// width
								LINE_HEIGHT								// height
				), ((AttributeName)cnt).ToString());
				
			GUI.Label(new Rect( STAT_LABEL_WIDTH + OFFSET,				// x 
								LINE_HEIGHT * cnt + statStartingPos, 	// y
								BASEVALUE_LABEL_WIDTH, 					// width
								LINE_HEIGHT								// height
				), _toon.GetPrimaryAttribute(cnt).AdjustedBaseValue.ToString());
			
			if (GUI.Button(new Rect( STAT_LABEL_WIDTH + OFFSET + BASEVALUE_LABEL_WIDTH,		// x 
									 BUTTON_HEIGHT * cnt + statStartingPos,					// y
									 BUTTON_WIDTH, 											// width
									 BUTTON_HEIGHT											// height
				), "-")) {
				
				if (_toon.GetPrimaryAttribute(cnt).BaseValue > MIN_STARTING_ATTRIBUTE_VALUE) {
					_toon.GetPrimaryAttribute(cnt).BaseValue--;
					pointsLeft++;
					_toon.StatUpdate();
				}
			}
			
			if (GUI.Button(new Rect( STAT_LABEL_WIDTH + OFFSET + BASEVALUE_LABEL_WIDTH + BUTTON_WIDTH,	// x
									 BUTTON_HEIGHT * cnt + statStartingPos, 							// y
									 BUTTON_WIDTH, 														// width
									 BUTTON_HEIGHT														// height
				), "+")) {
				
				if (pointsLeft > 0) {
					_toon.GetPrimaryAttribute(cnt).BaseValue++;
					pointsLeft--;
					_toon.StatUpdate();
				}
			}
		}
	}
	
	private void DisplayVitals () {
		for (int cnt = 0; cnt < Enum.GetValues(typeof(VitalName)).Length; cnt++) {
			GUI.Label(new Rect( OFFSET, 										// x
								LINE_HEIGHT * (cnt + 7) + statStartingPos, 		// y
								STAT_LABEL_WIDTH, 								// width
								LINE_HEIGHT										// height
				), ((VitalName)cnt).ToString());
			
			GUI.Label(new Rect( STAT_LABEL_WIDTH + OFFSET, 						// x
								LINE_HEIGHT * (cnt + 7) + statStartingPos, 		// y
								BASEVALUE_LABEL_WIDTH, 							// width
								LINE_HEIGHT										// height
				), _toon.GetVital(cnt).AdjustedBaseValue.ToString());
			
		}
	}
	
	private void DisplaySkills () {
		for (int cnt = 0; cnt < Enum.GetValues(typeof(SkillName)).Length; cnt++) {
			GUI.Label(new Rect(	STAT_LABEL_WIDTH + OFFSET + BASEVALUE_LABEL_WIDTH + BUTTON_WIDTH * 2 + OFFSET * 2,	// x
								LINE_HEIGHT * cnt + statStartingPos, 												// y
								STAT_LABEL_WIDTH, 																	// width
								LINE_HEIGHT																			// height
				), ((SkillName)cnt).ToString());
			
			GUI.Label(new Rect( STAT_LABEL_WIDTH + OFFSET + BASEVALUE_LABEL_WIDTH + BUTTON_WIDTH * 2 + OFFSET * 2 + STAT_LABEL_WIDTH, 	// x 
								LINE_HEIGHT * cnt + statStartingPos, 																	// y
								BASEVALUE_LABEL_WIDTH, 																					// width
								LINE_HEIGHT																								// height
				), _toon.GetSkill(cnt).AdjustedBaseValue.ToString());
			
		}
	}
	
	private void DisplayPointsLeft () {
		GUI.Label(new Rect(250, 10, 100, 25), "Points Left: " + pointsLeft.ToString());
	}
	
	private void DisplayCreateLabel () {
		GUI.Label(new Rect( Screen.width / 2 - 50, 						// x
							 LINE_HEIGHT * 10 + statStartingPos, 				// y
							 100, 												// width
							 LINE_HEIGHT										// height
			), "Creating...", "Button");
	}
	
	private void DisplayCreateButton () {
		if (GUI.Button(new Rect( Screen.width / 2 - 50, 						// x
							 LINE_HEIGHT * 10 + statStartingPos, 				// y
							 100, 												// width
							 LINE_HEIGHT										// height
			), "Create")) {
			
			// Change the cur value of the vitals to the max modified value  of that vital
			UpdateCurVitalValues();
			
			// Save the character data
			GameObject.Find("__GameSettings").GetComponent<GameSettings>().SaveCharacterData();
			
			Application.LoadLevel("Level1");	// "complete-10" is "Targetting Example" in video
		}
	}
	
	private void UpdateCurVitalValues () {
		for (int cnt = 0; cnt < Enum.GetValues(typeof(VitalName)).Length; cnt++) {
			_toon.GetVital(cnt).CurValue = _toon.GetVital(cnt).AdjustedBaseValue;
		}		
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值