新增模块xml单独配置功能

This commit is contained in:
shenjianxing 2024-12-18 16:20:06 +08:00
parent dc06a4b39b
commit 4925d9d4a1
11 changed files with 1264 additions and 111 deletions

View File

@ -164,6 +164,14 @@ public class ActionHelper
var strAction = (XMLTool.StringListAction)act; var strAction = (XMLTool.StringListAction)act;
return HighLightAction.Allocate(act.Value, strAction.args[0], strAction.args[1]); return HighLightAction.Allocate(act.Value, strAction.args[0], strAction.args[1]);
} }
case "LoadRes":
{
var strAction = (XMLTool.StringListAction)act;
return LoadResAction.Allocate(act.Value, strAction.args[0]);
}
default:
Debug.LogError($"没有找到此Action的类型{act.Type}");
break;
} }
break; break;
case XMLTool.Condition condition: case XMLTool.Condition condition:

View File

@ -0,0 +1,103 @@
using System;
using System.Data.SqlTypes;
using System.Xml.Linq;
using UnityEngine;
using XMLTool;
namespace QFramework
{
internal class LoadResAction : IAction
{
public System.Action OnFinished { get; set; }
private LoadResAction()
{
}
private static readonly SimpleObjectPool<LoadResAction> mPool =
new SimpleObjectPool<LoadResAction>(() => new LoadResAction(), null, 10);
string fileName;
string type;
public static LoadResAction Allocate(string fileName, string type, System.Action OnFinished = null)
{
var retNode = mPool.Allocate();
retNode.ActionID = ActionKit.ID_GENERATOR++;
retNode.Deinited = false;
retNode.Reset();
retNode.fileName = fileName;
retNode.type = type;
retNode.OnFinished = OnFinished;
return retNode;
}
public ulong ActionID { get; set; }
public ActionStatus Status { get; set; }
public void OnStart()
{
ResLoader resLoader = ResLoader.Allocate();
string path = Global.xmlPath + fileName;
switch (type)
{
case "xml":
resLoader.Add2Load(path.ToLocalTextResName(), (success, res) =>
{
if (success)
{
string xmlStr = res.Asset.As<StringAsset>().text;
if (string.IsNullOrEmpty(xmlStr) == false)
{
// ¼ÓÔØXML
XDocument doc = XDocument.Parse(xmlStr);
// »ñÈ¡¸ùÔªËØ
XElement moduleXml = doc.Root;
XmlParser.LoadModule(moduleXml, Global.Instance.appData);
}
}
});
break;
}
resLoader.LoadAsync(() =>
{
resLoader.Recycle2Cache();
this.Finish();
});
}
public void OnExecute(float dt)
{
}
public void OnFinish()
{
}
public void Reset()
{
Status = ActionStatus.NotStart;
Paused = false;
}
public bool Paused { get; set; }
public void Deinit()
{
if (!Deinited)
{
OnFinished = null;
Deinited = true;
mPool.Recycle(this);
}
}
public bool Deinited { get; set; }
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 0c2b87ed3cbc0554d8644f0ae736cc6f
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,16 @@
using QFramework;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PreLoadController : MonoSingleton<PreLoadController>
{
public ResLoader resLoader => ResLoader.Allocate();
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: b7e736c25d5d0de44967b40031251f32
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -18,6 +18,7 @@ public class Global : Singleton<Global>
public static string appXmlPath = dataPath + "/App.xml"; public static string appXmlPath = dataPath + "/App.xml";
public static string imagePath = dataPath + "/Image/"; public static string imagePath = dataPath + "/Image/";
public static string videoPath = dataPath + "/Video/"; public static string videoPath = dataPath + "/Video/";
public static string xmlPath = dataPath + "/Xml/";
public static APPSetting appSetting { get; } = new APPSetting(); public static APPSetting appSetting { get; } = new APPSetting();
public enum AppType public enum AppType

View File

@ -18,7 +18,7 @@ public class Launch : MonoBehaviour
IEnumerator StartApp() IEnumerator StartApp()
{ {
yield return ResKit.InitAsync(); yield return ResKit.InitAsync();
bool isLoadFinished = false;
loader.Add2Load(Global.appXmlPath.ToLocalTextResName(), (success, res) => loader.Add2Load(Global.appXmlPath.ToLocalTextResName(), (success, res) =>
{ {
if (success) if (success)
@ -29,13 +29,20 @@ public class Launch : MonoBehaviour
loader.LoadAsync(() => loader.LoadAsync(() =>
{ {
isLoadFinished = true;
ActionKit.Delay(2f, () => ActionKit.Delay(2f, () =>
{ {
loader.Recycle2Cache(); loader.Recycle2Cache();
loader = null; loader = null;
}); });
}); });
yield return UIKit.OpenPanelAsync<UILoading>();
yield return new WaitUntil(() => isLoadFinished == true);
yield return ActionHelper.GetActionAndSub(Global.Instance.appData.preLoad.action).Start(this);
yield return UIKit.OpenPanelAsync<UIModeSelect>(); yield return UIKit.OpenPanelAsync<UIModeSelect>();
UIKit.HidePanel<UILoading>();
// ÔÝʱ²»Óà // ÔÝʱ²»ÓÃ
//foreach (var item in Global.Instance.appData.ActionDict) //foreach (var item in Global.Instance.appData.ActionDict)
@ -45,5 +52,10 @@ public class Launch : MonoBehaviour
//} //}
} }
IEnumerator PreLoad()
{
yield return null;
}
} }

View File

@ -1,7 +1,9 @@
using MoonSharp.Interpreter.CoreLib;
using QFramework; using QFramework;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Net.Configuration;
using System.Xml; using System.Xml;
using System.Xml.Linq; using System.Xml.Linq;
using UnityEngine; using UnityEngine;
@ -10,9 +12,15 @@ namespace XMLTool
{ {
public class AppData public class AppData
{ {
public PreLoad preLoad;
public List<Module> Modules { get; set; } public List<Module> Modules { get; set; }
} }
public class PreLoad
{
public Action action;
}
public class Module public class Module
{ {
@ -133,139 +141,164 @@ namespace XMLTool
// ³õʼ»¯AppData¶ÔÏó // ³õʼ»¯AppData¶ÔÏó
AppData appData = new AppData AppData appData = new AppData
{ {
preLoad = new PreLoad(),
Modules = new List<Module>(), Modules = new List<Module>(),
}; };
// 获取模块元素
// 解析预加载动作
var preLoadElement = appDataElement.Element("PreLoad");
foreach (XElement actionElement in preLoadElement.Elements("Action"))
{
var action = ParseAction(actionElement);
appData.preLoad.action = action;
}
// 加载模块数据
LoadModules(appDataElement, appData);
return appData;
}
public static void LoadModules(XElement appDataElement, AppData appData)
{
foreach (XElement moduleElement in appDataElement.Elements("Module")) foreach (XElement moduleElement in appDataElement.Elements("Module"))
{ {
if (moduleElement != null) LoadModule(moduleElement, appData);
}
}
public static void LoadModule(XElement moduleElement, AppData appData)
{
if (moduleElement != null)
{
Module module = new Module()
{ {
Module module = new Module() Devices = new List<Device>(),
ActionDict = new Dictionary<string, Action>(),
Operations = new List<Operation>(),
};
appData.Modules.Add(module);
// 解析模块名称
module.type = moduleElement.Element("Type")?.Value;
module.ModuleName = moduleElement.Element("Name")?.Value;
module.Scene = moduleElement.Element("Scene")?.Value;
// 解析设备
foreach (XElement deviceElement in moduleElement.Elements("Device"))
{
Device device = new Device
{ {
Devices = new List<Device>(), Name = deviceElement.Element("Name")?.Value,
ActionDict = new Dictionary<string, Action>(), Icon = deviceElement.Element("Icon")?.Value,
Operations = new List<Operation>(), HighColor = deviceElement.Element("HighLight")?.Attribute("color")?.Value,
Path = deviceElement.Element("Path")?.Value,
Tip = deviceElement.Element("Tip")?.Value,
MeshCollider = deviceElement.Element("MeshCollider") != null,
BoxColliderCenter = deviceElement.Element("BoxCollider")?.Attribute("center")?.Value,
BoxColliderSize = deviceElement.Element("BoxCollider")?.Attribute("size")?.Value,
}; };
appData.Modules.Add(module); module.Devices.Add(device);
// 解析模块名称 }
module.type = moduleElement.Element("Type")?.Value; // 解析动作
module.ModuleName = moduleElement.Element("Name")?.Value; foreach (XElement actionElement in moduleElement.Elements("Action"))
module.Scene = moduleElement.Element("Scene")?.Value; {
var action = ParseAction(actionElement);
// 解析设备
foreach (XElement deviceElement in moduleElement.Elements("Device"))
{
Device device = new Device
{
Name = deviceElement.Element("Name")?.Value,
Icon = deviceElement.Element("Icon")?.Value,
HighColor = deviceElement.Element("HighLight")?.Attribute("color")?.Value,
Path = deviceElement.Element("Path")?.Value,
Tip = deviceElement.Element("Tip")?.Value,
MeshCollider = deviceElement.Element("MeshCollider") != null,
BoxColliderCenter = deviceElement.Element("BoxCollider")?.Attribute("center")?.Value,
BoxColliderSize = deviceElement.Element("BoxCollider")?.Attribute("size")?.Value,
};
module.Devices.Add(device);
}
// ½âÎö¶¯×÷ // ½âÎö¶¯×÷
foreach (XElement actionElement in moduleElement.Elements("Action")) module.ActionDict.Add(action.Name, action);
}
// 解析状态机
foreach (XElement fsmElement in moduleElement.Elements("FSM"))
{
FSM fsm = new FSM()
{ {
var action = ParseAction(actionElement); Name = fsmElement.Attribute("name")?.Value,
// 解析动作 StateDict = new Dictionary<string, State>(),
module.ActionDict.Add(action.Name, action); Transisions = new List<Transision>(),
}
// 解析状态机
foreach (XElement fsmElement in moduleElement.Elements("FSM"))
{
FSM fsm = new FSM()
{
Name = fsmElement.Attribute("name")?.Value,
StateDict = new Dictionary<string, State>(),
Transisions = new List<Transision>(),
};
// 解析状态
foreach (var stateNode in fsmElement.Elements("State"))
{
State state = new State()
{
Name = stateNode.Attribute("name")?.Value,
}; };
fsm.StateDict.Add(state.Name, state);
// 解析状态 XElement enterElement = stateNode.Element("Enter");
foreach (var stateNode in fsmElement.Elements("State")) XElement exitElement = stateNode.Element("Exit");
if (enterElement != null)
{ {
State state = new State() state.Enter = new StatePart();
{ state.Enter.Action = ParseAction(enterElement.Element("Action"));
Name = stateNode.Attribute("name")?.Value,
};
fsm.StateDict.Add(state.Name, state);
XElement enterElement = stateNode.Element("Enter");
XElement exitElement = stateNode.Element("Exit");
if (enterElement != null)
{
state.Enter = new StatePart();
state.Enter.Action = ParseAction(enterElement.Element("Action"));
}
if (exitElement != null)
{
state.Exit = new StatePart();
state.Exit.Action = ParseAction(exitElement.Element("Action"));
}
} }
// 解析状态转换 if (exitElement != null)
foreach (var transNode in fsmElement.Elements("Transision"))
{ {
Transision trans = new Transision() state.Exit = new StatePart();
{ state.Exit.Action = ParseAction(exitElement.Element("Action"));
Name = transNode.Attribute("name")?.Value,
From = transNode.Attribute("from")?.Value,
To = transNode.Attribute("to")?.Value,
};
trans.Action = ParseCondition(transNode.Element("Condition"));
fsm.Transisions.Add(trans);
} }
module.FSM.Add(fsm.Name, fsm);
} }
// 解析状态转换
foreach (var operationNode in moduleElement.Elements("Operation")) foreach (var transNode in fsmElement.Elements("Transision"))
{ {
//module.Operations Transision trans = new Transision()
// 解析操作步骤
var op = new Operation()
{ {
Steps = new List<Step>(), Name = transNode.Attribute("name")?.Value,
From = transNode.Attribute("from")?.Value,
To = transNode.Attribute("to")?.Value,
}; };
op.moduleType = operationNode.Attribute("moduleType")?.Value; trans.Action = ParseCondition(transNode.Element("Condition"));
foreach (XElement stepNode in operationNode.Elements("Step")) fsm.Transisions.Add(trans);
{
op.Steps.Add(ParserStep(stepNode, null));
}
module.Operations.Add(op);
} }
module.FSM.Add(fsm.Name, fsm);
}
foreach (var operationNode in moduleElement.Elements("Operation"))
{
//module.Operations
// 解析操作步骤
XElement scoreNode = moduleElement.Element("Score"); var op = new Operation()
if (scoreNode != null)
{ {
module.score = new Score() Steps = new List<Step>(),
{ };
scores = new List<ScoreStep>() op.moduleType = operationNode.Attribute("moduleType")?.Value;
}; foreach (XElement stepNode in operationNode.Elements("Step"))
foreach (var item in scoreNode.Elements("Item")) {
{ op.Steps.Add(ParserStep(stepNode, null));
module.score.scores.Add( }
new ScoreStep() module.Operations.Add(op);
{ }
step = item.Attribute("step")?.Value,
name = item.Attribute("name")?.Value,
sum = item.Attribute("sum")?.Value, XElement scoreNode = moduleElement.Element("Score");
bind = item.Attribute("bind")?.Value, if (scoreNode != null)
}); {
} module.score = new Score()
{
scores = new List<ScoreStep>()
};
foreach (var item in scoreNode.Elements("Item"))
{
module.score.scores.Add(
new ScoreStep()
{
step = item.Attribute("step")?.Value,
name = item.Attribute("name")?.Value,
sum = item.Attribute("sum")?.Value,
bind = item.Attribute("bind")?.Value,
});
} }
} }
} }
return appData;
} }
public static Step ParserStep(XElement stepNode, Step parent) public static Step ParserStep(XElement stepNode, Step parent)
@ -658,6 +691,21 @@ namespace XMLTool
newAction = act; newAction = act;
} }
break; break;
case "LoadRes":
{
var act = new StringListAction();
XAttribute resType = action.Attribute("resType");
if (resType != null)
{
act.args.Add(resType.Value);
}
else
{
act.args.Add("");
}
newAction = act;
}
break;
default: default:
newAction = new Action(); newAction = new Action();
break; break;

View File

@ -1,6 +1,13 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<AppData> <AppData>
<PreLoad>
<Action type="Parallel">
<Action type="LoadRes" value="Pig.xml" resType="xml"></Action>
</Action>
</PreLoad>
<Module> <Module>
<Scene>Scene</Scene> <Scene>Scene</Scene>
<Type>All</Type> <Type>All</Type>
@ -631,16 +638,22 @@
</Reset> </Reset>
<Start> <Start>
<Action type="Sequence"> <Action type="Sequence">
<Action type="Video" value="test.mp4" size="700,700" offset="100,100" finishedEvent="finished" closeEvent="close"/> <Action type="Video" value="test.mp4" size="700,700" offset="100,100" finishedEvent="finished" closeEvent="close"/>
<Condition type="StrEvent" value="close"></Condition> <Condition type="StrEvent" value="close"></Condition>
<Action type="Log" value="aaaa"></Action> <Action type="Log" value="aaaa"></Action>
<Action type="Btns" value="下一步,上一步,确定,取消"></Action> <Action type="Btns" value="下一步,上一步,确定,取消"></Action>
<Action type="CameraSwitch" nearPos="-3.543,3.007,-1.463" nearRot="27.9597,270,2.899792E-06" normalPos="-3.206,3.24,-1.425" normalRot="27.9597,270,2.899792E-06" isNear="false"></Action> <Action type="CameraSwitch" nearPos="-3.543,3.007,-1.463" nearRot="27.9597,270,2.899792E-06" normalPos="-3.206,3.24,-1.425" normalRot="27.9597,270,2.899792E-06" isNear="false"></Action>
<Action type="HighLight" value="Cube" isHigh="true" color="0,255,0,255"></Action>
<Action type="Delay" value="5"></Action>
<Action type="HighLight" value="Cube" isHigh="false" color="0,255,0,255"></Action>
<Action type="SetScore" name="术前准备器械准备" value="6.5"></Action> <Action type="SetScore" name="术前准备器械准备" value="6.5"></Action>
<Action type="Hint" value="请在右侧物品栏中,点选当前实训所需的器械" time="-1" icon="true" audio="Q001.mp3"></Action> <Action type="Hint" value="请在右侧物品栏中,点选当前实训所需的器械" time="-1" icon="true" audio="Q001.mp3"></Action>
<Action type="UITools" devices="创巾钳,直止血钳,弯止血钳,组织钳,尖剪,钝剪,持针钳,无齿镊,手术刀柄3号,刀片23号,肠钳,肾形盘,器械盒,S拉钩,铁锤,撬骨板,咬骨钳,骨刀,手术刀柄4号,手术刀片16号" answers="创巾钳,直止血钳,弯止血钳,组织钳,尖剪,钝剪,持针钳,无齿镊,手术刀柄3号,刀片23号,肠钳,肾形盘,器械盒,S拉钩" <Action type="UITools" devices="创巾钳,直止血钳,弯止血钳,组织钳,尖剪,钝剪,持针钳,无齿镊,手术刀柄3号,刀片23号,肠钳,肾形盘,器械盒,S拉钩,铁锤,撬骨板,咬骨钳,骨刀,手术刀柄4号,手术刀片16号" answers="创巾钳,直止血钳,弯止血钳,组织钳,尖剪,钝剪,持针钳,无齿镊,手术刀柄3号,刀片23号,肠钳,肾形盘,器械盒,S拉钩"
@ -741,7 +754,7 @@
<Start> <Start>
<Action type="Sequence"> <Action type="Sequence">
<Action type="LockCamera" value="true" /> <Action type="LockCamera" value="true" />
<Action type="TextTip" value="这里是文字描述" audio="q001.mp3" btns="确定,取消"/> <Action type="TextTip" value="这里是文字描述\n11111\n22222\n333333" audio="q001.mp3" btns="确定,取消"/>
<Action type="Move" value="FlyCamera" to="-3.206,3.24,-1.425" time="0"></Action> <Action type="Move" value="FlyCamera" to="-3.206,3.24,-1.425" time="0"></Action>
<Action type="Rotate" value="FlyCamera" to="27.9597,270,2.899792E-06" time="0"></Action> <Action type="Rotate" value="FlyCamera" to="27.9597,270,2.899792E-06" time="0"></Action>
<Action type="Btns" value="下一步"></Action> <Action type="Btns" value="下一步"></Action>
@ -923,4 +936,5 @@
</Module> </Module>
</AppData> </AppData>

929
Data/Xml/Pig.xml Normal file
View File

@ -0,0 +1,929 @@
<?xml version="1.0" encoding="utf-8"?>
<Module>
<Scene>Scene</Scene>
<Type>All</Type>
<Name>模块2</Name>
<Device>
<Name>骨刀</Name>
<Icon>工具/骨刀.png</Icon>
</Device>
<Device>
<Name>撬骨板</Name>
<Icon>工具/撬骨板.png</Icon>
</Device>
<Device>
<Name>手术刀柄4号</Name>
<Icon>工具/手术刀柄4号.png</Icon>
</Device>
<Device>
<Name>手术刀片16号</Name>
<Icon>工具/手术刀片16号.png</Icon>
</Device>
<Device>
<Name>铁锤</Name>
<Icon>工具/铁锤.png</Icon>
</Device>
<Device>
<Name>咬骨钳</Name>
<Icon>工具/咬骨钳.png</Icon>
</Device>
<Device>
<Name>T管</Name>
<Icon>耗材/T管.png</Icon>
</Device>
<Device>
<Name>冲洗管</Name>
<Icon>耗材/冲洗管.png</Icon>
</Device>
<Device>
<Name>钢丝</Name>
<Icon>耗材/钢丝.png</Icon>
</Device>
<Device>
<Name>骨钉</Name>
<Icon>耗材/骨钉.png</Icon>
</Device>
<Device>
<Name>骨蜡</Name>
<Icon>耗材/骨蜡.png</Icon>
</Device>
<Device>
<Name>Vetwish软骨素</Name>
<Icon>药品/Vetwish软骨素.png</Icon>
</Device>
<Device>
<Name>美洛昔康</Name>
<Icon>药品/美洛昔康.png</Icon>
</Device>
<Device>
<Name>组织钳</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_JianZiLei/zuzhiqian</Path>
<Tip>组织钳</Tip>
<BoxCollider size="0.15,0.05,0.06" center="-0.03,0,0"/>
<Icon>工具/骨刀.png</Icon>
</Device>
<Device>
<Name>肠钳</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_JianZiLei/changqian</Path>
<Tip>肠钳</Tip>
<BoxCollider size="0.15,0.05,0.06" center="-0.03,0,0"/>
<Icon>工具/骨刀.png</Icon>
</Device>
<Device>
<Name>无齿海绵钳</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_JianZiLei/wuchihaimianqian</Path>
<Tip>无齿海绵钳</Tip>
<BoxCollider size="0.15,0.05,0.06" center="-0.03,0,0"/>
<Icon>工具/骨刀.png</Icon>
</Device>
<Device>
<Name>S拉钩</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_JianZiLei/pasted__SM_LaGou</Path>
<Tip>S拉钩</Tip>
<MeshCollider/>
<Icon>工具/骨刀.png</Icon>
</Device>
<Device>
<Name>肾形盘</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_JianZiLei/pasted__SM_ShenXingPan</Path>
<Tip>肾形盘</Tip>
<MeshCollider/>
<Icon>工具/骨刀.png</Icon>
</Device>
<Device>
<Name>器械盒</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_JianZiLei/pasted__polySurface114</Path>
<Tip>器械盒</Tip>
<MeshCollider/>
<Icon>工具/骨刀.png</Icon>
</Device>
<Device>
<Name>创巾钳</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_JianZiLei/chuangjinqian</Path>
<Tip>创巾钳</Tip>
<BoxCollider size="0.15,0.05,0.06" center="-0.03,0,0"/>
<Icon>工具/骨刀.png</Icon>
</Device>
<Device>
<Name>直止血钳</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_JianZiLei/zhizhixueqian</Path>
<Tip>直止血钳</Tip>
<BoxCollider size="0.15,0.05,0.06" center="-0.03,0,0"/>
<Icon>工具/骨刀.png</Icon>
</Device>
<Device>
<Name>弯止血钳</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_JianZiLei/wanzhixueqian</Path>
<Tip>弯止血钳</Tip>
<BoxCollider size="0.15,0.05,0.06" center="-0.03,0,0"/>
<Icon>工具/骨刀.png</Icon>
</Device>
<Device>
<Name>持针钳</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_JianZiLei/chizhenqian</Path>
<Tip>持针钳</Tip>
<BoxCollider size="0.15,0.05,0.06" center="-0.03,0,0"/>
<Icon>工具/骨刀.png</Icon>
</Device>
<Device>
<Name>钝剪</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_JianZiLei/dunjian</Path>
<Tip>钝剪</Tip>
<BoxCollider size="0.15,0.05,0.06" center="-0.03,0,0"/>
<Icon>工具/骨刀.png</Icon>
</Device>
<Device>
<Name>尖剪</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_JianZiLei/jianjian</Path>
<Tip>尖剪</Tip>
<BoxCollider size="0.15,0.05,0.06" center="-0.03,0,0"/>
<Icon>工具/骨刀.png</Icon>
</Device>
<Device>
<Name>无齿镊</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_JianZiLei/pasted__pPlane4</Path>
<Tip>无齿镊</Tip>
<MeshCollider/>
<Icon>工具/骨刀.png</Icon>
</Device>
<Device>
<Name>手术刀柄3号</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_JianZiLei/pasted__SM_ShouShuDaoBing</Path>
<Tip>手术刀柄3号</Tip>
<MeshCollider/>
<Icon>工具/骨刀.png</Icon>
</Device>
<Device>
<Name>刀片23号</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_JianZiLei/pasted__SM_DaoPian23</Path>
<Tip>刀片23号</Tip>
<MeshCollider/>
<Icon>工具/骨刀.png</Icon>
</Device>
<Device>
<Name>速眠新</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_YaoPinLei/SM_sumianxin</Path>
<Tip>速眠新</Tip>
<MeshCollider/>
<Icon>药品/美洛昔康.png</Icon>
</Device>
<Device>
<Name>头孢噻呋</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_YaoPinLei/pasted__SM_TouBao</Path>
<Tip>头孢噻呋</Tip>
<MeshCollider/>
<Icon>药品/美洛昔康.png</Icon>
</Device>
<Device>
<Name>VC</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_YaoPinLei/pasted__SM_VC</Path>
<Tip>VC</Tip>
<MeshCollider/>
<Icon>药品/美洛昔康.png</Icon>
</Device>
<Device>
<Name>硫酸阿托品</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_YaoPinLei/pasted__SM_ATuoPin</Path>
<Tip>硫酸阿托品</Tip>
<MeshCollider/>
<Icon>药品/美洛昔康.png</Icon>
</Device>
<Device>
<Name>ATP</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_YaoPinLei/pasted__SM_SanLinsuanxiangan</Path>
<Tip>ATP</Tip>
<MeshCollider/>
<Icon>药品/美洛昔康.png</Icon>
</Device>
<Device>
<Name>肾上腺素</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_YaoPinLei/pasted__SM_ShenShangXian</Path>
<Tip>肾上腺素</Tip>
<MeshCollider/>
<Icon>药品/美洛昔康.png</Icon>
</Device>
<Device>
<Name>红霉素眼膏</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_YaoPinLei/SM_hongmeisuyangao</Path>
<Tip>红霉素眼膏</Tip>
<MeshCollider/>
<Icon>药品/美洛昔康.png</Icon>
</Device>
<Device>
<Name>碘伏喷壶</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_YaoPinLei/pasted__polySurface119</Path>
<Tip>碘伏喷壶</Tip>
<MeshCollider/>
<Icon>药品/美洛昔康.png</Icon>
</Device>
<Device>
<Name>75%酒精</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_YaoPinLei/pasted__polySurface117</Path>
<Tip>75%酒精</Tip>
<MeshCollider/>
<Icon>药品/美洛昔康.png</Icon>
</Device>
<Device>
<Name>5%葡萄糖注射液50ml</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_YaoPinLei/pasted__pCylinder3</Path>
<Tip>5%葡萄糖注射液50ml</Tip>
<MeshCollider/>
<Icon>药品/美洛昔康.png</Icon>
</Device>
<Device>
<Name>0.9%氯化钠注射液100ml</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_YaoPinLei/pasted__lhn1</Path>
<Tip>0.9%氯化钠注射液100ml</Tip>
<MeshCollider/>
<Icon>药品/美洛昔康.png</Icon>
</Device>
<Device>
<Name>电动剃毛刀</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_BuLiaoLei/pasted__dtz1</Path>
<Tip>电动剃毛刀</Tip>
<MeshCollider/>
<Icon>耗材/骨蜡.png</Icon>
</Device>
<Device>
<Name>医用外科罩</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_BuLiaoLei/yiyongkouzhao</Path>
<Tip>医用外科罩</Tip>
<MeshCollider/>
<Icon>耗材/骨蜡.png</Icon>
</Device>
<Device>
<Name>无菌敷料</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_BuLiaoLei/pasted__SM_WuJingFuLiao</Path>
<Tip>无菌敷料</Tip>
<MeshCollider/>
<Icon>耗材/骨蜡.png</Icon>
</Device>
<Device>
<Name>纱布绷带</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_BuLiaoLei/pasted__SM_BengDai_pPlane6</Path>
<Tip>纱布绷带</Tip>
<MeshCollider/>
<Icon>耗材/骨蜡.png</Icon>
</Device>
<Device>
<Name>24G静脉留置针</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_BuLiaoLei/liuzhizhen/pasted__pasted__polySurface560</Path>
<Tip>24G静脉留置针</Tip>
<MeshCollider/>
<Icon>耗材/骨蜡.png</Icon>
</Device>
<Device>
<Name>一次性注射器</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_BuLiaoLei/SM_ShuYeQi</Path>
<Tip>一次性注射器</Tip>
<MeshCollider/>
<Icon>耗材/骨蜡.png</Icon>
</Device>
<Device>
<Name>纸胶带</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_BuLiaoLei/pasted__SM_ZhiJiaoDai_polySurface125</Path>
<Tip>纸胶带</Tip>
<MeshCollider/>
<Icon>耗材/骨蜡.png</Icon>
</Device>
<Device>
<Name>弹性粘性绷带</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_BuLiaoLei/pasted__pPlane6</Path>
<Tip>弹性粘性绷带</Tip>
<MeshCollider/>
<Icon>耗材/骨蜡.png</Icon>
</Device>
<Device>
<Name>大胶带</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_BuLiaoLei/pasted__polySurface125</Path>
<Tip>大胶带</Tip>
<MeshCollider/>
<Icon>耗材/骨蜡.png</Icon>
</Device>
<Device>
<Name>刷手毛刷</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_BuLiaoLei/pasted__pCube35</Path>
<Tip>刷手毛刷</Tip>
<MeshCollider/>
<Icon>耗材/骨蜡.png</Icon>
</Device>
<Device>
<Name>宠物电子体温计</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_BuLiaoLei/pasted__SM_DianZiTiWenJiShape</Path>
<Tip>宠物电子体温计</Tip>
<MeshCollider/>
<Icon>耗材/骨蜡.png</Icon>
</Device>
<Device>
<Name>一次性注射器1</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_BuLiaoLei/zhusheqi</Path>
<Tip>一次性注射器</Tip>
<MeshCollider/>
<Icon>耗材/骨蜡.png</Icon>
</Device>
<Device>
<Name>肝素帽</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_BuLiaoLei/pasted__pCylinder7</Path>
<Tip>肝素帽</Tip>
<MeshCollider/>
<Icon>耗材/骨蜡.png</Icon>
</Device>
<Device>
<Name>创巾</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_BuLiaoLei/pasted__SM_ChuangJin</Path>
<Tip>创巾</Tip>
<MeshCollider/>
<Icon>耗材/骨蜡.png</Icon>
</Device>
<Device>
<Name>保定保温毛巾</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_BuLiaoLei/Object003__0</Path>
<Tip>保定保温毛巾</Tip>
<MeshCollider/>
<Icon>耗材/骨蜡.png</Icon>
</Device>
<Device>
<Name>带针PGA缝线</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_BuLiaoLei/zhenxian/平面</Path>
<Tip>带针PGA缝线</Tip>
<MeshCollider/>
<Icon>耗材/骨蜡.png</Icon>
</Device>
<Device>
<Name>听诊器</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_BuLiaoLei/SM_TingZhenQi/Archmodels70_054_01</Path>
<Tip>听诊器</Tip>
<MeshCollider/>
<Icon>耗材/骨蜡.png</Icon>
</Device>
<Device>
<Name>一次性手术帽</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_BuLiaoLei/SM_YiYongMao</Path>
<Tip>一次性手术帽</Tip>
<MeshCollider/>
<Icon>耗材/骨蜡.png</Icon>
</Device>
<Device>
<Name>一次性手术衣</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_BuLiaoLei/shoufuyi</Path>
<Tip>一次性手术衣</Tip>
<MeshCollider/>
<Icon>耗材/骨蜡.png</Icon>
</Device>
<Device>
<Name>一次性外科灭菌手套</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_BuLiaoLei/SM_YiYongMao.001</Path>
<Tip>一次性外科灭菌手套</Tip>
<MeshCollider/>
<Icon>耗材/骨蜡.png</Icon>
</Device>
<Device>
<Name>无菌擦手纸</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_BuLiaoLei/pasted__SM_YiYongCaShouZhi</Path>
<Tip>无菌擦手纸</Tip>
<MeshCollider/>
<Icon>耗材/骨蜡.png</Icon>
</Device>
<Device>
<Name>无菌纱布</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_BuLiaoLei/pasted__SM_ShouShuGongJu_SM_WuJunShaBu_SM_WuJunShaBu</Path>
<Tip>无菌纱布</Tip>
<MeshCollider/>
<Icon>耗材/骨蜡.png</Icon>
</Device>
<Device>
<Name>酒精棉球</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_BuLiaoLei/pasted__SM_JiuJingMianQiu_polySurface123</Path>
<Tip>酒精棉球</Tip>
<MeshCollider/>
<Icon>耗材/骨蜡.png</Icon>
</Device>
<Device>
<Name>碘伏棉球</Name>
<HighLight color="255,255,255"/>
<Path>SM_QvanChangJing/SM_BuLiaoLei/pasted__SM_DianFuMianQiu_polySurface123</Path>
<Tip>碘伏棉球</Tip>
<MeshCollider/>
<Icon>耗材/骨蜡.png</Icon>
</Device>
<Score>
<Item step="术前准备" name="器械准备" sum="6.5" bind=""/>
<Item step="术前准备" name="药品准备" sum="5.5" bind=""/>
<Item step="术前准备" name="耗材准备" sum="15.5" bind=""/>
<Item step="术前准备" name="主刀人员准备" sum="10" bind=""/>
<Item step="术前准备" name="手术动物准备" sum="10" bind=""/>
<Item step="术前准备" name="术部剃毛准备" sum="10" bind=""/>
<Item step="术前准备" name="术部消毒准备" sum="10" bind=""/>
<Item step="手术过程" name="测试麻醉程度" sum="10" bind=""/>
<Item step="手术过程" name="术部开刀" sum="10" bind=""/>
<Item step="手术过程" name="找出病变小肠" sum="10" bind=""/>
<Item step="手术过程" name="去除病变小肠" sum="10" bind=""/>
<Item step="手术过程" name="肠端吻合" sum="10" bind=""/>
<Item step="手术过程" name="缝合切口" sum="10" bind=""/>
<Item step="手术过程" name="缝合后处理" sum="10" bind=""/>
</Score>
<FSM name="状态机1">
<State name="初始状态">
<Enter>
<Action type="Parallel">
<!--房间墙壁 暂时隐藏-->
<Action type="Show" value="SM_QvanChangJing/sence/pPlane1" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_JianZiLei/zuzhiqian" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_JianZiLei/changqian" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_JianZiLei/wuchihaimianqian" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_JianZiLei/pasted__SM_LaGou" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_JianZiLei/pasted__SM_ShenXingPan" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_JianZiLei/pasted__polySurface114" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_JianZiLei/chuangjinqian" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_JianZiLei/zhizhixueqian" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_JianZiLei/wanzhixueqian" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_JianZiLei/chizhenqian" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_JianZiLei/dunjian" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_JianZiLei/jianjian" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_JianZiLei/pasted__pPlane4" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_JianZiLei/pasted__SM_ShouShuDaoBing" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_JianZiLei/pasted__SM_DaoPian23" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_YaoPinLei/SM_sumianxin" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_YaoPinLei/pasted__SM_TouBao" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_YaoPinLei/pasted__SM_VC" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_YaoPinLei/pasted__SM_ATuoPin" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_YaoPinLei/pasted__SM_SanLinsuanxiangan" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_YaoPinLei/pasted__SM_ShenShangXian" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_YaoPinLei/SM_hongmeisuyangao" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_YaoPinLei/pasted__polySurface119" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_YaoPinLei/pasted__polySurface117" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_YaoPinLei/pasted__pCylinder3" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_YaoPinLei/SM_sumianxin" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_YaoPinLei/pasted__SM_TouBao" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_YaoPinLei/pasted__SM_VC" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_YaoPinLei/pasted__SM_ATuoPin" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_YaoPinLei/pasted__SM_SanLinsuanxiangan" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_YaoPinLei/pasted__SM_ShenShangXian" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_YaoPinLei/SM_hongmeisuyangao" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_YaoPinLei/pasted__polySurface119" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_YaoPinLei/pasted__polySurface117" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_YaoPinLei/pasted__pCylinder3" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_YaoPinLei/pasted__lhn1" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_BuLiaoLei/pasted__dtz1" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_BuLiaoLei/yiyongkouzhao" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_BuLiaoLei/pasted__SM_WuJingFuLiao" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_BuLiaoLei/pasted__SM_BengDai_pPlane6" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_BuLiaoLei/liuzhizhen/pasted__pasted__polySurface560" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_BuLiaoLei/SM_ShuYeQi" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_BuLiaoLei/pasted__SM_ZhiJiaoDai_polySurface125" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_BuLiaoLei/pasted__pPlane6" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_BuLiaoLei/pasted__polySurface125" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_BuLiaoLei/pasted__pCube35" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_BuLiaoLei/pasted__SM_DianZiTiWenJiShape" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_BuLiaoLei/zhusheqi" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_BuLiaoLei/pasted__pCylinder7" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_BuLiaoLei/pasted__SM_ChuangJin" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_BuLiaoLei/Object003__0" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_BuLiaoLei/zhenxian/平面" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_BuLiaoLei/SM_TingZhenQi/Archmodels70_054_01" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_BuLiaoLei/SM_YiYongMao" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_BuLiaoLei/shoufuyi" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_BuLiaoLei/SM_YiYongMao.001" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_BuLiaoLei/pasted__SM_YiYongCaShouZhi" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_BuLiaoLei/pasted__SM_ShouShuGongJu_SM_WuJunShaBu_SM_WuJunShaBu" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_BuLiaoLei/pasted__SM_JiuJingMianQiu_polySurface123" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_BuLiaoLei/pasted__SM_DianFuMianQiu_polySurface123" isShow="false"></Action>
<Action type="Sequence">
<Action type="Show" value="SM_QvanChangJing/SM_YaoPinLei/SM_liusuanatuopin" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_YaoPinLei/SM_shenshangxianjisu" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_YaoPinLei/pasted__SM_SuMianXin" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_YaoPinLei/pasted__SM_ShuTai" isShow="false"></Action>
<Action type="Show" value="SM_QvanChangJing/SM_YaoPinLei/pasted__xsy1" isShow="false"></Action>
<Action type="UIShow" value="UIOperationList"></Action>
<Action type="NextOperation"></Action>
</Action>
</Action>
</Enter>
</State>
<!--<Transision from="初始状态" to="状态2">
<Condition type="ObjClick" value="Cube (1)"></Condition>
</Transision>-->
</FSM>
<Operation moduleType="Exam">
<Step name="术前准备">
<Step name="器械准备">
<Reset>
<Action type="Log" value="1-1步重置"></Action>
</Reset>
<Start>
<Action type="Sequence">
<Action type="Video" value="test.mp4" size="700,700" offset="100,100" finishedEvent="finished" closeEvent="close"/>
<Condition type="StrEvent" value="close"></Condition>
<Action type="Log" value="aaaa"></Action>
<Action type="Btns" value="下一步,上一步,确定,取消"></Action>
<Action type="CameraSwitch" nearPos="-3.543,3.007,-1.463" nearRot="27.9597,270,2.899792E-06" normalPos="-3.206,3.24,-1.425" normalRot="27.9597,270,2.899792E-06" isNear="false"></Action>
<Action type="HighLight" value="Cube" isHigh="true" color="0,255,0,255"></Action>
<Action type="Delay" value="5"></Action>
<Action type="HighLight" value="Cube" isHigh="false" color="0,255,0,255"></Action>
<Action type="SetScore" name="术前准备器械准备" value="6.5"></Action>
<Action type="Hint" value="请在右侧物品栏中,点选当前实训所需的器械" time="-1" icon="true" audio="Q001.mp3"></Action>
<Action type="UITools" devices="创巾钳,直止血钳,弯止血钳,组织钳,尖剪,钝剪,持针钳,无齿镊,手术刀柄3号,刀片23号,肠钳,肾形盘,器械盒,S拉钩,铁锤,撬骨板,咬骨钳,骨刀,手术刀柄4号,手术刀片16号" answers="创巾钳,直止血钳,弯止血钳,组织钳,尖剪,钝剪,持针钳,无齿镊,手术刀柄3号,刀片23号,肠钳,肾形盘,器械盒,S拉钩"
setActive="true"
rightLabel="提示:器械选择正确。"
wrongLabel="提示:器械选择错误,\r\n当前模块中不需要该物品。"
rightEvent="器械选择通过"
wrongEvent=""
rightScore=""
wrongScore="-0.5"
scoreStepName="术前准备器械准备"
/>
<Condition type="StrEvent" value="器械选择通过"></Condition>
<Action type="NextOperation"></Action>
</Action>
</Start>
</Step>
<Step name="药品准备">
<Reset>
<Action type="Log" value="1-2步重置"></Action>
</Reset>
<Start>
<Action type="Sequence">
<Action type="SetScore" name="术前准备药品准备" value="5.5"></Action>
<Action type="CameraSwitch" nearPos="-3.942,3.24,-4.319" nearRot="16.42331,180,0" nearTime="1" normalPos="-3.942,3.24,-3.946" normalRot="16.42331,180,-5.305351E-14" farTime="1" isNear="false"></Action>
<Action type="Hint" value="请在右侧物品栏中,点选当前实训所需的药品" time="-1" icon="true" audio="q001.mp3"></Action>
<Action type="UITools"
devices="速眠新,头孢噻呋,VC,硫酸阿托品,ATP,肾上腺素,红霉素眼膏,碘伏喷壶,75%酒精,5%葡萄糖注射液50ml,0.9%氯化钠注射液100ml,Vetwish软骨素,美洛昔康"
answers="速眠新,头孢噻呋,VC,硫酸阿托品,ATP,肾上腺素,红霉素眼膏,碘伏喷壶,75%酒精,5%葡萄糖注射液50ml,0.9%氯化钠注射液100ml"
setActive="true"
rightLabel="提示:药品选择正确。"
wrongLabel="提示:药品选择错误,\r\n当前模块中不需要该物品。"
rightEvent="药品选择通过"
wrongEvent=""
rightScore=""
wrongScore="-0.5"
scoreStepName="术前准备药品准备"
/>
<Condition type="StrEvent" value="药品选择通过"></Condition>
<Action type="NextOperation"></Action>
</Action>
</Start>
</Step>
<Step name="耗材准备">
<Reset>
<Action type="Log" value="1-2步重置"></Action>
</Reset>
<Start>
<Action type="Sequence">
<Action type="SetScore" name="术前准备耗材准备" value="15.5"></Action>
<Action type="Move" value="FlyCamera" to="-5.532,3.438,-4" time="0"></Action>
<Action type="Rotate" value="FlyCamera" to="28.81702,180,0" time="0"></Action>
<Action type="Hint" value="请在右侧物品栏中,点选当前实训所需的耗材" time="-1" icon="true" audio="q001.mp3"></Action>
<Action type="UITools"
devices="电动剃毛刀,医用外科罩,无菌敷料,纱布绷带,24G静脉留置针,一次性注射器,纸胶带,弹性粘性绷带,大胶带,刷手毛刷,宠物电子体温计,一次性注射器1,肝素帽,创巾,保定保温毛巾,带针PGA缝线,听诊器,一次性手术帽,一次性手术衣,一次性外科灭菌手套,无菌擦手纸,无菌纱布,酒精棉球,碘伏棉球,T管,冲洗管,钢丝,骨钉,骨蜡"
answers="电动剃毛刀,医用外科罩,无菌敷料,纱布绷带,24G静脉留置针,一次性注射器,纸胶带,弹性粘性绷带,大胶带,刷手毛刷,宠物电子体温计,一次性注射器1,肝素帽,创巾,保定保温毛巾,带针PGA缝线,听诊器,一次性手术帽,一次性手术衣,一次性外科灭菌手套,无菌擦手纸,无菌纱布,酒精棉球,碘伏棉球"
setActive="true"
rightLabel="提示:耗材选择正确。"
wrongLabel="提示:耗材选择错误,\r\n当前模块中不需要该物品。"
rightEvent="耗材选择通过"
wrongEvent=""
rightScore=""
wrongScore="-0.5"
scoreStepName="术前准备耗材准备"
/>
<Condition type="StrEvent" value="耗材选择通过"></Condition>
<Action type="NextOperation"></Action>
</Action>
</Start>
</Step>
<Step name="主刀人员准备">
<Reset>
<Action type="Log" value="1-1步重置"></Action>
</Reset>
<Start>
<Action type="Sequence">
<Action type="UIShow" value="UITools" isShow="false"></Action>
<Action type="Move" value="FlyCamera" to="-3.206,3.24,-1.425" time="0"></Action>
<Action type="Rotate" value="FlyCamera" to="27.9597,270,2.899792E-06" time="0"></Action>
<Action type="Btns" value="下一步"></Action>
<Condition type="UIClick" value="UIRoot/Common/UIBtns/BtnContent/下一步"></Condition>
<Action type="NextOperation"></Action>
</Action>
</Start>
</Step>
</Step>
</Operation>
<Operation moduleType="Study">
<Step name="术前准备">
<Step name="器械准备">
<Reset>
<Action type="Log" value="1-1步重置"></Action>
</Reset>
<Start>
<Action type="Sequence">
<Action type="LockCamera" value="true" />
<Action type="TextTip" value="这里是文字描述\n11111\n22222\n333333" audio="q001.mp3" btns="确定,取消"/>
<Action type="Move" value="FlyCamera" to="-3.206,3.24,-1.425" time="0"></Action>
<Action type="Rotate" value="FlyCamera" to="27.9597,270,2.899792E-06" time="0"></Action>
<Action type="Btns" value="下一步"></Action>
<Condition type="UIClick" value="UIRoot/Common/UIBtns/BtnContent/下一步"></Condition>
<Action type="NextOperation"></Action>
</Action>
</Start>
</Step>
<Step name="药品准备">
<Reset>
<Action type="Log" value="1-2步重置"></Action>
</Reset>
<Start>
<Action type="Sequence">
<Action type="Move" value="FlyCamera" to="-3.942,3.24,-4.319" time="0"></Action>
<Action type="Rotate" value="FlyCamera" to="16.42331,180,0" time="0"></Action>
<Action type="Btns" value="下一步"></Action>
<Condition type="UIClick" value="UIRoot/Common/UIBtns/BtnContent/下一步"></Condition>
<Action type="NextOperation"></Action>
</Action>
</Start>
</Step>
<Step name="耗材准备">
<Reset>
<Action type="Log" value="1-2步重置"></Action>
</Reset>
<Start>
<Action type="Sequence">
<Action type="Move" value="FlyCamera" to="-5.532,3.438,-4" time="0"></Action>
<Action type="Rotate" value="FlyCamera" to="28.81702,180,0" time="0"></Action>
<Action type="Btns" value="下一步"></Action>
<Condition type="UIClick" value="UIRoot/Common/UIBtns/BtnContent/下一步"></Condition>
<Action type="NextOperation"></Action>
</Action>
</Start>
</Step>
<Step name="主刀人员准备">
<Reset>
</Reset>
<Start>
<Action type="Sequence">
<Action type="Move" value="FlyCamera" to="-3.102,1.519,0.357" time="0"></Action>
<Action type="Rotate" value="FlyCamera" to="0,90,0" time="0"></Action>
<Action type="Btns" value="下一步"></Action>
<Condition type="UIClick" value="UIRoot/Common/UIBtns/BtnContent/下一步"></Condition>
<Action type="NextOperation"></Action>
</Action>
</Start>
<Finished>
<Action type="Log" value="2-1步完成"></Action>
</Finished>
</Step>
<Step name="第一助手准备">
<Reset>
<Action type="Log" value="2-1步重置"></Action>
</Reset>
<Start>
<Action type="Sequence">
<Action type="Btns" value="下一步"></Action>
<Condition type="UIClick" value="UIRoot/Common/UIBtns/BtnContent/下一步"></Condition>
<Action type="NextOperation"></Action>
</Action>
</Start>
<Finished>
<Action type="Log" value="2-1步完成"></Action>
</Finished>
</Step>
<Step name="第二助手准备">
<Reset>
<Action type="Log" value="2-1步重置"></Action>
</Reset>
<Start>
<Action type="Sequence">
<Action type="Btns" value="下一步"></Action>
<Condition type="UIClick" value="UIRoot/Common/UIBtns/BtnContent/下一步"></Condition>
<Action type="NextOperation"></Action>
</Action>
</Start>
<Finished>
<Action type="Log" value="2-1步完成"></Action>
</Finished>
</Step>
<Step name="麻醉监护人员准备">
<Reset>
<Action type="Log" value="2-1步重置"></Action>
</Reset>
<Start>
<Action type="Sequence">
<Action type="Btns" value="下一步"></Action>
<Condition type="UIClick" value="UIRoot/Common/UIBtns/BtnContent/下一步"></Condition>
<Action type="NextOperation"></Action>
</Action>
</Start>
<Finished>
<Action type="Log" value="2-1步完成"></Action>
</Finished>
</Step>
<Step name="手术动物准备">
<Reset>
<Action type="Log" value="2-1步重置"></Action>
</Reset>
<Start>
<Action type="Sequence">
<Action type="Btns" value="下一步"></Action>
<Condition type="UIClick" value="UIRoot/Common/UIBtns/BtnContent/下一步"></Condition>
<Action type="NextOperation"></Action>
</Action>
</Start>
<Finished>
<Action type="Log" value="2-1步完成"></Action>
</Finished>
</Step>
<Step name="术部剃毛准备">
<Reset>
<Action type="Log" value="2-1步重置"></Action>
</Reset>
<Start>
<Action type="Sequence">
<Action type="Btns" value="下一步"></Action>
<Condition type="UIClick" value="UIRoot/Common/UIBtns/BtnContent/下一步"></Condition>
<Action type="NextOperation"></Action>
</Action>
</Start>
<Finished>
<Action type="Log" value="2-1步完成"></Action>
</Finished>
</Step>
<Step name="术部备皮准备">
<Reset>
<Action type="Log" value="2-1步重置"></Action>
</Reset>
<Start>
<Action type="Sequence">
<Action type="Btns" value="下一步"></Action>
<Condition type="UIClick" value="UIRoot/Common/UIBtns/BtnContent/下一步"></Condition>
<Action type="NextOperation"></Action>
</Action>
</Start>
<Finished>
<Action type="Log" value="2-1步完成"></Action>
</Finished>
</Step>
<Step name="术部消毒准备">
<Reset>
<Action type="Log" value="2-1步重置"></Action>
</Reset>
<Start>
<Action type="Sequence">
<Action type="Btns" value="下一步"></Action>
<Condition type="UIClick" value="UIRoot/Common/UIBtns/BtnContent/下一步"></Condition>
<Action type="NextOperation"></Action>
</Action>
</Start>
<Finished>
<Action type="Log" value="2-1步完成"></Action>
</Finished>
</Step>
<Step name="手术室准备">
<Reset>
<Action type="Log" value="2-1步重置"></Action>
</Reset>
<Start>
<Action type="Sequence">
<Action type="Btns" value="下一步"></Action>
<Condition type="UIClick" value="UIRoot/Common/UIBtns/BtnContent/下一步"></Condition>
<Action type="NextOperation"></Action>
</Action>
</Start>
<Finished>
<Action type="Log" value="2-1步完成"></Action>
</Finished>
</Step>
</Step>
</Operation>
</Module>

View File

@ -32,7 +32,7 @@
<!--物体点位选择 物体的中心点--> <!--物体点位选择 物体的中心点-->
<Action type="PointQuestion" value="路径1,路径2"></Action> <Action type="PointQuestion" value="路径1,路径2"></Action>
<!--文字选择题--> <!--文字选择题-->
<Action type="TextQuestion" title="这里是标题" options="A.111|B.222|C.333|D.4444" answers="2" btns="确定,取消" wait="1" showAnswer="true"></Action> <Action type="TextQuestion" title="这里是标题" options="A.111|B.222|C.333|D.4444" answers="2" btns="确定" wait="1" showAnswer="true"></Action>
<!--提示 time为显示的时间 -1则一直显示 icon是前面的绿色图标是否显示 audio是音频 位于data文件夹下的Audio--> <!--提示 time为显示的时间 -1则一直显示 icon是前面的绿色图标是否显示 audio是音频 位于data文件夹下的Audio-->
<Action type="Hint" value="这里是文字描述" time="5" icon="false" audio="音频.mp3"></Action> <Action type="Hint" value="这里是文字描述" time="5" icon="false" audio="音频.mp3"></Action>
<!--设置变量 value只能是数字可以是小数--> <!--设置变量 value只能是数字可以是小数-->