158 lines
7.5 KiB
C#
Raw Normal View History

2021-07-01 03:08:38 +08:00
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
2021-07-01 03:08:38 +08:00
public class Machine : Interactive
2021-07-01 03:08:38 +08:00
{
Squashed commit of the following: commit 2781f7f874d8b595397c9bc5108186d845fe6bb0 Merge: 2faf844 b262e57 Author: Roman <1325980292@qq.com> Date: Mon Aug 9 23:15:43 2021 +0800 详情见最新RomanVers Merge Request: ? Created By: @Roman Accepted By: @Roman URL: https://gensokyogroup.coding.net/p/RedGame/d/Warcorrespondents/git/merge/74 commit b262e579b24c8ffba6f08a5b79b9577b6d850d8b Author: Roman <1325980292@qq.com> Date: Mon Aug 9 23:14:55 2021 +0800 任务:以动画实现移动 *:实验场景:【各种系统测试与陈列】 1.创建测试小孩游戏物体 2.创建新的AC 3.编写步行动画逻辑 *:遇到问题,动画似乎不行,移动方式暂时换回原来的。 *:其余场景没有受到影响 commit 2faf844f461da8740a63e25413657b264e4eec22 Merge: 7749e35 0bc1c97 Author: Roman <1325980292@qq.com> Date: Mon Aug 9 21:24:20 2021 +0800 合并了麒哥的动画包2 Merge Request: ?? Created By: @Roman Accepted By: @Roman URL: https://gensokyogroup.coding.net/p/RedGame/d/Warcorrespondents/git/merge/73 commit 0bc1c970e5ec4d993a0c81c7149901408664df76 Author: Roman <1325980292@qq.com> Date: Mon Aug 9 21:23:33 2021 +0800 合并了麒哥的动画包2 commit 7749e35c85f697a28234892cef01b369ef1b8c9c Merge: a4d3c53 9b7dbdf Author: Roman <1325980292@qq.com> Date: Sat Aug 7 01:32:57 2021 +0800 详情见RomanVersion最新提交 commit 9b7dbdf941327c1c891d19e82dc0460abfdb39c4 Author: Roman <1325980292@qq.com> Date: Sat Aug 7 01:31:29 2021 +0800 任务:搭建“序章-战场”的整体流程框架 1.创建可交互电报机这个逻辑物体 *.在所有脚本首行添加说明方便查看 2.编写假电报机类,因为这个电报机没有电报机功能,而是一个类似事件的物体。 3.使假电报机可以分清场景中电话线断裂和修复的情况,并对其做出不同反应。 4.没修完电报机的反馈等待策划,修完了的等待我明天编写场景的多态系统 5.均通过了程序简单测试,请各位尽快拉取寻找问题 下班,别摸了,兄弟们 commit a4d3c53f64887ad36dd7cdfce6ca8dda59471e8f Merge: 2dd6b3a b1dc321 Author: Roman <1325980292@qq.com> Date: Mon Jul 26 19:31:18 2021 +0800 傻逼coding,草你妈 Merge Request: 傻逼coding,草你妈 Created By: @Roman Accepted By: @Roman URL: https://gensokyogroup.coding.net/p/RedGame/d/Warcorrespondents/git/merge/52 commit b1dc32196aedf51326078a004361078fde8589ca Author: Roman <1325980292@qq.com> Date: Mon Jul 26 19:30:24 2021 +0800 傻逼coding commit d816886a9d13de83ff96d0e96358433b95dbcc17 Author: Roman <1325980292@qq.com> Date: Mon Jul 26 19:28:51 2021 +0800 ? commit 86f446eb05a5150a3933f47f77c28099179a7291 Author: Roman <1325980292@qq.com> Date: Mon Jul 26 19:26:14 2021 +0800 测试 # Conflicts: # UserSettings/EditorUserSettings.asset
2021-08-09 23:45:01 +08:00
//电报机类。控制电报机的信息和各种功能,非常关键🤖
private Text codeTextView;//电码TextView显示目前打了打码
private IndexRecoder indexRecoder;//策划数值接口
private AllLinesInfo linesChecker;//路线信息
[Tooltip("把这台机器需要打的句子拖进来,在:抽象的东西->句子们。没有就自己建一个创建新物体加上Sentence组件")]
public Sentence[] sentences;//这台机器需要的句子们
private string code;//目前记录中已打的电码
private string tempTranslateResult;//临时翻译结果,一般是数字序列
[Tooltip("机器电码打完后的事件,由于不同的机器打完后触发的东西不一样,所以用事件像拼图一样把这个函数写在外面")]
public Event m_Event;//机器电码打完后的事件,由于不同的机器打完后触发的东西不一样,所以用事件像拼图一样把这个函数写在外面
[Tooltip("界面展示需要打的句子的TextView数组请把对应的显示句子的TextView们拖进来。就算后面两行不够也直接加就行。但是要记得和sentencs数组的长度相同")]
public Text[] sentencesTextView;//界面展示需要打的句子的TextView数组
2021-07-01 03:08:38 +08:00
void Start()
{
codeTextView = m_interface.GetComponentInChildren<Text>();
indexRecoder = FindObjectOfType<IndexRecoder>();
linesChecker = FindObjectOfType<AllLinesInfo>();
2021-07-01 03:08:38 +08:00
}
//电报机界面被打开的时候调用
public override void OnCall()
{
if(LinesCheck())//如果线路全通
{
m_interface.SetActive(true);//把这个交互对象的界面打开,这里是电报机界面
ShwoTheSentencesInfo();//初始化展示电报机界面的需要打的句子
UpdateTheSentencesTextViewStates();//更新一下显示句子TextView的颜色状态
}
else
{
Debug.Log("还有线路没通");
}
}
//更新界面句子们的颜色信息的函数,黄色代表该句正在打,绿色代表该句已经完成,红色代表该句等待打
private void UpdateTheSentencesTextViewStates()
{
bool firstFlag = true;//设立一个首次标记,因为首次碰到没打完的标记为黄色,表示正在打此句
for(int i = 0; i < sentences.Length; i++)//便利每一个句子
{
if(sentences[i].IsThisFinished()) sentencesTextView[i].color = Color.green;//如果打完了,标记为绿色
else if(firstFlag){sentencesTextView[i].color = Color.yellow;firstFlag = false;}//如果第一次碰到没打完的,标记为黄色,表示在打
else sentencesTextView[i].color = Color.red;//此外代表没打的,标记为红色
}
}
//初始化展示电报机界面的需要打的句子的函数,一般只在电报机界面启动的时候调用一次
private void ShwoTheSentencesInfo()
{
for(int i = 0; i < sentences.Length; i++)//便利每一个句子把句子的内容放到对应的TextView里面
{
sentencesTextView[i].text = //把对应textView的内容设置为
sentences[i].content +//句子的中文加上
"\n" +//换一行加上
sentences[i].num;//句子对应的数字序列
//粗鲁的写法但是后期这个会更新仅作debug使用
}
}
//用来检查电话线的函数如果电话线全通返回true否则返回false
private bool LinesCheck()
{
if(linesChecker.needCount == linesChecker.OKCount) return true;
else return false;
}
//从Player类发消息来调用这个函数temp为接受到的字符可能是. || -。
public override void Coding(string temp)
{
code += temp;
if(code.Length >= 5) ClearChecker(code);//当长度超过5位每打一位就检查一下是否有特殊字符
if(code.Length % 5 == 0)
{
Translate(code);//每输入五位就翻译一下
CompleteChecker();//每五位要检查一下句子是否打对了
}
codeTextView.text = code;//让TextVie更新
}
//每打五位电码调用一次,检查这个句子是否被打完
private void CompleteChecker()
{
Sentence temp = null;//目前在打的句子
foreach(Sentence i in sentences) if(!i.IsThisFinished()) {temp = i;break;}//找到最近的那个没有完成的句子,也就是目前在打的句子
try{
if(temp.num.Equals(tempTranslateResult))//如果这个句子的数字序列等于目前翻译出来的数字序列
{
temp.CompleteTheSentence();//说明这个句子完成了,修改它的标记
UpdateTheSentencesTextViewStates();//有句子打完了,更新一下句子的颜色状态
ClearTheInputAndTempResult();//有句子打完后,清除输入框和临时翻译结果
if(AllSentenceClearChecker()) OnAllSentenceClear();//当所有句子都打完了,触发此函数
}
}
catch(System.NullReferenceException e)
{
Debug.Log("打完了,不要再打了,往后会出错误了");
e.ToString();
}
}
//当所有句子都被打完了,执行事件,事件代码请到事件类中去编写
private void OnAllSentenceClear(){m_Event.OnCall();}
//当确认打完一句的时候调用,检查一下是否所有句子都被打完了
private bool AllSentenceClearChecker()
{
bool flag = true;//默认全部完成
foreach(Sentence temp in sentences) if(!temp.IsThisFinished()) flag = false;//检查机器里的每一个句子如果它有没完成的把标记改成flase
return flag;//返回标记
}
//译者函数。输入一串字符串在这里会对照数值记录者中的codeBook翻译没有的code会被翻译成X
//每当输入总体的长度是五的倍数的时候才会调用这个翻译函数因为每个数字单元都是5位
private void Translate(string code)
{
string result = "";
for(int i = 0; i < code.Length/5; i++)
{
string temp = code.Substring(i*5,5);
try{
result += indexRecoder.codeBook[temp];
}
catch
{
result += "X";
}
}
Debug.Log("翻译的结果是:"+result);
tempTranslateResult = result;
}
//清除检查者函数。从自身Codeing函数调用每次有新字符输入的时候就调用。
//检查输入总体中是否存在连续的八个点,有则清空当前输入的所有东西
private void ClearChecker(string code)
{
int hasClearer = code.IndexOf(".-.-.");
if(hasClearer != -1)
{
Debug.Log("检查到特殊码,清除所有输入内容");
// tempTranslateResult = "";
// this.code = "";
ClearTheInputAndTempResult();
}
}
//清除目前输入框的内容、记录中的电码和临时翻译结果。在检查到清除特殊码和打完一句的时候调用
private void ClearTheInputAndTempResult(){tempTranslateResult = "";code = "";}
2021-07-01 03:08:38 +08:00
}