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;
}
}
}
分享到:
相关推荐
角色生成器 这个项目是一个实验,测试了建立框架以进行全面索引和比较扩展的3.5 D&D类(包括所有资料集)的复杂性。 该框架最终将变得相对简单,但是文本数据的输入将需要手动且大量地完成。 可以判断,完成此项目...
Eos Chargen 荷兰科幻小说角色生成器,编辑和工作表。 该项目已于2018年1月17日开始,目的是创建一个数字化,易于阅读,易于填写的字符表。 在线镜像: (!不同步到git!...原始待办事项选择并设置技能的表格。...
摇滚乐D&D角色生成器该字符表生成器旨在简化构建第一个龙与地下城角色的过程。 它会将《手册》中的大量信息缩小为关键要素,从而使您在第1级起步并开始工作。 经验丰富的玩家也可以使用此工具来建立一个单发角色,...
pre_o_1csdn63m9a1bs0e1rr51niuu33e.a
matlab建立计算力学课程的笔记和文件.zip
FT_Prog_v3.12.38.643--FTD USB 工作模式设定及eprom读写
matlab基于RRT和人工势场法混合算法的路径规划.zip
matlab基于matlab的两步定位软件定义接收机的开源GNSS直接位置估计插件模块.zip
office 2016三和一精简版
文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
麦肯锡咨询顾问必备宝典-时间管理.ppt
文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
麦肯锡顾问的黄金思考方法.pptx
91fdd461elb59a4ce8dfcfc46bc283a7.msi
ansys maxwell
5-5
xx广告促销计划流程实施手册.ppt
仿小米商城微信小程序源码+项目说明.zip
文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。