From ce3bc51c111d6375bbb36e8cb1f2303ee01a3460 Mon Sep 17 00:00:00 2001 From: bottlefish <781230111@qq.com> Date: Fri, 23 Aug 2024 18:07:42 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B7=91=E9=80=9A=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ... Scripting - Integration.unitypackage.meta | 7 - .../佩佩/Scripts/EyeTransitionManager.cs | 62 ++- .../Yarn/PeipeiTalk/PeipeiTalk1.yarn | 409 ++++++++++-------- 3 files changed, 258 insertions(+), 220 deletions(-) delete mode 100644 Assets/Plugins/Febucci/Text Animator/Integrations/Visual Scripting - Integration.unitypackage.meta diff --git a/Assets/Plugins/Febucci/Text Animator/Integrations/Visual Scripting - Integration.unitypackage.meta b/Assets/Plugins/Febucci/Text Animator/Integrations/Visual Scripting - Integration.unitypackage.meta deleted file mode 100644 index 05e590027..000000000 --- a/Assets/Plugins/Febucci/Text Animator/Integrations/Visual Scripting - Integration.unitypackage.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 117dcc671050f5247bd8743b91ecaab7 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Prototype/佩佩/Scripts/EyeTransitionManager.cs b/Assets/Prototype/佩佩/Scripts/EyeTransitionManager.cs index 3f6f3e375..7c5bcf9d2 100644 --- a/Assets/Prototype/佩佩/Scripts/EyeTransitionManager.cs +++ b/Assets/Prototype/佩佩/Scripts/EyeTransitionManager.cs @@ -11,6 +11,7 @@ using UnityEngine.SceneManagement; public class EyeTransitionManager : MonoBehaviour { + // 视图过渡的持续时间 public float zoomDuration = 1f; @@ -43,7 +44,7 @@ public class EyeTransitionManager : MonoBehaviour if (activateButton != null) { activateButton.interactable = value; - activateButton.gameObject.SetActive(value); + //activateButton.gameObject.SetActive(value); } } } @@ -76,11 +77,15 @@ public class EyeTransitionManager : MonoBehaviour public delegate void ViewChangeRequestedHandler(ViewState targetViewState); public event ViewChangeRequestedHandler OnViewChangeRequested; - private void Awake() - { - DontDestroyOnLoad(this.gameObject); + private void Awake() +{ + LoadState(); + + //DontDestroyOnLoad(this.gameObject); SceneManager.sceneUnloaded += OnSceneUnloaded; - } + Application.quitting += ClearState; +} + private void OnDestroy() { @@ -126,6 +131,17 @@ public class EyeTransitionManager : MonoBehaviour } } } + private void ClearState() + { + PlayerPrefs.DeleteKey("CurrentViewState"); + + foreach (var config in viewConfigs) + { + PlayerPrefs.DeleteKey(config.viewState.ToString() + "IsAvailable"); + } + + PlayerPrefs.Save(); + } private void Start() { @@ -147,7 +163,7 @@ public class EyeTransitionManager : MonoBehaviour } // 更新按钮的可用性 config.activateButton.interactable = config.IsAvailable; - config.activateButton.gameObject.SetActive(false); + //config.activateButton.gameObject.SetActive(false); } LoadState(); } @@ -217,27 +233,31 @@ public class EyeTransitionManager : MonoBehaviour { yield return null; } + SaveState(); } // Yarn 命令,设置视图的可用性 - [YarnCommand("set_view_availability")] - public void SetViewAvailability(string viewStateName, bool isAvailable) +[YarnCommand("set_view_availability")] +public void SetViewAvailability(string viewStateName, bool isAvailable) +{ + Debug.Log("Setting availability for view state: " + viewStateName + " to " + isAvailable); + + ViewState viewState; + if (!Enum.TryParse(viewStateName, out viewState)) { - ViewState viewState; - if (!Enum.TryParse(viewStateName, out viewState)) - { - Debug.LogError("Invalid ViewState name: " + viewStateName); - return; - } - - if (!viewConfigDictionary.TryGetValue(viewState, out ViewConfig config)) return; - - // 更新视图的可用性和激活按钮的可用性 - config.IsAvailable = isAvailable; - config.activateButton.interactable = isAvailable; - config.activateButton.gameObject.SetActive(true); + Debug.LogError("Invalid ViewState name: " + viewStateName); + return; } + if (!viewConfigDictionary.TryGetValue(viewState, out ViewConfig config)) return; + + // 更新视图的可用性和激活按钮的可用性 + config.IsAvailable = isAvailable; + + SaveState(); +} + + // 开始视图过渡 private void StartTransition(ViewState targetViewState) { diff --git a/Assets/Resources/Yarn/PeipeiTalk/PeipeiTalk1.yarn b/Assets/Resources/Yarn/PeipeiTalk/PeipeiTalk1.yarn index 7e8cf7d08..2840d2850 100644 --- a/Assets/Resources/Yarn/PeipeiTalk/PeipeiTalk1.yarn +++ b/Assets/Resources/Yarn/PeipeiTalk/PeipeiTalk1.yarn @@ -95,117 +95,129 @@ position: 71,-262 <> ///表示记忆模块在当前维修阶段是否已经进入过了 <> + +<> + +<> //我: 好的,右边这个黑盒子应该就是UF了,左边这个是她的视觉模块,都检查一下吧。 我: 先插线检查下模块吧 [command name=activate_socket_choice /] <> === title: Choice -position: 73,4 +position: 77,22 --- - <> -<> +<> +<> + <> +<> + ->开启视觉检查权限 + <> + 我: 成功开启了 +<> +我: 看起来需要检查下记忆模块 + ->开启检查权限 + <> +<> 我: 我好像明白了…… ->结束诊疗 <> -<> -<> -我: 看起来需要检查下记忆模块 - ->开启检查权限 - <> -<> - [options /] - -> UFView - //插入UF模块 - <> - <> - 我: uf模块有报错,报错信息是XXXXXX之后看看 - 我: 或许需要深入检查一下 - ->开启检查权限 - 我: 嗯?这个模块的保密属性很高,没有深入的权限...... - 我: 佩佩说过绘图是用这个模块吧 - 我: 或许至少可以让她绘图来看看 - <> - <> - <> - 我: 这里检查过了 - <> - <> - -> EyeView - //插入Eye模块 - <> - <> - 我: Eye模块有报错,报错信息是XXXXXX,之后看看 - 我: 或许需要深入检查一下 - ->开启检查权限 - <> - 我: 好了,现在可以深入视觉模块了 - <> - 我: 这里检查过了 - <> - <> - -> MemoryView - //插入Memory模块 - <> - <> - 我: 嗯,外部检查似乎没什么异常 - 我: 先看看其他需要检查的吧 - <> - 我: 这里检查过了 - <> - <> - -> EyeViewActivate - <> - <> - <> - <> - 我: 这里检查过了 - <> - <> - -> MemoryViewActivate - <> - <> - <> - <> - 我: 这里检查过了 - <> - <> <> +[options /] + -> UFView + //插入UF模块 + <> + <> + 我: uf模块有报错,报错信息是XXXXXX之后看看 + 我: 或许需要深入检查一下 + ->开启检查权限 + 我: 嗯?这个模块的保密属性很高,没有深入的权限...... + 我: 佩佩说过绘图是用这个模块吧 + 我: 或许至少可以让她绘图来看看 + <> + <> + <> + 我: 这里检查过了 + <> + <> + -> EyeView + //插入Eye模块 + <> + <> + 我: Eye模块有报错,报错信息是XXXXXX,之后看看 + 我: 或许需要深入检查一下 + ->开启检查权限 + <> + 我: 好了,现在可以深入视觉模块了 + <> + 我: 这里检查过了 + <> + <> + -> MemoryView + //插入Memory模块 + <> + <> + 我: 嗯,外部检查似乎没什么异常 + 我: 先看看其他需要检查的吧 + <> + 我: 这里检查过了 + <> + <> + -> EyeViewActivate + <> + <> + <> + <> + <> + <> + 我: 这里检查过了 + <> + <> + -> MemoryViewActivate + <> + <> + <> + <> + 我: 这里检查过了 + <> + <> === title: EyeView -position: 554,14 +position: 554,12 --- ///进入视觉模块 <> WARNING: 无法读取色觉模组。(病症介绍,可能是普遍现象) -我: 你的色觉是失效的……你怎么没跟我说,你自己不知道吗? -佩佩: 啊…这个很久啦,我已经不记得是什么时候开始的了,应该是装UF的时候开始的。但这不是什么大问题。 -佩佩: 很多美工都有这种情况。 -我: 很多?……不对,我需要再次核对下。你们能通过UF模块产生有颜色的图片,但是你们自己却看不见颜色? -切换表情(笑) -佩佩: 啊,医生,你也是公司的员工呀,你也有医疗模块吧。 -我: 什么意思? -佩佩: 公司的所有技术性工作都是最终由技术性模块操作完成的。 -佩佩: 也就是说我的画都是我身体里的UF画的,UF模块自己会给作品产生颜色,我自己不需要能看见或者理解颜色。(切换表情(普通)) -我: 也就是说美工的画实际都是由UF画的,但是这个UF会导致美工机器人失去色觉? -佩佩: 不一定吧。他们说体质弱的机器人装上UF就有可能有这种情况。我想我是体质弱的那类。 -我: 这也太奇怪了……你的日常生活不会受到影响吗? -佩佩: 没关系噢,医生。颜色不是那么容易被忘记的东西吧。(笑) -我: 什么意思? -佩佩: 看到窗外的天空了吗? -我: 嗯,怎么了? - <> -<> -我: 啊…这是怎么做到的? -佩佩: (解释她是如何想象颜色的) -///<<任务提示更新:进行色觉检查测试>> -->指示佩佩观察机器 - <> -我: 不可思议 -->指示佩佩观察角色 - <> +// 我: 你的色觉是失效的……你怎么没跟我说,你自己不知道吗? +// 佩佩: 啊…这个很久啦,我已经不记得是什么时候开始的了,应该是装UF的时候开始的。但这不是什么大问题。 +// 佩佩: 很多美工都有这种情况。 +// 我: 很多?……不对,我需要再次核对下。你们能通过UF模块产生有颜色的图片,但是你们自己却看不见颜色? +// 切换表情(笑) +// 佩佩: 啊,医生,你也是公司的员工呀,你也有医疗模块吧。 +// 我: 什么意思? +// 佩佩: 公司的所有技术性工作都是最终由技术性模块操作完成的。 +// 佩佩: 也就是说我的画都是我身体里的UF画的,UF模块自己会给作品产生颜色,我自己不需要能看见或者理解颜色。(切换表情(普通)) +// 我: 也就是说美工的画实际都是由UF画的,但是这个UF会导致美工机器人失去色觉? +// 佩佩: 不一定吧。他们说体质弱的机器人装上UF就有可能有这种情况。我想我是体质弱的那类。 +// 我: 这也太奇怪了……你的日常生活不会受到影响吗? +// 佩佩: 没关系噢,医生。颜色不是那么容易被忘记的东西吧。(笑) +// 我: 什么意思? +// 佩佩: 看到窗外的天空了吗? +// 我: 嗯,怎么了? +// <> +// <> +// 我: 啊…这是怎么做到的? +// 佩佩: (解释她是如何想象颜色的) +// ///<<任务提示更新:进行色觉检查测试>> +// ->指示佩佩观察机器 +// <> +// 我: 不可思议 +// ->指示佩佩观察角色 +// <> ///<<任务提示更新:进行色觉检查测试已完成>> ///<<任务提示更新:检查视觉模块已完成>> +我: 明白了,视觉模块的权限可以关闭了,退出视觉检查 +//<> <> //<> @@ -236,13 +248,13 @@ position: -324,10 ///<<任务提示更新:检查UF模块已完成>> ///<<任务提示更新:检查记忆模块,定位排异源>> -我: 看起来问题找到了,这个UF模块正在受到排异反应影响,这导致了你的工作表现不佳。 -佩佩: 排异反应…是什么? -我: 嗯……简单来说,你身上的一些模块是来自于你自己的,而一些模块是被塞进来的,比如你的UF。 -我: 出于某些原因,你身体里的一些模块可能不太喜欢这些新来的模块,成因很复杂,我们还不知道是为什么。 -佩佩: 也就是说我的工作表现不佳不是我的能力原因,而是因为我身体里面有些东西…出问题了? -我: 不好说,需要先检查下。 -佩佩: 好的,麻烦医生了。 +// 我: 看起来问题找到了,这个UF模块正在受到排异反应影响,这导致了你的工作表现不佳。 +// 佩佩: 排异反应…是什么? +// 我: 嗯……简单来说,你身上的一些模块是来自于你自己的,而一些模块是被塞进来的,比如你的UF。 +// 我: 出于某些原因,你身体里的一些模块可能不太喜欢这些新来的模块,成因很复杂,我们还不知道是为什么。 +// 佩佩: 也就是说我的工作表现不佳不是我的能力原因,而是因为我身体里面有些东西…出问题了? +// 我: 不好说,需要先检查下。 +// 佩佩: 好的,麻烦医生了。 ///标记现在已经访问主视角下的UF模块了 //<> @@ -254,110 +266,112 @@ position: -324,10 === title: MemoryView -position: 397,211 +position: 557,290 --- <> -我: 定位一下排异的记忆… -///一个闪烁的图片:两个女孩的身影正在写生;自然环境AMB,非常稀疏的钢琴和弦BGM - <> -佩佩: 要是工作也能画画…要是能永远画画就好了。 -同学: 哈哈,可能等我们进入公司就不这么觉得了。听说进公司之后做什么都不会再快乐了。 -佩佩: 不会的。至少画画这件事情让我感觉到很纯粹的快乐…… -佩佩: 那种朝九晚五,一眼看到头的生活,我想我反而会受不了的。 -同学: 哈哈…… -同学: 但愿你是对的。 -佩佩: 我肯定是对的。 -//短暂的沉默 -佩佩: 如果公司这么讨厌的话,我就不在那里干就好了啊! -///<<关闭写生图片>> +// 我: 定位一下排异的记忆… +// ///一个闪烁的图片:两个女孩的身影正在写生;自然环境AMB,非常稀疏的钢琴和弦BGM +// <> +// 佩佩: 要是工作也能画画…要是能永远画画就好了。 +// 同学: 哈哈,可能等我们进入公司就不这么觉得了。听说进公司之后做什么都不会再快乐了。 +// 佩佩: 不会的。至少画画这件事情让我感觉到很纯粹的快乐…… +// 佩佩: 那种朝九晚五,一眼看到头的生活,我想我反而会受不了的。 +// 同学: 哈哈…… +// 同学: 但愿你是对的。 +// 佩佩: 我肯定是对的。 +// //短暂的沉默 +// 佩佩: 如果公司这么讨厌的话,我就不在那里干就好了啊! +// ///<<关闭写生图片>> -///<<展示落日图片>> -//一个闪烁的图片,两个人坐在湖边树下看落日;安静的公园AMB,轻轻的风声,远处偶尔的汽车;lofi & chill BGM - <> -???: 好美啊。 -佩佩: 嘘,别说话。 -//沉默,虫鸣。 -???: 我们要是能一直坐在这儿就好了。 -佩佩: 都让你别说话。 -//沉默,风吹过,树叶沙沙响。 -???: 我爱你。 -//沉默,远处汽车声。 -///<<结束落日图片>> +// ///<<展示落日图片>> +// //一个闪烁的图片,两个人坐在湖边树下看落日;安静的公园AMB,轻轻的风声,远处偶尔的汽车;lofi & chill BGM +// <> +// ???: 好美啊。 +// 佩佩: 嘘,别说话。 +// //沉默,虫鸣。 +// ???: 我们要是能一直坐在这儿就好了。 +// 佩佩: 都让你别说话。 +// //沉默,风吹过,树叶沙沙响。 +// ???: 我爱你。 +// //沉默,远处汽车声。 +// ///<<结束落日图片>> -///<<展示暗房图片>> -//关掉灯的声音 -//一个闪烁的图片,全红的暗房,一个人在洗照片,一个人坐着。荧光灯嗡嗡声,失真detune的压抑BGM - <> -???: 所以看起来,你的色觉也开始退化了。还好只是色觉……你现在应该还能看见红色,再这样下去红色也要看不到了。 -佩佩: 看不清颜色那我还怎么画画? -???: 没有影响啊。你是用UF画画的,这完全不影响你的工作。 -佩佩: 我是说画画,不是工作的画画…… -//擤鼻涕的声音,叹气 -???: 长大吧,孩子。 -佩佩: 什么意思?你不要用那种语气跟我说话。这难道是正常的生活吗? -佩佩: 我很久没画画了,都不知道我还会不会……我都分不清太阳和树叶的颜色了 -///<<结束暗房图片>> +// ///<<展示暗房图片>> +// //关掉灯的声音 +// //一个闪烁的图片,全红的暗房,一个人在洗照片,一个人坐着。荧光灯嗡嗡声,失真detune的压抑BGM +// <> +// ???: 所以看起来,你的色觉也开始退化了。还好只是色觉……你现在应该还能看见红色,再这样下去红色也要看不到了。 +// 佩佩: 看不清颜色那我还怎么画画? +// ???: 没有影响啊。你是用UF画画的,这完全不影响你的工作。 +// 佩佩: 我是说画画,不是工作的画画…… +// //擤鼻涕的声音,叹气 +// ???: 长大吧,孩子。 +// 佩佩: 什么意思?你不要用那种语气跟我说话。这难道是正常的生活吗? +// 佩佩: 我很久没画画了,都不知道我还会不会……我都分不清太阳和树叶的颜色了 +// ///<<结束暗房图片>> -佩佩: 停下,医生……快停下…… -我: 感觉反胃是吗?记忆引起的情绪波动导致的,我这就退出来。 -我: 好的,报错信息出来了。 -///<<任务提示更新:检查记忆模块,定位排异源完成>> -手册: 记忆被异常占用 -<> +// 佩佩: 停下,医生……快停下…… +// 我: 感觉反胃是吗?记忆引起的情绪波动导致的,我这就退出来。 +// 我: 好的,报错信息出来了。 +// ///<<任务提示更新:检查记忆模块,定位排异源完成>> +// 手册: 记忆被异常占用 +// <> + 我: 明白了,记忆模块的权限可以关闭了,退出记忆检查 +<> <> === title: conclusion -position: 75,366 +position: -209,312 --- <> ///<> ///<<任务提示更新:进行诊断已完成>> -我: 你的视觉在调用记忆里的素材,为看到的图像填补颜色。 -我: ……而这就是记忆异常占用的原因。你的想象力。 -佩佩: 怎么了,医生?想象力…不是很正常的事情吗? -我: 你的想象力阻止了UF正常工作……恐怕你需要停止想象。 -佩佩: 停止…想象?我不明白。怎么做到? -我: 其实为什么你可以想象才是比较奇怪的事情…手册说这是不应该存在的情况,UF应该已经清除了你的想象力。 -我: 根据公司规定,唯一可行办法是:视觉-记忆桥阻断术。 -我: 简单来说,视觉和记忆之间有一条线路,剪断它,就会从底层保证你的视觉无法再调用记忆素材。 -佩佩: 那样我就我就永远想象不出颜色了? -我: 是的。 -佩佩: 这不…我不想…… -佩佩: 医生,如果我能够停止想象,可以不切断这条线路吗? -我: 也许……听起来有可能可以。 -///<<任务提示更新:引导患者尝试停止想象>> -佩佩: 好的,想象…停止想象,停止想象。 -佩佩: 我准备好了。医生,我该怎么做? -我: 老实说…我不知道。 -佩佩: 医生…您不知道?手册不是涉及了所有情况吗? -我: 是的,准确地说,就是手册不知道。 -我: 尽管机器人技术已经发展了80年,但是对于这种人体原生器官,我们还是知之甚少。 -佩佩: 可是,您不是知道病因就是想象力吗? -我: 是的,我们知道想象力就在视觉模块里面。 -我: 我们知道如何利用它,如何观测它,但我们不知道如何控制它。 -我: 我们对机器了如指掌,但人体对我们来说还是一个黑盒子…… -佩佩: 黑盒子……可是我能清晰地感觉到它呀! -佩佩: 想象力是那么清晰,我可以……不,我不应该想象…… -我: 佩佩,我相信既然你能感受到它,就能尝试控制它。 -我: 就像你唤醒它一样,用同样的方式让它停下吧。 -//(一些不同选项的对话,引导佩佩通过不同的方式停止想象) -我: 你现在感觉如何? +// 我: 你的视觉在调用记忆里的素材,为看到的图像填补颜色。 +// 我: ……而这就是记忆异常占用的原因。你的想象力。 +// 佩佩: 怎么了,医生?想象力…不是很正常的事情吗? +// 我: 你的想象力阻止了UF正常工作……恐怕你需要停止想象。 +// 佩佩: 停止…想象?我不明白。怎么做到? +// 我: 其实为什么你可以想象才是比较奇怪的事情…手册说这是不应该存在的情况,UF应该已经清除了你的想象力。 +// 我: 根据公司规定,唯一可行办法是:视觉-记忆桥阻断术。 +// 我: 简单来说,视觉和记忆之间有一条线路,剪断它,就会从底层保证你的视觉无法再调用记忆素材。 +// 佩佩: 那样我就我就永远想象不出颜色了? +// 我: 是的。 +// 佩佩: 这不…我不想…… +// 佩佩: 医生,如果我能够停止想象,可以不切断这条线路吗? +// 我: 也许……听起来有可能可以。 +// ///<<任务提示更新:引导患者尝试停止想象>> +// 佩佩: 好的,想象…停止想象,停止想象。 +// 佩佩: 我准备好了。医生,我该怎么做? +// 我: 老实说…我不知道。 +// 佩佩: 医生…您不知道?手册不是涉及了所有情况吗? +// 我: 是的,准确地说,就是手册不知道。 +// 我: 尽管机器人技术已经发展了80年,但是对于这种人体原生器官,我们还是知之甚少。 +// 佩佩: 可是,您不是知道病因就是想象力吗? +// 我: 是的,我们知道想象力就在视觉模块里面。 +// 我: 我们知道如何利用它,如何观测它,但我们不知道如何控制它。 +// 我: 我们对机器了如指掌,但人体对我们来说还是一个黑盒子…… +// 佩佩: 黑盒子……可是我能清晰地感觉到它呀! +// 佩佩: 想象力是那么清晰,我可以……不,我不应该想象…… +// 我: 佩佩,我相信既然你能感受到它,就能尝试控制它。 +// 我: 就像你唤醒它一样,用同样的方式让它停下吧。 +// //(一些不同选项的对话,引导佩佩通过不同的方式停止想象) +// 我: 你现在感觉如何? 佩佩: 我不知道,我觉得现在好像很没有想象力。也许。 我: 那我们试试吧。 -<> -<> +<> +<> +//<> +//<> -<> +<> === title: Treatment -position: 76,708 +position: 124,513 --- - <> -->进入视觉模块 - <> - <> +<> +<> 我: 我们开始吧。 ->指示佩佩看天空 ///<<画面波动了一下,但不变色>> @@ -381,14 +395,17 @@ position: 76,708 ///<<播放动画:一只手拍了一下镜头,画面闪烁了一下,颜色变得更鲜艳了>> 佩佩: 停止想象!停止想象!停止想象! 我: 够了。 -<> -<> +我: 关闭视觉检查权限并退出 +<> +//<> +//<> +<> <> === title: BeforeSurgery -position: 81,962 +position: 465,500 --- //////主房间-停止想象失败,准备手术 <> @@ -408,14 +425,16 @@ position: 81,962 ///<<签名>> ///<<任务提示更新:进行视觉-记忆桥截断术>> 我: 好的,那么我们开始吧。 -<> +<> + <> +<> === title: Surgery -position: 81,962 +position: 85,821 --- /////头部视角-视觉-记忆桥截断术 - <> - <> + + //<> ->执行视觉-记忆桥阻断术 佩佩: 啊…眼睛……我的…… 佩佩: 好痛! @@ -424,11 +443,13 @@ position: 81,962 佩佩: 呼…… 佩佩: 好像……好多了。 我: 进视觉和UF模块检查一下吧。 + <> + <> <> === title: review -position: 81,962 +position: 85,1052 --- <> <> @@ -439,6 +460,10 @@ position: 81,962 我: 好,都没问题了。 <> ->复查视觉系统<> + <> + [options /] + -> EyeViewActivate + <> <> ->复查UF模块<> <> @@ -447,7 +472,7 @@ position: 81,962 === title: EyeViewFollowUp -position: 378,1051 +position: 441,1082 --- <> <>