/// <summary> /// Проверить, что перемещение выбранного узла дерева вверх возможно /// </summary> public static bool MoveUpSelectedNodeIsEnabled(this TreeView treeView, MoveBehavior moveBehavior) { TreeNode selectedNode = treeView.SelectedNode; if (selectedNode == null) { return(false); } else if (selectedNode.PrevNode == null) { if (moveBehavior == MoveBehavior.ThroughSimilarParents) { TreeNode parentNode = selectedNode.Parent; TreeNode prevParentNode = parentNode == null ? null : parentNode.PrevNode; return(parentNode != null && prevParentNode != null && parentNode.Tag is ITreeNode && prevParentNode.Tag is ITreeNode && parentNode.Tag.GetType() == prevParentNode.Tag.GetType()); } else { return(false); } } else { return(true); } }
/// <summary> /// Check that moving the selected tree node upwards is possible /// </summary> public static bool MoveUpSelectedNodeIsEnabled(this TreeView treeView, MoveBehavior moveBehavior) { var selectedNode = treeView.SelectedNode; if (selectedNode == null) { return(false); } if (selectedNode.PrevNode == null) { if (moveBehavior == MoveBehavior.ThroughSimilarParents) { var parentNode = selectedNode.Parent; var prevParentNode = parentNode?.PrevNode; return(parentNode != null && prevParentNode != null && (parentNode.Tag is ITreeNode && prevParentNode.Tag is ITreeNode && parentNode.Tag.GetType() == prevParentNode.Tag.GetType() || parentNode.Tag is TreeNodeTag tag1 && prevParentNode.Tag is TreeNodeTag tag2 && tag1.NodeType == tag2.NodeType)); } return(false); } return(true); }
/// <summary> /// Проверить, что перемещение выбранного узла дерева вниз возможно /// </summary> public static bool MoveDownSelectedNodeIsEnabled(this TreeView treeView, MoveBehavior moveBehavior) { TreeNode selectedNode = treeView.SelectedNode; if (selectedNode == null) { return(false); } else if (selectedNode.NextNode == null) { if (moveBehavior == MoveBehavior.ThroughSimilarParents) { TreeNode parentNode = selectedNode.Parent; TreeNode nextParentNode = parentNode?.NextNode; return(parentNode != null && nextParentNode != null && (parentNode.Tag is ITreeNode && nextParentNode.Tag is ITreeNode && parentNode.Tag.GetType() == nextParentNode.Tag.GetType() || parentNode.Tag is TreeNodeTag tag1 && nextParentNode.Tag is TreeNodeTag tag2 && tag1.NodeType == tag2.NodeType)); } else { return(false); } } else { return(true); } }
void Start() { m_rigidbody = GetComponent <Rigidbody>(); m_movement = GetComponent <MoveBehavior>(); m_movement.SetRigidBody(m_rigidbody); m_rigidbody.drag = maxForce / maxSpeed; }
// Update is called once per frame void Update() { if (Input.GetKey(KeyCode.DownArrow) || Input.GetKey(KeyCode.S)) { MoveBehavior.Down(); } if (Input.GetKey(KeyCode.UpArrow) || Input.GetKey(KeyCode.W)) { MoveBehavior.Up(); } if (Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.A)) { MoveBehavior.Left(); } if (Input.GetKey(KeyCode.RightArrow) || Input.GetKey(KeyCode.D)) { MoveBehavior.Right(); } if (Input.GetKeyDown(KeyCode.Q)) { MoveBehavior.RotateClockwise(); } if (Input.GetKeyDown(KeyCode.E)) { MoveBehavior.RotateCounterClockwise(); } if (Input.GetKey(KeyCode.R)) { //gameObject.GetComponent<CreateObject>().CreatePUNObject("Rooms/Room2/Room2"); string prefabName = "Rooms/Room2/Room2"; //objManager.Instantiate(prefabName); objManager.InstantiateOwnedObject(prefabName); } if (Input.GetKey(KeyCode.P)) { GameObject go = GameObject.Find("Sphere"); UWBNetworkingPackage.NetworkManager nm = GameObject.Find("NetworkManager").GetComponent <UWBNetworkingPackage.NetworkManager>(); nm.UnRestrictOwnership(go); } if (Input.GetKey(KeyCode.O)) { List <int> IDsToAdd = new List <int>(); IDsToAdd.Add(2); UWBNetworkingPackage.NetworkManager nm = GameObject.Find("NetworkManager").GetComponent <UWBNetworkingPackage.NetworkManager>(); GameObject go = GameObject.Find("Sphere"); nm.WhiteListOwnership(go, IDsToAdd); } }
/// <summary> /// Переместить выбранный узел дерева и элемент соответствующего списка вниз по дереву /// </summary> public static void MoveDownSelectedNode(this TreeView treeView, MoveBehavior moveBehavior) { TreeNode selectedNode = treeView.SelectedNode; ITreeNode selectedObj = selectedNode == null ? null : selectedNode.Tag as ITreeNode; if (selectedObj != null) { try { treeView.BeginUpdate(); TreeNodeCollection nodes = treeView.GetChildNodes(selectedNode.Parent); IList list = selectedObj.Parent.Children; int index = selectedNode.Index; int newIndex = index + 1; if (newIndex < nodes.Count) { nodes.RemoveAt(index); nodes.Insert(newIndex, selectedNode); list.RemoveAt(index); list.Insert(newIndex, selectedObj); treeView.SelectedNode = selectedNode; } else if (moveBehavior == MoveBehavior.ThroughSimilarParents) { TreeNode parentNode = selectedNode.Parent; TreeNode nextParentNode = parentNode == null ? null : parentNode.NextNode; if (parentNode != null && nextParentNode != null && parentNode.Tag is ITreeNode && nextParentNode.Tag is ITreeNode && parentNode.Tag.GetType() == nextParentNode.Tag.GetType()) { // изменение родителя перемещаемого узла nodes.RemoveAt(index); nextParentNode.Nodes.Insert(0, selectedNode); ITreeNode nextParentObj = (ITreeNode)nextParentNode.Tag; list.RemoveAt(index); nextParentObj.Children.Insert(0, selectedObj); selectedObj.Parent = nextParentObj; treeView.SelectedNode = selectedNode; } } } finally { treeView.EndUpdate(); } } }
/// <summary> /// Переместить выбранный узел дерева и элемент соответствующего списка вверх по дереву /// </summary> public static void MoveUpSelectedNode(this TreeView treeView, MoveBehavior moveBehavior) { TreeNode selectedNode = treeView.SelectedNode; if (GetRelatedObject(selectedNode) is ITreeNode selectedObj) { try { treeView.BeginUpdate(); TreeNodeCollection nodes = treeView.GetChildNodes(selectedNode.Parent); IList list = selectedObj.Parent.Children; int index = selectedNode.Index; int newIndex = index - 1; if (newIndex >= 0) { nodes.RemoveAt(index); nodes.Insert(newIndex, selectedNode); list.RemoveAt(index); list.Insert(newIndex, selectedObj); treeView.SelectedNode = selectedNode; } else if (moveBehavior == MoveBehavior.ThroughSimilarParents) { TreeNode parentNode = selectedNode.Parent; TreeNode prevParentNode = parentNode == null ? null : parentNode.PrevNode; if (parentNode != null && prevParentNode != null && parentNode.Tag is ITreeNode && prevParentNode.Tag is ITreeNode && parentNode.Tag.GetType() == prevParentNode.Tag.GetType()) { // изменение родителя перемещаемого узла nodes.RemoveAt(index); prevParentNode.Nodes.Add(selectedNode); ITreeNode prevParentObj = (ITreeNode)prevParentNode.Tag; list.RemoveAt(index); prevParentObj.Children.Add(selectedObj); selectedObj.Parent = prevParentObj; treeView.SelectedNode = selectedNode; } } } finally { treeView.EndUpdate(); } } }
public override BehaviorTree Create() { BehaviorTree behaviorTree = new BehaviorTree(); ContinueBehavior continueMove = new ContinueBehavior(-1); MoveBehavior moveBehavior = new MoveBehavior(); MoveBehavior.MoveBehaviorInfo moveBehaviorInfo = new MoveBehavior.MoveBehaviorInfo(); moveBehaviorInfo.speed = mapObject.GetAttribute <MapObjectArtAttribute>().MaxSpeed + 0.1f; moveBehaviorInfo.dir = Vector3.right; moveBehaviorInfo.targer = mapObject; moveBehavior.Enviorment = moveBehaviorInfo; continueMove.AddBehavior(moveBehavior); behaviorTree.AddBehavior("move", continueMove, BehaviorTree.NodeType.ParallelOr); ContinueBehavior continueTouchZombie = new ContinueBehavior(-1); TouchZombieBehavior touchZombieBehavior = new TouchZombieBehavior(); TouchZombieBehavior.TouchZombieBehaviorInfo touchZombieInfo = new TouchZombieBehavior.TouchZombieBehaviorInfo(); touchZombieInfo.dir = Vector3.right; touchZombieInfo.distance = 1f; touchZombieInfo.mapObject = mapObject; touchZombieBehavior.Enviorment = touchZombieInfo; continueTouchZombie.AddBehavior(touchZombieBehavior); behaviorTree.AddBehavior("TouchZombie", continueTouchZombie, BehaviorTree.NodeType.ParallelOr); ContinueBehavior continueTouchWall = new ContinueBehavior(-1); TouchWallBehavior touchWallBehavior = new TouchWallBehavior(); TouchWallBehavior.TouchBehaviorInfo touchWallInfo = new TouchWallBehavior.TouchBehaviorInfo(); touchWallInfo.dir = Vector3.right; touchWallInfo.distance = 1f; touchWallInfo.mapObject = mapObject; touchWallBehavior.Enviorment = touchWallInfo; continueTouchWall.AddBehavior(touchWallBehavior); behaviorTree.AddBehavior("touchWall", continueTouchWall, BehaviorTree.NodeType.Serial); SingleNodeBehavior singleNodeBehavior = new SingleNodeBehavior(); BulletAttackBehavior plantAttackBehavior = new BulletAttackBehavior(); BulletAttackBehavior.BulletAttackBehaviorInfo plantAttackBehaviorInfo = new BulletAttackBehavior.BulletAttackBehaviorInfo(); plantAttackBehaviorInfo.Attack = 1; plantAttackBehaviorInfo.mapObject = mapObject; plantAttackBehavior.Enviorment = plantAttackBehaviorInfo; singleNodeBehavior.AddBehavior(plantAttackBehavior); behaviorTree.AddBehavior("attack", singleNodeBehavior, BehaviorTree.NodeType.Serial); return(behaviorTree); }
/// <summary> /// Move the selected tree node and the corresponding list item up the tree /// </summary> public static void MoveUpSelectedNode(this TreeView treeView, MoveBehavior moveBehavior) { var selectedNode = treeView.SelectedNode; if (!(GetRelatedObject(selectedNode) is ITreeNode selectedObj)) { return; } try { treeView.BeginUpdate(); var nodes = treeView.GetChildNodes(selectedNode.Parent); var list = selectedObj.Parent.Children; int index = selectedNode.Index; int newIndex = index - 1; if (newIndex >= 0) { nodes.RemoveAt(index); nodes.Insert(newIndex, selectedNode); list.RemoveAt(index); list.Insert(newIndex, selectedObj); treeView.SelectedNode = selectedNode; } else if (moveBehavior == MoveBehavior.ThroughSimilarParents) { var parentNode = selectedNode.Parent; var prevParentNode = parentNode?.PrevNode; if (parentNode != null && prevParentNode != null && parentNode.Tag is ITreeNode && prevParentNode.Tag is ITreeNode && parentNode.Tag.GetType() == prevParentNode.Tag.GetType()) { // change the parent of the node being moved nodes.RemoveAt(index); prevParentNode.Nodes.Add(selectedNode); var prevParentObj = (ITreeNode)prevParentNode.Tag; list.RemoveAt(index); prevParentObj.Children.Add(selectedObj); selectedObj.Parent = prevParentObj; treeView.SelectedNode = selectedNode; } } } finally { treeView.EndUpdate(); } }
void Awake() { // Add event subscription with callback GameManager.onGameStartEvent += EnablePlayer; GameManager.onKnightsWinEvent += Celebrate; animator = gameObject.GetComponent <Animator>(); healthManager = GetComponent <HealthManager>(); inputManager = GetComponent <KnightInputManager>(); soundManager = GetComponent <SoundManager>(); // Get Behaviors moveBehavior = GetComponent <MoveBehavior>(); attackBehavior = GetComponent <AttackBehavior>(); blockBehavior = GetComponent <BlockBehavior>(); jumpBehavior = GetComponent <JumpBehavior>(); takeDamageBehavior = GetComponent <TakeDamageBehavior>(); //Invoke("Die", 5); }
// Update is called once per frame void Update() { if (Input.GetKey(KeyCode.DownArrow) || Input.GetKey(KeyCode.S)) { MoveBehavior.Down(); } if (Input.GetKey(KeyCode.UpArrow) || Input.GetKey(KeyCode.W)) { MoveBehavior.Up(); } if (Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.A)) { MoveBehavior.Left(); } if (Input.GetKey(KeyCode.RightArrow) || Input.GetKey(KeyCode.D)) { MoveBehavior.Right(); } if (Input.GetKeyDown(KeyCode.Q)) { MoveBehavior.RotateClockwise(); } if (Input.GetKeyDown(KeyCode.E)) { MoveBehavior.RotateCounterClockwise(); } if (Input.GetKey(KeyCode.R)) { //gameObject.GetComponent<CreateObject>().CreatePUNObject("Rooms/Room2/Room2"); string prefabName = "Rooms/Room2/Room2"; objManager.Instantiate(prefabName); } }
public void Setup(CharacterSetting characterSetting, CharacterType characterType, Vector2 spawnPos, int direction) { characterInstance = GameObject.Instantiate(characterSetting.prefab, spawnPos, Quaternion.identity); moveBehavior = characterInstance.GetComponent <MoveBehavior>(); healthBehavior = characterInstance.GetComponent <HealthBehavior>(); attackBehavior = characterInstance.GetComponent <AttackBehavior>(); moveBehavior.Setup(characterSetting.speed, direction); healthBehavior.Setup(characterSetting.hp); switch (characterType) { case CharacterType.ENEMY: characterInstance.gameObject.layer = LayerMask.NameToLayer("Enemy"); characterInstance.GetComponent <SortingGroup>().sortingLayerID = SortingLayer.NameToID("Enemy"); attackBehavior.Setup(characterSetting.attack, LayerMask.NameToLayer("Player")); break; case CharacterType.PLAYER: characterInstance.gameObject.layer = LayerMask.NameToLayer("Player"); characterInstance.GetComponent <SortingGroup>().sortingLayerID = SortingLayer.NameToID("Player"); attackBehavior.Setup(characterSetting.attack, LayerMask.NameToLayer("Enemy")); break; } }
public WallBlock(RotateBehavior rotateBehavior, MoveBehavior moveBehavior) : base(rotateBehavior, moveBehavior) { }
// Update is called once per frame void Update() { /* * if (Input.GetKey(KeyCode.Q)) * { * MoveBehavior.Up(); * } * * if (Input.GetKey(KeyCode.E)) * { * MoveBehavior.Down(); * } * * if (Input.GetKey(KeyCode.S)) * { * MoveBehavior.Back(); * } * if(Input.GetKey(KeyCode.W)) * { * MoveBehavior.Forward(); * } * if(Input.GetKey(KeyCode.A)) * { * MoveBehavior.Left(); * } * if(Input.GetKey(KeyCode.D)) * { * MoveBehavior.Right(); * } * * * if (Input.GetKey(KeyCode.H)) * { * MoveBehavior.RotateClockwise(); * } * if (Input.GetKey(KeyCode.K)) * { * MoveBehavior.RotateCounterClockwise(); * } * * if (Input.GetKey(KeyCode.I)) * { * MoveBehavior.RotateRight(); * } * if (Input.GetKey(KeyCode.Y)) * { * MoveBehavior.RotateLeft(); * } * * if (Input.GetKey(KeyCode.U)) * { * MoveBehavior.RotateForward(); * } * if (Input.GetKey(KeyCode.J)) * { * MoveBehavior.RotateBackward(); * } * * * * if (Input.GetKey(KeyCode.R)) * { * MoveBehavior.ScaleUp(); * } * if (Input.GetKey(KeyCode.F)) * { * MoveBehavior.ScaleDown(); * } * */ if (Input.GetKey(KeyCode.Backspace)) { MoveBehavior.Delete(); } if (Input.GetKey(KeyCode.LeftControl) && Input.GetKeyDown(KeyCode.C)) { MoveBehavior.Copy(); } }
public ImageDataBlock(RotateBehavior rotateBehavior, MoveBehavior moveBehavior, ColorMixingBehavior colorMixingBehavior) : base(rotateBehavior, moveBehavior) { this.colorMixingBehavior = colorMixingBehavior; }
public void Move() { MoveBehavior.Move(this); }
public SamplePlayableBlock(RotateBehavior rotateBehavior, MoveBehavior moveBehavior, ColorMixingBehavior colorMixingBehavior) : base(rotateBehavior, moveBehavior, colorMixingBehavior) { }
void OnEnable() { m_moveBehavior = GetComponent<MoveBehavior> (); }
void Awake () { inputState = GetComponent<InputState> (); movement = GetComponent<MoveBehavior> (); attack = GetComponent<AttackBehavior> (); animator = GetComponent<Animator> (); }
public Player(MoveBehavior moveBehavior, List <InteractBehavior> interactBehavior) { this.moveBehavior = moveBehavior; this.interactBehavior = interactBehavior; }
/// <summary> /// Проверить, что перемещение выбранного узла дерева вверх возможно /// </summary> public static bool MoveUpSelectedNodeIsEnabled(this TreeView treeView, MoveBehavior moveBehavior) { TreeNode selectedNode = treeView.SelectedNode; if (selectedNode == null) { return false; } else if (selectedNode.PrevNode == null) { if (moveBehavior == MoveBehavior.ThroughSimilarParents) { TreeNode parentNode = selectedNode.Parent; TreeNode prevParentNode = parentNode == null ? null : parentNode.PrevNode; return parentNode != null && prevParentNode != null && parentNode.Tag is ITreeNode && prevParentNode.Tag is ITreeNode && parentNode.Tag.GetType() == prevParentNode.Tag.GetType(); } else { return false; } } else { return true; } }
public Tile(TileType type, MoveBehavior mvb) { this.type = type; moveBehaviour = mvb; }
public MoveableTile(TileType type, MoveBehavior mvb) : base(type, mvb) { }
public override BehaviorTree Create() { BehaviorTree behaviorTree = new BehaviorTree(); ContinueBehavior continueMove = new ContinueBehavior(-1); MoveBehavior moveBehavior = new MoveBehavior(); MoveBehavior.MoveBehaviorInfo moveBehaviorInfo = new MoveBehavior.MoveBehaviorInfo(); moveBehaviorInfo.speed = mapObject.GetAttribute <MapObjectArtAttribute>().MaxSpeed + 0.1f; moveBehaviorInfo.dir = Vector3.left; moveBehaviorInfo.targer = mapObject; moveBehavior.Enviorment = moveBehaviorInfo; continueMove.AddBehavior(moveBehavior); behaviorTree.AddBehavior("move", continueMove, BehaviorTree.NodeType.ParallelOr); ContinueBehavior continueTouchWall = new ContinueBehavior(-1); TouchWallBehavior touchWallBehavior = new TouchWallBehavior(); TouchWallBehavior.TouchBehaviorInfo touchWallInfo = new TouchWallBehavior.TouchBehaviorInfo(); touchWallInfo.dir = Vector3.left; touchWallInfo.distance = 1.6f; touchWallInfo.mapObject = mapObject; touchWallBehavior.Enviorment = touchWallInfo; continueTouchWall.AddBehavior(touchWallBehavior); behaviorTree.AddBehavior("touchWall", continueTouchWall, BehaviorTree.NodeType.ParallelOr); ContinueBehavior continueTouchZombie = new ContinueBehavior(-1); TouchPlantBehavior touchPlantBehavior = new TouchPlantBehavior(); TouchPlantBehavior.TouchBehaviorInfo touchPlantInfo = new TouchPlantBehavior.TouchBehaviorInfo(); touchPlantInfo.dir = Vector3.left; touchPlantInfo.distance = 1.6f; touchPlantInfo.mapObject = mapObject; touchPlantBehavior.Enviorment = touchPlantInfo; continueTouchZombie.AddBehavior(touchPlantBehavior); behaviorTree.AddBehavior("TouchPlant", continueTouchZombie, BehaviorTree.NodeType.Serial); IntervalBehavior intervalBehavior = new IntervalBehavior(5, -1); ZombieAttackBehavior zombieAttackBehavior = new ZombieAttackBehavior(); ZombieAttackBehavior.ZombieAttackBehaviorInfo zombieAttackInfo = new ZombieAttackBehavior.ZombieAttackBehaviorInfo(); zombieAttackInfo.mapObject = mapObject; zombieAttackInfo.Attack = 1; zombieAttackBehavior.Enviorment = zombieAttackInfo; intervalBehavior.AddBehavior(zombieAttackBehavior); behaviorTree.AddBehavior("attack", intervalBehavior, BehaviorTree.NodeType.Serial); SingleNodeBehavior singleNodeBehavior = new SingleNodeBehavior(); AddDailyActionBehavior addDailyActionBehavior = new AddDailyActionBehavior(); AddDailyActionBehavior.AddDailyActionBehaviorInfo addDailyActionBehaviorInfo = new AddDailyActionBehavior.AddDailyActionBehaviorInfo(); addDailyActionBehaviorInfo.mapObject = mapObject; addDailyActionBehaviorInfo.dailyAction = new TriggerZombieMoveDailyAction(); addDailyActionBehavior.Enviorment = addDailyActionBehaviorInfo; singleNodeBehavior.AddBehavior(addDailyActionBehavior); behaviorTree.AddBehavior("daily", singleNodeBehavior, BehaviorTree.NodeType.Serial); return(behaviorTree); }
void Start() { m_rigidbody = GetComponent<Rigidbody>(); m_movement = GetComponent<MoveBehavior>(); m_movement.SetRigidBody( m_rigidbody ); m_rigidbody.drag = maxForce / maxSpeed; }
/// <summary> /// Переместить выбранный узел дерева и элемент соответствующего списка вверх по дереву /// </summary> public static void MoveUpSelectedNode(this TreeView treeView, MoveBehavior moveBehavior) { TreeNode selectedNode = treeView.SelectedNode; ITreeNode selectedObj = selectedNode == null ? null : selectedNode.Tag as ITreeNode; if (selectedObj != null) { try { treeView.BeginUpdate(); TreeNodeCollection nodes = treeView.GetChildNodes(selectedNode.Parent); IList list = selectedObj.Parent.Children; int index = selectedNode.Index; int newIndex = index - 1; if (newIndex >= 0) { nodes.RemoveAt(index); nodes.Insert(newIndex, selectedNode); list.RemoveAt(index); list.Insert(newIndex, selectedObj); treeView.SelectedNode = selectedNode; } else if (moveBehavior == MoveBehavior.ThroughSimilarParents) { TreeNode parentNode = selectedNode.Parent; TreeNode prevParentNode = parentNode == null ? null : parentNode.PrevNode; if (parentNode != null && prevParentNode != null && parentNode.Tag is ITreeNode && prevParentNode.Tag is ITreeNode && parentNode.Tag.GetType() == prevParentNode.Tag.GetType()) { // изменение родителя перемещаемого узла nodes.RemoveAt(index); prevParentNode.Nodes.Add(selectedNode); ITreeNode prevParentObj = (ITreeNode)prevParentNode.Tag; list.RemoveAt(index); prevParentObj.Children.Add(selectedObj); selectedObj.Parent = prevParentObj; treeView.SelectedNode = selectedNode; } } } finally { treeView.EndUpdate(); } } }
/// <summary> /// Default constructor. /// </summary> public Entity() { _AttackBehavior = new AttackBehavior(); _MoveBehavior = new MoveBehavior(); Forward = new Vector2(0, 1); // Default to facing down }
private void Awake() { objManager = GameObject.Find("ObjectInteractionManager").GetComponent <ObjectInteractionManager>(); _moveBehavior = objManager.RegisterBehavior <MoveBehavior>(); }
public SimpleBlock(RotateBehavior rotateBehavior, MoveBehavior moveBehavior) { this.rotateBehavior = rotateBehavior; this.moveBehavior = moveBehavior; }
public Move(MoveBehavior movebehavior) { this.movebehavior = movebehavior; }
public void setMoveBehavior(MoveBehavior moveBehavior) { this.moveBehavior = moveBehavior; }
public MoveAttack(MoveBehavior behavior) : base() { this.MoveBehavior = behavior; }
public void Move() => MoveBehavior.Move(this);