Timeline UI
This commit is contained in:
1 parent
c8626a9806
commit
2697212f05
177 files changed
+52513
-41627
No files matched your search
@@ -73,6 +73,12 @@ MonoBehaviour:
|
||||
m_ReadOnly: 0
|
||||
m_SerializedLabels: []
|
||||
FlaggedDuringContentUpdateRestriction: 0
|
||||
- m_GUID: 38887ff0efb114a4a8fc74ab7a35b7de
|
||||
m_Address: Assets/OfficeGame/Battle/UI/Timeline.asset
|
||||
m_ReadOnly: 0
|
||||
m_SerializedLabels:
|
||||
- UIPanel
|
||||
FlaggedDuringContentUpdateRestriction: 0
|
||||
- m_GUID: 4063962b1b4e97ccd90729bd538a1fb4
|
||||
m_Address: Assets/Infrastructure/Audio/Full3DSource.asset
|
||||
m_ReadOnly: 0
|
||||
@@ -85,6 +91,11 @@ MonoBehaviour:
|
||||
m_SerializedLabels:
|
||||
- UIPanel
|
||||
FlaggedDuringContentUpdateRestriction: 0
|
||||
- m_GUID: 7d927d895d0ac44718014776d136e9bf
|
||||
m_Address: Assets/OfficeGame/Battle/UI/TimelinePanel.prefab
|
||||
m_ReadOnly: 0
|
||||
m_SerializedLabels: []
|
||||
FlaggedDuringContentUpdateRestriction: 0
|
||||
- m_GUID: 7e53d1050bed148929357759009cc715
|
||||
m_Address: Assets/Infrastructure/Audio/AudioMixerSettings.asset
|
||||
m_ReadOnly: 0
|
||||
|
||||
@@ -82,6 +82,10 @@ namespace Code.Game.TestingLevel
|
||||
(BattleActionDecisionPanel)await Context.UIFactory
|
||||
.LoadPanel(UIPanelType.BattleActionDecision, false);
|
||||
|
||||
BattleTimelinePanel battleTimelinePanel =
|
||||
(BattleTimelinePanel)await Context.UIFactory
|
||||
.LoadPanel(UIPanelType.BattleTimelinePanel, false);
|
||||
|
||||
// ((OpenMovementCameraState)Context.Camera.CurrentBaseState).SetTarget(player.transform);
|
||||
|
||||
void InstallExtra(Scene scene, ContainerBuilder builder)
|
||||
@@ -96,6 +100,7 @@ namespace Code.Game.TestingLevel
|
||||
builder.RegisterValue(playerTimelineActor);
|
||||
|
||||
builder.RegisterValue(battleActionDecisionPanel);
|
||||
builder.RegisterValue(battleTimelinePanel);
|
||||
}
|
||||
|
||||
await UniTask.WhenAll(
|
||||
|
||||
@@ -24,12 +24,12 @@ namespace Code.OfficeGame.BattleMode.Actions.Attacks
|
||||
_attackData = (AttackActionConfig) attackData.Configs.SingleOrDefault(x=>x.ActionType == ActionType);
|
||||
}
|
||||
|
||||
public override async UniTask<BattleActionDecisionResultCode> DecideAction()
|
||||
public override async UniTask<BattleActionDecisionResult> DecideAction()
|
||||
{
|
||||
_currentFrame = 0;
|
||||
Finished = false;
|
||||
|
||||
return BattleActionDecisionResultCode.Decided;
|
||||
|
||||
return new() { ResultCode = BattleActionDecisionResultCode.Decided, FrameDuration = _attackData.TotalFrames};
|
||||
}
|
||||
|
||||
public override BattleActionType ActionType => BattleActionType.PlayerAttackMMA;
|
||||
@@ -66,7 +66,6 @@ namespace Code.OfficeGame.BattleMode.Actions.Attacks
|
||||
Debug.Log($"Попадание в {enemyCollider.name} на {_currentFrame}-м кадре! Урон: {_attackData.Damage}");
|
||||
var entityActor = enemyCollider.GetComponentInParent<EntityTimelineActor>();
|
||||
entityActor.ForceDecideAction(BattleActionType.Stugger);
|
||||
|
||||
}
|
||||
|
||||
public void CompleteOrInterruptAction()
|
||||
|
||||
@@ -7,7 +7,7 @@ namespace Code.OfficeGame.BattleMode.Actions
|
||||
{
|
||||
public bool Finished { get; protected set; }
|
||||
public abstract void Tick(float tickDelta);
|
||||
public abstract UniTask<BattleActionDecisionResultCode> DecideAction();
|
||||
public abstract UniTask<BattleActionDecisionResult> DecideAction();
|
||||
public abstract BattleActionType ActionType { get; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace Code.OfficeGame.BattleMode.Actions
|
||||
{
|
||||
public struct BattleActionDecisionResult
|
||||
{
|
||||
public BattleActionDecisionResultCode ResultCode;
|
||||
public int FrameDuration;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 392d78f7e24c4a4bbceea3776e00272c
|
||||
timeCreated: 1793113452
|
||||
@@ -2,6 +2,7 @@ using System.Threading;
|
||||
using Code.Game.Gameplay.Player;
|
||||
using Code.Infrastructure.Camera;
|
||||
using Code.Infrastructure.Input;
|
||||
using Code.OfficeGame.BattleMode.Timeline;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using KinematicCharacterController;
|
||||
using Reflex.Attributes;
|
||||
@@ -129,7 +130,7 @@ namespace Code.OfficeGame.BattleMode.Actions
|
||||
private CancellationTokenSource _waitForEnterTokenSource;
|
||||
private BattleActionDecisionResultCode _decisionResultCode;
|
||||
|
||||
public override async UniTask<BattleActionDecisionResultCode> DecideAction()
|
||||
public override async UniTask<BattleActionDecisionResult> DecideAction()
|
||||
{
|
||||
_waitForEnterTokenSource = new CancellationTokenSource();
|
||||
_decisionResultCode = BattleActionDecisionResultCode.CancelDecision;
|
||||
@@ -156,11 +157,13 @@ namespace Code.OfficeGame.BattleMode.Actions
|
||||
|
||||
Finished = _decisionResultCode != BattleActionDecisionResultCode.Decided;
|
||||
|
||||
return _decisionResultCode;
|
||||
return new() { ResultCode = _decisionResultCode, FrameDuration = _totalFrames};
|
||||
}
|
||||
|
||||
public override BattleActionType ActionType => BattleActionType.Move;
|
||||
|
||||
private int _totalFrames;
|
||||
|
||||
private void CancelPosition(InputAction.CallbackContext obj)
|
||||
{
|
||||
_decisionResultCode = BattleActionDecisionResultCode.CancelDecision;
|
||||
@@ -180,12 +183,40 @@ namespace Code.OfficeGame.BattleMode.Actions
|
||||
_corners = _path.corners;
|
||||
_currentCornerIndex = _corners.Length > 1 ? 1 : 0;
|
||||
_decisionResultCode = BattleActionDecisionResultCode.Decided;
|
||||
_totalFrames = CalculatePathFrames(_corners);
|
||||
}
|
||||
else
|
||||
{
|
||||
_decisionResultCode = BattleActionDecisionResultCode.Deciding;
|
||||
_totalFrames = 0;
|
||||
}
|
||||
else _decisionResultCode = BattleActionDecisionResultCode.Deciding;
|
||||
|
||||
_waitForEnterTokenSource?.Cancel();
|
||||
}
|
||||
private int CalculatePathFrames(Vector3[] corners)
|
||||
{
|
||||
if (corners == null || corners.Length < 2)
|
||||
return 0;
|
||||
|
||||
float totalDistanceXZ = 0f;
|
||||
|
||||
for (int i = 1; i < corners.Length; i++)
|
||||
{
|
||||
Vector3 segment = corners[i] - corners[i - 1];
|
||||
segment.y = 0f;
|
||||
totalDistanceXZ += segment.magnitude;
|
||||
}
|
||||
|
||||
float effectiveDistance = Mathf.Max(0f, totalDistanceXZ - StoppingDistance);
|
||||
|
||||
float stepPerFrame = _movementController.MaxStableMoveSpeed * BattleTimeline.TickDelta;
|
||||
|
||||
if (stepPerFrame <= 0.0001f)
|
||||
return 0;
|
||||
|
||||
// Округляем вверх, так как последний неполный шаг тоже занимает 1 целый кадр
|
||||
return Mathf.CeilToInt(effectiveDistance / stepPerFrame);
|
||||
}
|
||||
private void SelectPosition(InputAction.CallbackContext input)
|
||||
{
|
||||
var position = _cameraStateMachine.Camera.transform.position;
|
||||
|
||||
@@ -25,12 +25,13 @@ namespace Code.OfficeGame.BattleMode.Actions
|
||||
_entityHitBoxes = GetComponent<EntityHitBoxes>();
|
||||
_actionParameters = actionData.Configs.SingleOrDefault(x => x.ActionType == ActionType);
|
||||
}
|
||||
public override async UniTask<BattleActionDecisionResultCode> DecideAction()
|
||||
public override async UniTask<BattleActionDecisionResult> DecideAction()
|
||||
{
|
||||
_currentFrame = 0;
|
||||
Finished = false;
|
||||
|
||||
return BattleActionDecisionResultCode.Decided;
|
||||
return new() { ResultCode = BattleActionDecisionResultCode.Decided, FrameDuration = _actionParameters.TotalFrames};
|
||||
|
||||
}
|
||||
|
||||
public override BattleActionType ActionType => BattleActionType.Stugger;
|
||||
|
||||
@@ -11,13 +11,17 @@ namespace Code.OfficeGame.BattleMode.Actions
|
||||
if (_waitFrames <= 0) Finished = true;
|
||||
}
|
||||
|
||||
public override async UniTask<BattleActionDecisionResultCode> DecideAction()
|
||||
public override async UniTask<BattleActionDecisionResult> DecideAction()
|
||||
{
|
||||
Finished = false;
|
||||
|
||||
_waitFrames = 120;
|
||||
|
||||
return BattleActionDecisionResultCode.Decided;
|
||||
return new()
|
||||
{
|
||||
ResultCode = BattleActionDecisionResultCode.Decided,
|
||||
FrameDuration = _waitFrames
|
||||
};
|
||||
}
|
||||
|
||||
public override BattleActionType ActionType => BattleActionType.Wait;
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
using Code.OfficeGame.BattleMode.Timeline;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using R3;
|
||||
using Unity.VisualScripting;
|
||||
using UnityEngine;
|
||||
|
||||
@@ -10,9 +12,27 @@ namespace Code.OfficeGame.BattleMode.Actions
|
||||
{
|
||||
public BattleAction CurrentAction { get; protected set;}
|
||||
public bool Finished => CurrentAction == null || CurrentAction.Finished;
|
||||
|
||||
private readonly Subject<TimelineBattleAction> _onActionSet = new();
|
||||
public Observable<TimelineBattleAction> OnActionSet => _onActionSet;
|
||||
|
||||
protected void SetCurrentAction(BattleAction action, int durationInFrames)
|
||||
{
|
||||
CurrentAction = action;
|
||||
|
||||
_onActionSet.OnNext(new TimelineBattleAction
|
||||
{
|
||||
EntityId = gameObject.GetEntityId(),
|
||||
Frame = durationInFrames
|
||||
});
|
||||
}
|
||||
private void OnDestroy()
|
||||
{
|
||||
_onActionSet.Dispose();
|
||||
}
|
||||
|
||||
public abstract UniTask DecideAction(CancellationToken ctx);
|
||||
public abstract void ForceDecideAction(BattleActionType actionType);
|
||||
public abstract UniTaskVoid ForceDecideAction(BattleActionType actionType);
|
||||
|
||||
[DoNotSerialize] public Animator animator;
|
||||
|
||||
|
||||
@@ -16,6 +16,8 @@ namespace Code.OfficeGame.BattleMode.Actions.Player
|
||||
|
||||
BattleActionType decidedAction = BattleActionType.None;
|
||||
|
||||
BattleActionDecisionResult decision = new();
|
||||
|
||||
while (decidedAction == BattleActionType.None || ctx.IsCancellationRequested)
|
||||
{
|
||||
Cursor.lockState = CursorLockMode.Confined;
|
||||
@@ -23,29 +25,30 @@ namespace Code.OfficeGame.BattleMode.Actions.Player
|
||||
await _battleActionDecisionPanel.Open(ctx);
|
||||
|
||||
decidedAction = await _battleActionDecisionPanel.GetDecision(ctx);
|
||||
var decision = BattleActionDecisionResultCode.Deciding;
|
||||
|
||||
while (decidedAction != BattleActionType.None
|
||||
&& decision == BattleActionDecisionResultCode.Deciding
|
||||
&& !ctx.IsCancellationRequested)
|
||||
{
|
||||
Cursor.lockState = CursorLockMode.Locked;
|
||||
|
||||
await _battleActionDecisionPanel.Close(ctx);
|
||||
|
||||
|
||||
decision = await BattleActions[decidedAction].DecideAction();
|
||||
|
||||
if (decision == BattleActionDecisionResultCode.CancelDecision)
|
||||
if (decision.ResultCode == BattleActionDecisionResultCode.CancelDecision)
|
||||
decidedAction = BattleActionType.None;
|
||||
|
||||
if (decision.ResultCode != BattleActionDecisionResultCode.Deciding)
|
||||
break;
|
||||
}
|
||||
}
|
||||
CurrentAction = BattleActions[decidedAction];
|
||||
SetCurrentAction(BattleActions[decidedAction], decision.FrameDuration);
|
||||
}
|
||||
|
||||
public override void ForceDecideAction(BattleActionType actionType)
|
||||
public override async UniTaskVoid ForceDecideAction(BattleActionType actionType)
|
||||
{
|
||||
CurrentAction = BattleActions[actionType];
|
||||
CurrentAction.DecideAction();
|
||||
var decision = await CurrentAction.DecideAction();
|
||||
SetCurrentAction(BattleActions[actionType], decision.FrameDuration);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10,10 +10,12 @@ using Code.Infrastructure.SceneLoader;
|
||||
using Code.OfficeGame.BattleMode.Actions;
|
||||
using Code.OfficeGame.BattleMode.Actions.Player;
|
||||
using Code.OfficeGame.BattleMode.Timeline;
|
||||
using Code.OfficeGame.BattleMode.UI;
|
||||
using Code.OfficeGame.Player;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using KinematicCharacterController;
|
||||
using Reflex.Core;
|
||||
using Reflex.Injectors;
|
||||
using UnityEngine;
|
||||
using UnityEngine.InputSystem;
|
||||
|
||||
@@ -28,7 +30,7 @@ namespace Code.Game.OfficeGame.GameStates
|
||||
|
||||
public override AppStates MyState => AppStates.BattleState;
|
||||
|
||||
private BattleTimeline _battleTimeline = new BattleTimeline();
|
||||
private BattleTimeline _battleTimeline;
|
||||
private CancellationTokenSource _battleTokenSource = new CancellationTokenSource();
|
||||
|
||||
public override async UniTask EnterState()
|
||||
@@ -52,6 +54,8 @@ namespace Code.Game.OfficeGame.GameStates
|
||||
{
|
||||
_battleTokenSource = new();
|
||||
|
||||
_battleTimeline = ConstructorInjector.Construct(typeof(BattleTimeline), container) as BattleTimeline;
|
||||
|
||||
Physics.simulationMode = SimulationMode.Script;
|
||||
KinematicCharacterSystem.EnsureCreation();
|
||||
KinematicCharacterSystem.Settings.AutoSimulation = false;
|
||||
@@ -66,8 +70,10 @@ namespace Code.Game.OfficeGame.GameStates
|
||||
entity.animator.enabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
_battleTimeline?.RunBattleLoopAsync(entities,_battleTokenSource.Token).Forget();
|
||||
|
||||
_battleTimeline.RunBattleLoopAsync(entities,_battleTokenSource.Token).Forget();
|
||||
await container.Resolve<BattleTimelinePanel>().Open();
|
||||
}
|
||||
|
||||
private void TogglePlayerBattleMode(Container container, bool enabled)
|
||||
@@ -95,6 +101,7 @@ namespace Code.Game.OfficeGame.GameStates
|
||||
var container = Context.SceneContainerManager.ScenesContainers[SceneId.Testing];
|
||||
|
||||
TogglePlayerBattleMode(container, true);
|
||||
await container.Resolve<BattleTimelinePanel>().Close();
|
||||
|
||||
// T
|
||||
var entities =
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
using Code.OfficeGame.BattleMode.Actions;
|
||||
using Code.OfficeGame.BattleMode.UI;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using R3;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Code.OfficeGame.BattleMode.Timeline
|
||||
@@ -11,23 +13,53 @@ namespace Code.OfficeGame.BattleMode.Timeline
|
||||
public const int TicksPerSecond = 60;
|
||||
public const float TickDelta = 1f / TicksPerSecond;
|
||||
|
||||
public int CurrentBattleFrame { get; private set; }
|
||||
private readonly ReactiveProperty<int> _currentBattleFrame = new(0);
|
||||
public ReadOnlyReactiveProperty<int> CurrentBattleFrame => _currentBattleFrame;
|
||||
|
||||
private readonly BattleTimelinePanel _timelinePanel;
|
||||
private List<EntityTimelineActor> _entities;
|
||||
private DisposableBag _battleSubscriptions;
|
||||
|
||||
public async UniTask RunBattleLoopAsync(List<EntityTimelineActor> entities, CancellationToken ct)
|
||||
public BattleTimeline(BattleTimelinePanel timelinePanel)
|
||||
{
|
||||
_timelinePanel = timelinePanel;
|
||||
}
|
||||
public async UniTask RunBattleLoopAsync(List<EntityTimelineActor> entities, CancellationToken ctx)
|
||||
{
|
||||
_entities = entities;
|
||||
|
||||
CurrentBattleFrame = 0;
|
||||
_currentBattleFrame.Value = 0;
|
||||
|
||||
await DecideActions(_entities, ct);
|
||||
// Контейнер подписок на время текущего боя (автоматически очистится при выходе из метода)
|
||||
_battleSubscriptions = new DisposableBag();
|
||||
|
||||
while (!IsBattleOver() && !ct.IsCancellationRequested)
|
||||
try
|
||||
{
|
||||
List<EntityTimelineActor> entitiesNeedOrders = await PlayTimelineUntilPause(ct);
|
||||
_currentBattleFrame
|
||||
.Subscribe(_timelinePanel.OnFrameTick)
|
||||
.AddTo(ref _battleSubscriptions);
|
||||
|
||||
await DecideActions(entitiesNeedOrders, ct);
|
||||
foreach (var entity in entities)
|
||||
entity.OnActionSet
|
||||
.Subscribe(action =>
|
||||
{
|
||||
// Переводим длительность действия в абсолютный кадр окончания на таймлайне
|
||||
action.Frame += _currentBattleFrame.Value;
|
||||
_timelinePanel.SetAction(action);
|
||||
})
|
||||
.AddTo(ref _battleSubscriptions);
|
||||
|
||||
await DecideActions(_entities, ctx);
|
||||
|
||||
while (!IsBattleOver() && !ctx.IsCancellationRequested)
|
||||
{
|
||||
List<EntityTimelineActor> entitiesNeedOrders = await PlayTimelineUntilPause(ctx);
|
||||
|
||||
await DecideActions(entitiesNeedOrders, ctx);
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
_battleSubscriptions.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -65,28 +97,21 @@ namespace Code.OfficeGame.BattleMode.Timeline
|
||||
|
||||
private void SimulateSingleFrame(List<EntityTimelineActor> outReadyEntities)
|
||||
{
|
||||
CurrentBattleFrame++;
|
||||
_currentBattleFrame.Value++;
|
||||
|
||||
foreach (var entity in _entities)
|
||||
{
|
||||
entity.CurrentAction.Tick(TickDelta);
|
||||
}
|
||||
|
||||
foreach (var entity in _entities)
|
||||
{
|
||||
entity.animator.Update(TickDelta);
|
||||
}
|
||||
|
||||
Physics.Simulate(TickDelta);
|
||||
Physics.SyncTransforms();
|
||||
|
||||
foreach (var entity in _entities)
|
||||
{
|
||||
|
||||
if (entity.Finished)
|
||||
{
|
||||
outReadyEntities.Add(entity);
|
||||
}
|
||||
}
|
||||
|
||||
Physics.Simulate(TickDelta);
|
||||
Physics.SyncTransforms();
|
||||
}
|
||||
|
||||
private bool IsBattleOver() => false;
|
||||
|
||||
@@ -1,29 +1,91 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
using Code.Infrastructure.UI;
|
||||
using Code.OfficeGame.BattleMode.Timeline;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using LitMotion;
|
||||
using LitMotion.Extensions;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Code.OfficeGame.BattleMode.UI
|
||||
{
|
||||
public class BattleTimelinePanel : UIPanel
|
||||
{
|
||||
[SerializeField] private int maxFrames = 250;
|
||||
[SerializeField] private GameObject timelineKeyPrefab;
|
||||
[SerializeField] private float duration = 0.35f;
|
||||
[SerializeField] private BattleActionDecisionButton actionButtonPrefab;
|
||||
[SerializeField] private RectTransform timelineItself;
|
||||
|
||||
// TODO Вырезать или пощадить
|
||||
private readonly Dictionary<EntityId, int> _entityEndFrames = new();
|
||||
private readonly Dictionary<EntityId, RectTransform> _entityKeys = new();
|
||||
|
||||
private int _lastKnownCurrentFrame;
|
||||
|
||||
private List<BattleActionDecisionButton> _actionButtons = new();
|
||||
|
||||
private MotionHandle _motionHandle;
|
||||
|
||||
|
||||
public void SetAction(TimelineBattleAction action)
|
||||
{
|
||||
_entityEndFrames[action.EntityId] = action.Frame;
|
||||
|
||||
if (!_entityKeys.TryGetValue(action.EntityId, out RectTransform keyRect))
|
||||
{
|
||||
keyRect = (RectTransform)Instantiate(timelineKeyPrefab, timelineItself).transform;
|
||||
_entityKeys[action.EntityId] = keyRect;
|
||||
}
|
||||
|
||||
UpdateKeyPosition(keyRect, action.Frame - _lastKnownCurrentFrame);
|
||||
}
|
||||
public void OnFrameTick(int currentFrame)
|
||||
{
|
||||
_lastKnownCurrentFrame = currentFrame;
|
||||
|
||||
foreach (var (entityId, endFrame) in _entityEndFrames)
|
||||
{
|
||||
if (_entityKeys.TryGetValue(entityId, out RectTransform keyRect))
|
||||
{
|
||||
int remainingFrames = Mathf.Max(0, endFrame - currentFrame);
|
||||
UpdateKeyPosition(keyRect, remainingFrames);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateKeyPosition(RectTransform keyRect, int relativeFrame)
|
||||
{
|
||||
var rectWidth = timelineItself.rect.width;
|
||||
var frameSize = rectWidth / maxFrames;
|
||||
|
||||
keyRect.anchoredPosition = new Vector2(frameSize * relativeFrame - rectWidth / 2f, 0f);
|
||||
}
|
||||
|
||||
public override async UniTask Open(CancellationToken cts = default)
|
||||
{
|
||||
|
||||
gameObject.SetActive(true);
|
||||
|
||||
float startY = -((RectTransform)transform).rect.height;
|
||||
float targetY = 0f;
|
||||
|
||||
_motionHandle = LMotion.Create(startY, targetY, duration)
|
||||
.WithEase(Ease.OutCubic)
|
||||
.WithScheduler(MotionScheduler.UpdateIgnoreTimeScale)
|
||||
.BindToAnchoredPositionY((RectTransform)transform);
|
||||
|
||||
await _motionHandle.ToUniTask(cts);
|
||||
}
|
||||
|
||||
public override async UniTask Close(CancellationToken cts = default)
|
||||
{
|
||||
|
||||
float startY = 0;
|
||||
float targetY = ((RectTransform)transform).rect.height;
|
||||
|
||||
_motionHandle = LMotion.Create(startY, targetY, duration)
|
||||
.WithEase(Ease.InBack)
|
||||
.WithScheduler(MotionScheduler.UpdateIgnoreTimeScale)
|
||||
.BindToAnchoredPositionY((RectTransform)transform);
|
||||
|
||||
await _motionHandle.ToUniTask(cts);
|
||||
|
||||
gameObject.SetActive(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@ namespace Code.Infrastructure.UI
|
||||
{
|
||||
public enum UIPanelType
|
||||
{
|
||||
BattleActionDecision
|
||||
BattleActionDecision,
|
||||
BattleTimelinePanel
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &241074223658640687
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 7614016565782946025}
|
||||
- component: {fileID: 4713099913235282240}
|
||||
- component: {fileID: 1278689757657035200}
|
||||
m_Layer: 5
|
||||
m_Name: Key
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &7614016565782946025
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 241074223658640687}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 27.9085}
|
||||
m_SizeDelta: {x: 10, y: 94.3068}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &4713099913235282240
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 241074223658640687}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &1278689757657035200
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 241074223658640687}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 0, g: 0, b: 0, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 0}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5207a1341ed9b4be3afa3519248e0d11
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,21 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &11400000
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 0}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 263960ff516f55c6686b3c63c7a6a28e, type: 3}
|
||||
m_Name: Timeline
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Code.Infrastructure.UI.UIPanelSettings
|
||||
Prefab:
|
||||
m_AssetGUID: 7d927d895d0ac44718014776d136e9bf
|
||||
m_SubObjectName:
|
||||
m_SubObjectType:
|
||||
m_SubObjectGUID:
|
||||
m_EditorAssetChanged: 0
|
||||
UIPanelType: 1
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 38887ff0efb114a4a8fc74ab7a35b7de
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,206 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &5612670767920243168
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8963393221385055825}
|
||||
- component: {fileID: 7130912852184395562}
|
||||
- component: {fileID: 7527782372204337943}
|
||||
m_Layer: 5
|
||||
m_Name: Timeline
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &8963393221385055825
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5612670767920243168}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 8274860792887524386}
|
||||
m_Father: {fileID: 8426637362296163613}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 1407.0923, y: 38.4897}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &7130912852184395562
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5612670767920243168}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &7527782372204337943
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5612670767920243168}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 0}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &5994337181957046811
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8274860792887524386}
|
||||
- component: {fileID: 6913934828273720679}
|
||||
- component: {fileID: 8958199325776868951}
|
||||
m_Layer: 5
|
||||
m_Name: Pointer
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &8274860792887524386
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5994337181957046811}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 8963393221385055825}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: -601.9, y: 27.9085}
|
||||
m_SizeDelta: {x: 19.9333, y: 94.3068}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &6913934828273720679
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5994337181957046811}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &8958199325776868951
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5994337181957046811}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 0.31167677, g: 0.38671294, b: 0.6415094, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 0}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &8190722548431316705
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8426637362296163613}
|
||||
- component: {fileID: 636803712880620903}
|
||||
m_Layer: 5
|
||||
m_Name: TimelinePanel
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &8426637362296163613
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8190722548431316705}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 8963393221385055825}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 0, y: 149.98}
|
||||
m_SizeDelta: {x: 0, y: 149.9771}
|
||||
m_Pivot: {x: 0.5, y: 1}
|
||||
--- !u!114 &636803712880620903
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8190722548431316705}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 28c89f59fd444665aa35639c5d1fa1c5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier: Assembly-CSharp::Code.OfficeGame.BattleMode.UI.BattleTimelinePanel
|
||||
maxFrames: 250
|
||||
timelineKeyPrefab: {fileID: 241074223658640687, guid: 5207a1341ed9b4be3afa3519248e0d11, type: 3}
|
||||
duration: 0.35
|
||||
timelineItself: {fileID: 8963393221385055825}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7d927d895d0ac44718014776d136e9bf
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,6 +1,5 @@
|
||||
// Game: Unity: OfficeGame
|
||||
// Format: Quake3 (Valve)
|
||||
// Generator: TrenchBroom 2026.2 (Build v2026.2 Release Linux)
|
||||
// entity 0
|
||||
{
|
||||
"mapversion" "220"
|
||||
@@ -9,93 +8,93 @@
|
||||
"LocationID" "TestOffice"
|
||||
// brush 0
|
||||
{
|
||||
( -784 272 64 ) ( -784 273 64 ) ( -784 272 65 ) FirstSecond/WallOfficeSecond_1 [ 0 -1 0 288 ] [ 0 0 -1 -192 ] 90 0.25 0.25
|
||||
( -304 288 64 ) ( -305 288 64 ) ( -304 288 65 ) FirstSecond/WallOfficeSecond_1 [ -1 0 0 -352 ] [ 0 0 -1 -192 ] 0 0.25 0.25
|
||||
( -48 16 -64 ) ( -48 17 -64 ) ( -49 16 -64 ) FirstSecond/WallOfficeSecond_1 [ 0 -1 0 288 ] [ 1 0 0 -192 ] 0 0.25 0.25
|
||||
( -304 272 80 ) ( -305 272 80 ) ( -304 273 80 ) FirstSecond/WallOfficeSecond_1 [ 0 1 0 -288 ] [ 1 0 0 -192 ] 0 0.25 0.25
|
||||
( -304 304 64 ) ( -304 304 65 ) ( -305 304 64 ) FirstSecond/WallOfficeSecond_1 [ -1 0 0 -352 ] [ 0 0 -1 -192 ] 90 0.25 0.25
|
||||
( 440 16 -64 ) ( 440 16 -63 ) ( 440 17 -64 ) FirstSecond/WallOfficeSecond_1 [ 0 1 0 -288 ] [ 0 0 -1 -192 ] 90 0.25 0.25
|
||||
( -784.00 272.00 64.00 ) ( -784.00 273.00 64.00 ) ( -784.00 272.00 65.00 ) FirstSecond/WallOfficeSecond_1 [ 0.00000 -1.00000 0.00000 288.00000 ] [ 0.00000 0.00000 -1.00000 -192.00000 ] 90.00 0.25 0.25
|
||||
( -304.00 288.00 64.00 ) ( -305.00 288.00 64.00 ) ( -304.00 288.00 65.00 ) FirstSecond/WallOfficeSecond_1 [ -1.00000 0.00000 0.00000 -352.00000 ] [ 0.00000 0.00000 -1.00000 -192.00000 ] 0.00 0.25 0.25
|
||||
( -48.00 16.00 -64.00 ) ( -48.00 17.00 -64.00 ) ( -49.00 16.00 -64.00 ) FirstSecond/WallOfficeSecond_1 [ 0.00000 -1.00000 0.00000 288.00000 ] [ 1.00000 0.00000 0.00000 -192.00000 ] 0.00 0.25 0.25
|
||||
( -304.00 272.00 80.00 ) ( -305.00 272.00 80.00 ) ( -304.00 273.00 80.00 ) FirstSecond/WallOfficeSecond_1 [ 0.00000 1.00000 0.00000 -288.00000 ] [ 1.00000 0.00000 0.00000 -192.00000 ] 0.00 0.25 0.25
|
||||
( -304.00 304.00 64.00 ) ( -304.00 304.00 65.00 ) ( -305.00 304.00 64.00 ) FirstSecond/WallOfficeSecond_1 [ -1.00000 0.00000 0.00000 -352.00000 ] [ 0.00000 0.00000 -1.00000 -192.00000 ] 90.00 0.25 0.25
|
||||
( 440.00 16.00 -64.00 ) ( 440.00 16.00 -63.00 ) ( 440.00 17.00 -64.00 ) FirstSecond/WallOfficeSecond_1 [ 0.00000 1.00000 0.00000 -288.00000 ] [ 0.00000 0.00000 -1.00000 -192.00000 ] 90.00 0.25 0.25
|
||||
}
|
||||
// brush 1
|
||||
{
|
||||
( -784 272 64 ) ( -784 273 64 ) ( -784 272 65 ) FirstSecond/WallOfficeSecond_1 [ 0 -1 0 288 ] [ 0 0 -1 -192 ] 90 0.25 0.25
|
||||
( -48 -176 -64 ) ( -49 -176 -64 ) ( -48 -176 -63 ) FirstSecond/WallOfficeSecond_1 [ 1 0 0 352 ] [ 0 0 -1 -192 ] 0 0.25 0.25
|
||||
( -48 16 -64 ) ( -48 17 -64 ) ( -49 16 -64 ) FirstSecond/WallOfficeSecond_1 [ 0 -1 0 288 ] [ 1 0 0 -192 ] 0 0.25 0.25
|
||||
( -304 272 80 ) ( -305 272 80 ) ( -304 273 80 ) FirstSecond/WallOfficeSecond_1 [ 0 1 0 -288 ] [ 1 0 0 -192 ] 0 0.25 0.25
|
||||
( -304 288 64 ) ( -304 288 65 ) ( -305 288 64 ) FirstSecond/WallOfficeSecond_1 [ -1 0 0 -352 ] [ 0 0 -1 -192 ] 180 0.25 0.25
|
||||
( -768 272 64 ) ( -768 272 65 ) ( -768 273 64 ) FirstSecond/WallOfficeSecond_1 [ 0 -1 0 288 ] [ 0 0 -1 -192 ] 0 0.25 0.25
|
||||
( -784.00 272.00 64.00 ) ( -784.00 273.00 64.00 ) ( -784.00 272.00 65.00 ) FirstSecond/WallOfficeSecond_1 [ 0.00000 -1.00000 0.00000 288.00000 ] [ 0.00000 0.00000 -1.00000 -192.00000 ] 90.00 0.25 0.25
|
||||
( -48.00 -176.00 -64.00 ) ( -49.00 -176.00 -64.00 ) ( -48.00 -176.00 -63.00 ) FirstSecond/WallOfficeSecond_1 [ 1.00000 0.00000 0.00000 352.00000 ] [ 0.00000 0.00000 -1.00000 -192.00000 ] 0.00 0.25 0.25
|
||||
( -48.00 16.00 -64.00 ) ( -48.00 17.00 -64.00 ) ( -49.00 16.00 -64.00 ) FirstSecond/WallOfficeSecond_1 [ 0.00000 -1.00000 0.00000 288.00000 ] [ 1.00000 0.00000 0.00000 -192.00000 ] 0.00 0.25 0.25
|
||||
( -304.00 272.00 80.00 ) ( -305.00 272.00 80.00 ) ( -304.00 273.00 80.00 ) FirstSecond/WallOfficeSecond_1 [ 0.00000 1.00000 0.00000 -288.00000 ] [ 1.00000 0.00000 0.00000 -192.00000 ] 0.00 0.25 0.25
|
||||
( -304.00 288.00 64.00 ) ( -304.00 288.00 65.00 ) ( -305.00 288.00 64.00 ) FirstSecond/WallOfficeSecond_1 [ -1.00000 0.00000 0.00000 -352.00000 ] [ 0.00000 0.00000 -1.00000 -192.00000 ] 180.00 0.25 0.25
|
||||
( -768.00 272.00 64.00 ) ( -768.00 272.00 65.00 ) ( -768.00 273.00 64.00 ) FirstSecond/WallOfficeSecond_1 [ 0.00000 -1.00000 0.00000 288.00000 ] [ 0.00000 0.00000 -1.00000 -192.00000 ] 0.00 0.25 0.25
|
||||
}
|
||||
// brush 2
|
||||
{
|
||||
( 432 288 96 ) ( 432 -64 96 ) ( 432 288 -64 ) FirstSecond/WallOfficeSecond_1 [ 0 -1 0 288 ] [ 0 0 -1 -192 ] 270 0.25 0.25
|
||||
( 448 -64 -64 ) ( 432 -64 -64 ) ( 448 -64 96 ) FirstSecond/WallOfficeSecond_1 [ -1 0 0 0 ] [ 0 0 -1 -192 ] 0 0.25 0.25
|
||||
( 432 288 -64 ) ( 432 -64 -64 ) ( 448 288 -64 ) FirstSecond/WallOfficeSecond_1 [ 0 -1 0 288 ] [ 1 0 0 -192 ] 180 0.25 0.25
|
||||
( 448 288 80 ) ( 448 -64 80 ) ( 432 288 80 ) FirstSecond/WallOfficeSecond_1 [ 0 1 0 -288 ] [ 1 0 0 -192 ] 180 0.25 0.25
|
||||
( 432 288 -64 ) ( 448 288 -64 ) ( 432 288 96 ) FirstSecond/WallOfficeSecond_1 [ -1 0 0 32 ] [ 0 0 -1 -192 ] 0 0.25 0.25
|
||||
( 440 288 -64 ) ( 440 -64 -64 ) ( 440 288 96 ) FirstSecond/WallOfficeSecond_1 [ 0 -1 0 288 ] [ 0 0 -1 -192 ] 270 0.25 0.25
|
||||
( 432.00 288.00 96.00 ) ( 432.00 -64.00 96.00 ) ( 432.00 288.00 -64.00 ) FirstSecond/WallOfficeSecond_1 [ 0.00000 -1.00000 0.00000 288.00000 ] [ 0.00000 0.00000 -1.00000 -192.00000 ] 270.00 0.25 0.25
|
||||
( 448.00 -64.00 -64.00 ) ( 432.00 -64.00 -64.00 ) ( 448.00 -64.00 96.00 ) FirstSecond/WallOfficeSecond_1 [ -1.00000 0.00000 0.00000 0.00000 ] [ 0.00000 0.00000 -1.00000 -192.00000 ] 0.00 0.25 0.25
|
||||
( 432.00 288.00 -64.00 ) ( 432.00 -64.00 -64.00 ) ( 448.00 288.00 -64.00 ) FirstSecond/WallOfficeSecond_1 [ 0.00000 -1.00000 0.00000 288.00000 ] [ 1.00000 0.00000 0.00000 -192.00000 ] 180.00 0.25 0.25
|
||||
( 448.00 288.00 80.00 ) ( 448.00 -64.00 80.00 ) ( 432.00 288.00 80.00 ) FirstSecond/WallOfficeSecond_1 [ 0.00000 1.00000 0.00000 -288.00000 ] [ 1.00000 0.00000 0.00000 -192.00000 ] 180.00 0.25 0.25
|
||||
( 432.00 288.00 -64.00 ) ( 448.00 288.00 -64.00 ) ( 432.00 288.00 96.00 ) FirstSecond/WallOfficeSecond_1 [ -1.00000 0.00000 0.00000 32.00000 ] [ 0.00000 0.00000 -1.00000 -192.00000 ] 0.00 0.25 0.25
|
||||
( 440.00 288.00 -64.00 ) ( 440.00 -64.00 -64.00 ) ( 440.00 288.00 96.00 ) FirstSecond/WallOfficeSecond_1 [ 0.00000 -1.00000 0.00000 288.00000 ] [ 0.00000 0.00000 -1.00000 -192.00000 ] 270.00 0.25 0.25
|
||||
}
|
||||
// brush 3
|
||||
{
|
||||
( 432 -272 -64 ) ( 432 -128 -64 ) ( 432 -272 96 ) FirstSecond/WallOfficeSecond_1 [ 0 -1 0 288 ] [ 0 0 -1 -192 ] 270 0.25 0.25
|
||||
( 432 -176 96 ) ( 448 -176 96 ) ( 432 -176 -64 ) FirstSecond/WallOfficeSecond_1 [ 1 0 0 -32 ] [ 0 0 -1 -192 ] 180 0.25 0.25
|
||||
( 448 -272 -64 ) ( 448 -128 -64 ) ( 432 -272 -64 ) FirstSecond/WallOfficeSecond_1 [ 0 -1 0 288 ] [ 1 0 0 -192 ] 180 0.25 0.25
|
||||
( 432 -272 80 ) ( 432 -128 80 ) ( 448 -272 80 ) FirstSecond/WallOfficeSecond_1 [ 0 1 0 -288 ] [ 1 0 0 -192 ] 180 0.25 0.25
|
||||
( 432 -128 96 ) ( 432 -128 -64 ) ( 448 -128 96 ) FirstSecond/WallOfficeSecond_1 [ 1 0 0 0 ] [ 0 0 -1 -192 ] 0 0.25 0.25
|
||||
( 440 -272 96 ) ( 440 -128 96 ) ( 440 -272 -64 ) FirstSecond/WallOfficeSecond_1 [ 0 -1 0 288 ] [ 0 0 -1 -192 ] 270 0.25 0.25
|
||||
( 432.00 -272.00 -64.00 ) ( 432.00 -128.00 -64.00 ) ( 432.00 -272.00 96.00 ) FirstSecond/WallOfficeSecond_1 [ 0.00000 -1.00000 0.00000 288.00000 ] [ 0.00000 0.00000 -1.00000 -192.00000 ] 270.00 0.25 0.25
|
||||
( 432.00 -176.00 96.00 ) ( 448.00 -176.00 96.00 ) ( 432.00 -176.00 -64.00 ) FirstSecond/WallOfficeSecond_1 [ 1.00000 0.00000 0.00000 -32.00000 ] [ 0.00000 0.00000 -1.00000 -192.00000 ] 180.00 0.25 0.25
|
||||
( 448.00 -272.00 -64.00 ) ( 448.00 -128.00 -64.00 ) ( 432.00 -272.00 -64.00 ) FirstSecond/WallOfficeSecond_1 [ 0.00000 -1.00000 0.00000 288.00000 ] [ 1.00000 0.00000 0.00000 -192.00000 ] 180.00 0.25 0.25
|
||||
( 432.00 -272.00 80.00 ) ( 432.00 -128.00 80.00 ) ( 448.00 -272.00 80.00 ) FirstSecond/WallOfficeSecond_1 [ 0.00000 1.00000 0.00000 -288.00000 ] [ 1.00000 0.00000 0.00000 -192.00000 ] 180.00 0.25 0.25
|
||||
( 432.00 -128.00 96.00 ) ( 432.00 -128.00 -64.00 ) ( 448.00 -128.00 96.00 ) FirstSecond/WallOfficeSecond_1 [ 1.00000 0.00000 0.00000 0.00000 ] [ 0.00000 0.00000 -1.00000 -192.00000 ] 0.00 0.25 0.25
|
||||
( 440.00 -272.00 96.00 ) ( 440.00 -128.00 96.00 ) ( 440.00 -272.00 -64.00 ) FirstSecond/WallOfficeSecond_1 [ 0.00000 -1.00000 0.00000 288.00000 ] [ 0.00000 0.00000 -1.00000 -192.00000 ] 270.00 0.25 0.25
|
||||
}
|
||||
// brush 4
|
||||
{
|
||||
( 432 -128 80 ) ( 432 -128 64 ) ( 432 -64 80 ) FirstSecond/WallOfficeSecond_1 [ 0 -1 0 288 ] [ 0 0 -1 -192 ] 90 0.25 0.25
|
||||
( 448 -128 80 ) ( 448 -128 64 ) ( 432 -128 80 ) FirstSecond/WallOfficeSecond_1 [ 1 0 0 0 ] [ 0 0 -1 -192 ] 180 0.25 0.25
|
||||
( 432 -64 64 ) ( 432 -128 64 ) ( 448 -64 64 ) FirstSecond/WallOfficeSecond_1 [ 1 0 0 0 ] [ 0 -1 0 -192 ] 90 0.25 0.25
|
||||
( 448 -64 80 ) ( 448 -128 80 ) ( 432 -64 80 ) FirstSecond/WallOfficeSecond_1 [ 0 1 0 -288 ] [ 1 0 0 -192 ] 0 0.25 0.25
|
||||
( 432 -64 80 ) ( 432 -64 64 ) ( 448 -64 80 ) FirstSecond/WallOfficeSecond_1 [ -1 0 0 0 ] [ 0 0 -1 -192 ] 180 0.25 0.25
|
||||
( 440 -64 80 ) ( 440 -64 64 ) ( 440 -128 80 ) FirstSecond/WallOfficeSecond_1 [ 0 -1 0 288 ] [ 0 0 -1 -192 ] 90 0.25 0.25
|
||||
( 432.00 -128.00 80.00 ) ( 432.00 -128.00 64.00 ) ( 432.00 -64.00 80.00 ) FirstSecond/WallOfficeSecond_1 [ 0.00000 -1.00000 0.00000 288.00000 ] [ 0.00000 0.00000 -1.00000 -192.00000 ] 90.00 0.25 0.25
|
||||
( 448.00 -128.00 80.00 ) ( 448.00 -128.00 64.00 ) ( 432.00 -128.00 80.00 ) FirstSecond/WallOfficeSecond_1 [ 1.00000 0.00000 0.00000 0.00000 ] [ 0.00000 0.00000 -1.00000 -192.00000 ] 180.00 0.25 0.25
|
||||
( 432.00 -64.00 64.00 ) ( 432.00 -128.00 64.00 ) ( 448.00 -64.00 64.00 ) FirstSecond/WallOfficeSecond_1 [ 1.00000 0.00000 0.00000 0.00000 ] [ 0.00000 -1.00000 0.00000 -192.00000 ] 90.00 0.25 0.25
|
||||
( 448.00 -64.00 80.00 ) ( 448.00 -128.00 80.00 ) ( 432.00 -64.00 80.00 ) FirstSecond/WallOfficeSecond_1 [ 0.00000 1.00000 0.00000 -288.00000 ] [ 1.00000 0.00000 0.00000 -192.00000 ] 0.00 0.25 0.25
|
||||
( 432.00 -64.00 80.00 ) ( 432.00 -64.00 64.00 ) ( 448.00 -64.00 80.00 ) FirstSecond/WallOfficeSecond_1 [ -1.00000 0.00000 0.00000 0.00000 ] [ 0.00000 0.00000 -1.00000 -192.00000 ] 180.00 0.25 0.25
|
||||
( 440.00 -64.00 80.00 ) ( 440.00 -64.00 64.00 ) ( 440.00 -128.00 80.00 ) FirstSecond/WallOfficeSecond_1 [ 0.00000 -1.00000 0.00000 288.00000 ] [ 0.00000 0.00000 -1.00000 -192.00000 ] 90.00 0.25 0.25
|
||||
}
|
||||
// brush 5
|
||||
{
|
||||
( -768 272 64 ) ( -768 273 64 ) ( -768 272 65 ) FirstSecond/FloorOfficeSecond_4 [ 0 0 1 0 ] [ 0 -1 0 0 ] 90 0.25 0.25
|
||||
( -48 -176 -64 ) ( -49 -176 -64 ) ( -48 -176 -63 ) FirstSecond/FloorOfficeSecond_4 [ 1 0 0 0 ] [ 0 0 -1 0 ] 90 0.25 0.25
|
||||
( -48 16 -64 ) ( -48 17 -64 ) ( -49 16 -64 ) FirstSecond/FloorOfficeSecond_4 [ 1 0 0 0 ] [ 0 1 0 0 ] 90 0.25 0.25
|
||||
( -304 272 -48 ) ( -305 272 -48 ) ( -304 273 -48 ) FirstSecond/FloorOfficeSecond_4 [ 0 1 0 0 ] [ 1 0 0 0 ] 90 0.25 0.25
|
||||
( -304 288 64 ) ( -304 288 65 ) ( -305 288 64 ) FirstSecond/FloorOfficeSecond_4 [ 0 0 1 0 ] [ -1 0 0 0 ] 90 0.25 0.25
|
||||
( 432 16 -64 ) ( 432 16 -63 ) ( 432 17 -64 ) FirstSecond/FloorOfficeSecond_4 [ 0 0 1 0 ] [ 0 1 0 0 ] 90 0.25 0.25
|
||||
( -768.00 272.00 64.00 ) ( -768.00 273.00 64.00 ) ( -768.00 272.00 65.00 ) FirstSecond/FloorOfficeSecond_4 [ 0.00000 0.00000 1.00000 0.00000 ] [ 0.00000 -1.00000 0.00000 0.00000 ] 90.00 0.25 0.25
|
||||
( -48.00 -176.00 -64.00 ) ( -49.00 -176.00 -64.00 ) ( -48.00 -176.00 -63.00 ) FirstSecond/FloorOfficeSecond_4 [ 1.00000 0.00000 0.00000 0.00000 ] [ 0.00000 0.00000 -1.00000 0.00000 ] 90.00 0.25 0.25
|
||||
( -48.00 16.00 -64.00 ) ( -48.00 17.00 -64.00 ) ( -49.00 16.00 -64.00 ) FirstSecond/FloorOfficeSecond_4 [ 1.00000 0.00000 0.00000 0.00000 ] [ 0.00000 1.00000 0.00000 0.00000 ] 90.00 0.25 0.25
|
||||
( -304.00 272.00 -48.00 ) ( -305.00 272.00 -48.00 ) ( -304.00 273.00 -48.00 ) FirstSecond/FloorOfficeSecond_4 [ 0.00000 1.00000 0.00000 0.00000 ] [ 1.00000 0.00000 0.00000 0.00000 ] 90.00 0.25 0.25
|
||||
( -304.00 288.00 64.00 ) ( -304.00 288.00 65.00 ) ( -305.00 288.00 64.00 ) FirstSecond/FloorOfficeSecond_4 [ 0.00000 0.00000 1.00000 0.00000 ] [ -1.00000 0.00000 0.00000 0.00000 ] 90.00 0.25 0.25
|
||||
( 432.00 16.00 -64.00 ) ( 432.00 16.00 -63.00 ) ( 432.00 17.00 -64.00 ) FirstSecond/FloorOfficeSecond_4 [ 0.00000 0.00000 1.00000 0.00000 ] [ 0.00000 1.00000 0.00000 0.00000 ] 90.00 0.25 0.25
|
||||
}
|
||||
// brush 6
|
||||
{
|
||||
( -784 -272 -64 ) ( -784 -128 -64 ) ( -784 -272 96 ) FirstSecond/WallOfficeSecond_1 [ 0 -1 0 288 ] [ 0 0 -1 -192 ] 180 0.25 0.25
|
||||
( 432 -192 96 ) ( 448 -192 96 ) ( 432 -192 -64 ) FirstSecond/WallOfficeSecond_1 [ 1 0 0 -32 ] [ 0 0 -1 -192 ] 90 0.25 0.25
|
||||
( 448 -272 -64 ) ( 448 -128 -64 ) ( 432 -272 -64 ) FirstSecond/WallOfficeSecond_1 [ 0 -1 0 288 ] [ 1 0 0 -192 ] 180 0.25 0.25
|
||||
( 432 -272 80 ) ( 432 -128 80 ) ( 448 -272 80 ) FirstSecond/WallOfficeSecond_1 [ 0 1 0 -288 ] [ 1 0 0 -192 ] 180 0.25 0.25
|
||||
( 432 -176 96 ) ( 432 -176 -64 ) ( 448 -176 96 ) FirstSecond/WallOfficeSecond_1 [ 1 0 0 -32 ] [ 0 0 -1 -192 ] 180 0.25 0.25
|
||||
( 440 -272 96 ) ( 440 -128 96 ) ( 440 -272 -64 ) FirstSecond/WallOfficeSecond_1 [ 0 -1 0 288 ] [ 0 0 -1 -192 ] 270 0.25 0.25
|
||||
( -784.00 -272.00 -64.00 ) ( -784.00 -128.00 -64.00 ) ( -784.00 -272.00 96.00 ) FirstSecond/WallOfficeSecond_1 [ 0.00000 -1.00000 0.00000 288.00000 ] [ 0.00000 0.00000 -1.00000 -192.00000 ] 180.00 0.25 0.25
|
||||
( 432.00 -192.00 96.00 ) ( 448.00 -192.00 96.00 ) ( 432.00 -192.00 -64.00 ) FirstSecond/WallOfficeSecond_1 [ 1.00000 0.00000 0.00000 -32.00000 ] [ 0.00000 0.00000 -1.00000 -192.00000 ] 90.00 0.25 0.25
|
||||
( 448.00 -272.00 -64.00 ) ( 448.00 -128.00 -64.00 ) ( 432.00 -272.00 -64.00 ) FirstSecond/WallOfficeSecond_1 [ 0.00000 -1.00000 0.00000 288.00000 ] [ 1.00000 0.00000 0.00000 -192.00000 ] 180.00 0.25 0.25
|
||||
( 432.00 -272.00 80.00 ) ( 432.00 -128.00 80.00 ) ( 448.00 -272.00 80.00 ) FirstSecond/WallOfficeSecond_1 [ 0.00000 1.00000 0.00000 -288.00000 ] [ 1.00000 0.00000 0.00000 -192.00000 ] 180.00 0.25 0.25
|
||||
( 432.00 -176.00 96.00 ) ( 432.00 -176.00 -64.00 ) ( 448.00 -176.00 96.00 ) FirstSecond/WallOfficeSecond_1 [ 1.00000 0.00000 0.00000 -32.00000 ] [ 0.00000 0.00000 -1.00000 -192.00000 ] 180.00 0.25 0.25
|
||||
( 440.00 -272.00 96.00 ) ( 440.00 -128.00 96.00 ) ( 440.00 -272.00 -64.00 ) FirstSecond/WallOfficeSecond_1 [ 0.00000 -1.00000 0.00000 288.00000 ] [ 0.00000 0.00000 -1.00000 -192.00000 ] 270.00 0.25 0.25
|
||||
}
|
||||
// brush 7
|
||||
{
|
||||
( -784 -272 -64 ) ( -784 -128 -64 ) ( -784 -272 96 ) FirstSecond/FloorOfficeSecond_3 [ 0 -1 0 288 ] [ 0 0 -1 -192 ] 180 0.25 0.25
|
||||
( 432 -192 96 ) ( 448 -192 96 ) ( 432 -192 -64 ) FirstSecond/FloorOfficeSecond_3 [ 1 0 0 -32 ] [ 0 0 -1 -192 ] 90 0.25 0.25
|
||||
( 432 -272 80 ) ( 448 -272 80 ) ( 432 -128 80 ) FirstSecond/FloorOfficeSecond_3 [ 0 1 0 -288 ] [ 1 0 0 -192 ] 180 0.25 0.25
|
||||
( 432 -272 96 ) ( 432 -128 96 ) ( 448 -272 96 ) FirstSecond/FloorOfficeSecond_3 [ 0 1 0 -288 ] [ 1 0 0 -192 ] 90 0.25 0.25
|
||||
( 432 304 96 ) ( 432 304 -64 ) ( 448 304 96 ) FirstSecond/FloorOfficeSecond_3 [ 1 0 0 -32 ] [ 0 0 -1 -192 ] 270 0.25 0.25
|
||||
( 440 -272 96 ) ( 440 -128 96 ) ( 440 -272 -64 ) FirstSecond/FloorOfficeSecond_3 [ 0 -1 0 288 ] [ 0 0 -1 -192 ] 270 0.25 0.25
|
||||
( -784.00 -272.00 -64.00 ) ( -784.00 -128.00 -64.00 ) ( -784.00 -272.00 96.00 ) FirstSecond/FloorOfficeSecond_3 [ 0.00000 -1.00000 0.00000 288.00000 ] [ 0.00000 0.00000 -1.00000 -192.00000 ] 180.00 0.25 0.25
|
||||
( 432.00 -192.00 96.00 ) ( 448.00 -192.00 96.00 ) ( 432.00 -192.00 -64.00 ) FirstSecond/FloorOfficeSecond_3 [ 1.00000 0.00000 0.00000 -32.00000 ] [ 0.00000 0.00000 -1.00000 -192.00000 ] 90.00 0.25 0.25
|
||||
( 432.00 -272.00 80.00 ) ( 448.00 -272.00 80.00 ) ( 432.00 -128.00 80.00 ) FirstSecond/FloorOfficeSecond_3 [ 0.00000 1.00000 0.00000 -288.00000 ] [ 1.00000 0.00000 0.00000 -192.00000 ] 180.00 0.25 0.25
|
||||
( 432.00 -272.00 96.00 ) ( 432.00 -128.00 96.00 ) ( 448.00 -272.00 96.00 ) FirstSecond/FloorOfficeSecond_3 [ 0.00000 1.00000 0.00000 -288.00000 ] [ 1.00000 0.00000 0.00000 -192.00000 ] 90.00 0.25 0.25
|
||||
( 432.00 304.00 96.00 ) ( 432.00 304.00 -64.00 ) ( 448.00 304.00 96.00 ) FirstSecond/FloorOfficeSecond_3 [ 1.00000 0.00000 0.00000 -32.00000 ] [ 0.00000 0.00000 -1.00000 -192.00000 ] 270.00 0.25 0.25
|
||||
( 440.00 -272.00 96.00 ) ( 440.00 -128.00 96.00 ) ( 440.00 -272.00 -64.00 ) FirstSecond/FloorOfficeSecond_3 [ 0.00000 -1.00000 0.00000 288.00000 ] [ 0.00000 0.00000 -1.00000 -192.00000 ] 270.00 0.25 0.25
|
||||
}
|
||||
// brush 8
|
||||
{
|
||||
( 440 -64 80 ) ( 440 -128 80 ) ( 440 -64 64 ) FirstSecond/WallOfficeSecond_1 [ 0 -1 0 288 ] [ 0 0 -1 -192 ] 90 0.25 0.25
|
||||
( 448 -144 80 ) ( 448 -144 64 ) ( 432 -144 80 ) FirstSecond/WallOfficeSecond_1 [ 1 0 0 0 ] [ 0 0 -1 -192 ] 90 0.25 0.25
|
||||
( 432 -64 -64 ) ( 432 -128 -64 ) ( 448 -64 -64 ) FirstSecond/WallOfficeSecond_1 [ 1 0 0 0 ] [ 0 -1 0 -192 ] 180 0.25 0.25
|
||||
( 448 -64 96 ) ( 448 -128 96 ) ( 432 -64 96 ) FirstSecond/WallOfficeSecond_1 [ 0 1 0 -288 ] [ 1 0 0 -192 ] 270 0.25 0.25
|
||||
( 432 -48 80 ) ( 432 -48 64 ) ( 448 -48 80 ) FirstSecond/WallOfficeSecond_1 [ -1 0 0 0 ] [ 0 0 -1 -192 ] 90 0.25 0.25
|
||||
( 448 -64 80 ) ( 448 -64 64 ) ( 448 -128 80 ) FirstSecond/WallOfficeSecond_1 [ 0 -1 0 288 ] [ 0 0 -1 -192 ] 180 0.25 0.25
|
||||
( 440.00 -64.00 80.00 ) ( 440.00 -128.00 80.00 ) ( 440.00 -64.00 64.00 ) FirstSecond/WallOfficeSecond_1 [ 0.00000 -1.00000 0.00000 288.00000 ] [ 0.00000 0.00000 -1.00000 -192.00000 ] 90.00 0.25 0.25
|
||||
( 448.00 -144.00 80.00 ) ( 448.00 -144.00 64.00 ) ( 432.00 -144.00 80.00 ) FirstSecond/WallOfficeSecond_1 [ 1.00000 0.00000 0.00000 0.00000 ] [ 0.00000 0.00000 -1.00000 -192.00000 ] 90.00 0.25 0.25
|
||||
( 432.00 -64.00 -64.00 ) ( 432.00 -128.00 -64.00 ) ( 448.00 -64.00 -64.00 ) FirstSecond/WallOfficeSecond_1 [ 1.00000 0.00000 0.00000 0.00000 ] [ 0.00000 -1.00000 0.00000 -192.00000 ] 180.00 0.25 0.25
|
||||
( 448.00 -64.00 96.00 ) ( 448.00 -128.00 96.00 ) ( 432.00 -64.00 96.00 ) FirstSecond/WallOfficeSecond_1 [ 0.00000 1.00000 0.00000 -288.00000 ] [ 1.00000 0.00000 0.00000 -192.00000 ] 270.00 0.25 0.25
|
||||
( 432.00 -48.00 80.00 ) ( 432.00 -48.00 64.00 ) ( 448.00 -48.00 80.00 ) FirstSecond/WallOfficeSecond_1 [ -1.00000 0.00000 0.00000 0.00000 ] [ 0.00000 0.00000 -1.00000 -192.00000 ] 90.00 0.25 0.25
|
||||
( 448.00 -64.00 80.00 ) ( 448.00 -64.00 64.00 ) ( 448.00 -128.00 80.00 ) FirstSecond/WallOfficeSecond_1 [ 0.00000 -1.00000 0.00000 288.00000 ] [ 0.00000 0.00000 -1.00000 -192.00000 ] 180.00 0.25 0.25
|
||||
}
|
||||
// brush 9
|
||||
{
|
||||
( 432 16 -64 ) ( 432 17 -64 ) ( 432 16 -63 ) FirstSecond/FloorOfficeSecond_4 [ 0 0 1 0 ] [ 0 1 0 0 ] 90 0.25 0.25
|
||||
( -48 -144 -64 ) ( -49 -144 -64 ) ( -48 -144 -63 ) FirstSecond/FloorOfficeSecond_4 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 0.25 0.25
|
||||
( -48 16 -64 ) ( -48 17 -64 ) ( -49 16 -64 ) FirstSecond/FloorOfficeSecond_4 [ 1 0 0 0 ] [ 0 1 0 0 ] 90 0.25 0.25
|
||||
( -304 272 -48 ) ( -305 272 -48 ) ( -304 273 -48 ) FirstSecond/FloorOfficeSecond_4 [ 0 1 0 0 ] [ 1 0 0 0 ] 90 0.25 0.25
|
||||
( -304 -48 64 ) ( -304 -48 65 ) ( -305 -48 64 ) FirstSecond/FloorOfficeSecond_4 [ 0 0 1 0 ] [ -1 0 0 0 ] 270 0.25 0.25
|
||||
( 448 16 -64 ) ( 448 16 -63 ) ( 448 17 -64 ) FirstSecond/FloorOfficeSecond_4 [ 0 0 1 0 ] [ 0 1 0 0 ] 0 0.25 0.25
|
||||
( 432.00 16.00 -64.00 ) ( 432.00 17.00 -64.00 ) ( 432.00 16.00 -63.00 ) FirstSecond/FloorOfficeSecond_4 [ 0.00000 0.00000 1.00000 0.00000 ] [ 0.00000 1.00000 0.00000 0.00000 ] 90.00 0.25 0.25
|
||||
( -48.00 -144.00 -64.00 ) ( -49.00 -144.00 -64.00 ) ( -48.00 -144.00 -63.00 ) FirstSecond/FloorOfficeSecond_4 [ 1.00000 0.00000 0.00000 0.00000 ] [ 0.00000 0.00000 -1.00000 0.00000 ] 0.00 0.25 0.25
|
||||
( -48.00 16.00 -64.00 ) ( -48.00 17.00 -64.00 ) ( -49.00 16.00 -64.00 ) FirstSecond/FloorOfficeSecond_4 [ 1.00000 0.00000 0.00000 0.00000 ] [ 0.00000 1.00000 0.00000 0.00000 ] 90.00 0.25 0.25
|
||||
( -304.00 272.00 -48.00 ) ( -305.00 272.00 -48.00 ) ( -304.00 273.00 -48.00 ) FirstSecond/FloorOfficeSecond_4 [ 0.00000 1.00000 0.00000 0.00000 ] [ 1.00000 0.00000 0.00000 0.00000 ] 90.00 0.25 0.25
|
||||
( -304.00 -48.00 64.00 ) ( -304.00 -48.00 65.00 ) ( -305.00 -48.00 64.00 ) FirstSecond/FloorOfficeSecond_4 [ 0.00000 0.00000 1.00000 0.00000 ] [ -1.00000 0.00000 0.00000 0.00000 ] 270.00 0.25 0.25
|
||||
( 448.00 16.00 -64.00 ) ( 448.00 16.00 -63.00 ) ( 448.00 17.00 -64.00 ) FirstSecond/FloorOfficeSecond_4 [ 0.00000 0.00000 1.00000 0.00000 ] [ 0.00000 1.00000 0.00000 0.00000 ] 0.00 0.25 0.25
|
||||
}
|
||||
}
|
||||
// entity 1
|
||||
@@ -127,11 +126,11 @@
|
||||
"_tb_layer" "2"
|
||||
// brush 0
|
||||
{
|
||||
( -768 0 -48 ) ( -768 1 -48 ) ( -768 0 -47 ) __TB_empty [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( -768 -176 -48 ) ( -768 -176 -47 ) ( -767 -176 -48 ) __TB_empty [ 1 0 0 0 ] [ 0 0 -1 0 ] 270 1 1
|
||||
( -768 0 -48 ) ( -767 0 -48 ) ( -768 1 -48 ) __TB_empty [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
|
||||
( 272 288 -16 ) ( 272 289 -16 ) ( 273 288 -16 ) __TB_empty [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
|
||||
( 272 288 -32 ) ( 273 288 -32 ) ( 272 288 -31 ) __TB_empty [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 432 288 -32 ) ( 432 288 -31 ) ( 432 289 -32 ) __TB_empty [ 0 1 0 0 ] [ 0 0 -1 0 ] 270 1 1
|
||||
( -768.00 0.00 -48.00 ) ( -768.00 1.00 -48.00 ) ( -768.00 0.00 -47.00 ) __TB_empty [ 0.00000 -1.00000 0.00000 0.00000 ] [ 0.00000 0.00000 -1.00000 0.00000 ] 0.00 1.00 1.00
|
||||
( -768.00 -176.00 -48.00 ) ( -768.00 -176.00 -47.00 ) ( -767.00 -176.00 -48.00 ) __TB_empty [ 1.00000 0.00000 0.00000 0.00000 ] [ 0.00000 0.00000 -1.00000 0.00000 ] 270.00 1.00 1.00
|
||||
( -768.00 0.00 -48.00 ) ( -767.00 0.00 -48.00 ) ( -768.00 1.00 -48.00 ) __TB_empty [ -1.00000 0.00000 0.00000 0.00000 ] [ 0.00000 -1.00000 0.00000 0.00000 ] 0.00 1.00 1.00
|
||||
( 272.00 288.00 -16.00 ) ( 272.00 289.00 -16.00 ) ( 273.00 288.00 -16.00 ) __TB_empty [ 1.00000 0.00000 0.00000 0.00000 ] [ 0.00000 -1.00000 0.00000 0.00000 ] 0.00 1.00 1.00
|
||||
( 272.00 288.00 -32.00 ) ( 273.00 288.00 -32.00 ) ( 272.00 288.00 -31.00 ) __TB_empty [ -1.00000 0.00000 0.00000 0.00000 ] [ 0.00000 0.00000 -1.00000 0.00000 ] 0.00 1.00 1.00
|
||||
( 432.00 288.00 -32.00 ) ( 432.00 288.00 -31.00 ) ( 432.00 289.00 -32.00 ) __TB_empty [ 0.00000 1.00000 0.00000 0.00000 ] [ 0.00000 0.00000 -1.00000 0.00000 ] 270.00 1.00 1.00
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user