예제 #1
0
        public override void HandleAttacks(List <Attack> p_attackList, Monster p_monster, Character p_character, Boolean p_isMagic)
        {
            if (p_monster.DistanceToParty > 1f)
            {
                return;
            }
            Party    party     = LegacyLogic.Instance.WorldManager.Party;
            Grid     grid      = LegacyLogic.Instance.MapLoader.Grid;
            Position position  = party.Position;
            Position position2 = position + EDirectionFunctions.GetLineOfSightDirection(p_monster.Position, party.Position);
            GridSlot slot      = grid.GetSlot(position2);

            if (slot == null)
            {
                return;
            }
            party.IsPushed = true;
            if (!slot.HasEntities && grid.CanMoveEntity(party, p_monster.Direction))
            {
                GridSlot slot2 = grid.GetSlot(position);
                slot2.RemoveEntity(party);
                party.Position = position2;
                grid.GetSlot(position2).AddEntity(party);
                MoveEntityEventArgs p_eventArgs = new MoveEntityEventArgs(position, position2);
                LegacyLogic.Instance.EventManager.InvokeEvent(party, EEventType.MOVE_ENTITY, p_eventArgs);
                LegacyLogic.Instance.EventManager.InvokeEvent(this, EEventType.ENTITY_ABILITY_ADDED, new AbilityEventArgs(p_monster, this));
                AbilityTriggeredEventArgs p_args = new AbilityTriggeredEventArgs(p_monster, this);
                LegacyLogic.Instance.ActionLog.PushEntry(p_args);
            }
            else
            {
                party.IsPushed = false;
            }
        }
예제 #2
0
        private void OnChangedPlayerMoved(Object p_sender, EventArgs p_args)
        {
            MoveEntityEventArgs moveEntityEventArgs = p_args as MoveEntityEventArgs;

            if (moveEntityEventArgs != null && p_sender is Party)
            {
                mLastPlayerPos = moveEntityEventArgs.Position;
                if (mSteps < MaxStepsUntilUpdate)
                {
                    if (IsInvoking("OnPositionChange"))
                    {
                        CancelInvoke("OnPositionChange");
                    }
                    Invoke("OnPositionChange", Random.Range(MinUpdateTime, MaxUpdateTime));
                    mSteps++;
                }
                else
                {
                    if (IsInvoking("OnPositionChange"))
                    {
                        CancelInvoke("OnPositionChange");
                    }
                    OnPositionChange();
                }
            }
        }
예제 #3
0
        private void EntityMoved(MoveEntityEventArgs moveEntityEventArgs)
        {
            //Check that type is valid
            if (Entity.GetType() != moveEntityEventArgs.NewParent.GetType())
            {
                return;
            }

            //Do nothing in case of a timeentry (since we dont have timeentries in the tree)
            if (moveEntityEventArgs.MovedEntity is TimeEntry)
            {
                return;
            }

            if (moveEntityEventArgs.OldParent.Id == Entity.Id)
            {
                RemoveChild(moveEntityEventArgs.MovedEntity);
            }

            if (moveEntityEventArgs.NewParent.Id == Entity.Id)
            {
                if (Children.SingleOrDefault(item => item.Entity.Id == moveEntityEventArgs.MovedEntity.Id) == null)
                {
                    AddChild(moveEntityEventArgs.MovedEntity);
                }
            }
        }
        protected override void DoExecute()
        {
            InteractiveObject interactiveObject = Grid.FindInteractiveObject(m_targetSpawnID);

            if (interactiveObject == null)
            {
                throw new InvalidOperationException("Tried to move something that is not an object!");
            }
            InteractiveObject interactiveObject2 = Grid.FindInteractiveObject(m_moveTargetID);

            if (interactiveObject2 == null)
            {
                throw new InvalidOperationException("Tried to move to something that is not an object!");
            }
            if (interactiveObject == null)
            {
                return;
            }
            EDirection          edirection  = (!m_useMoveTargetOrientation) ? interactiveObject.Location : interactiveObject2.Location;
            MoveEntityEventArgs p_eventArgs = new MoveEntityEventArgs(interactiveObject.Position, interactiveObject2.Position, edirection);

            LegacyLogic.Instance.EventManager.InvokeEvent(interactiveObject, EEventType.MOVE_ENTITY, p_eventArgs);
            Grid.MoveObject(interactiveObject, interactiveObject2.Position);
            interactiveObject.Position = interactiveObject2.Position;
            interactiveObject.Location = edirection;
            FinishExecution();
        }
예제 #5
0
        private void OnChangedPlayerMoved(Object p_sender, EventArgs p_args)
        {
            MoveEntityEventArgs moveEntityEventArgs = (MoveEntityEventArgs)p_args;

            if (moveEntityEventArgs != null && p_sender is Party)
            {
                OnPositionChange(moveEntityEventArgs.Position);
            }
        }
예제 #6
0
        private void OnMoveEntityEvent(Object p_sender, EventArgs p_args)
        {
            MoveEntityEventArgs moveEntityEventArgs = (MoveEntityEventArgs)p_args;

            if (moveEntityEventArgs != null && p_sender == LegacyLogic.Instance.WorldManager.Party && enabled)
            {
                TurnToDefaultView();
            }
        }
예제 #7
0
        private void OnMove(Object p_sender, EventArgs p_args)
        {
            InteractiveObject   myController        = MyController;
            MoveEntityEventArgs moveEntityEventArgs = p_args as MoveEntityEventArgs;

            if (p_args != null && p_sender == myController)
            {
                OnSetPosition(moveEntityEventArgs.Position, false);
            }
        }
예제 #8
0
        //private void _dataService_GetTasksByProjectCompleted(object sender, ProjectListEventArgs e)
        //{
        //    _dataService.GetTasksByProjectCompleted -= _dataService_GetTasksByProjectCompleted;
        //    if (e.Projects.Count == 0)
        //    {
        //        return;
        //    }

        //    var tasks = e.Projects[0].Tasks;
        //    LoadTasks(tasks);
        //}

        public override void RecieveDraggable(IDraggable draggable)
        {
            var task      = draggable.Entity as Task;
            var eventArgs = new MoveEntityEventArgs(task, task.Project, Project);

            task.Project   = Project;
            task.ProjectID = Project.Id;
            _dataService.SaveTask(task);

            InternalCommands.MoveEntityRequest.Execute(eventArgs);
        }
예제 #9
0
        private void OnMoveEntity(Object p_sender, EventArgs p_args)
        {
            MoveEntityEventArgs moveEntityEventArgs = (MoveEntityEventArgs)p_args;

            if (moveEntityEventArgs != null && p_sender == MyController)
            {
                InteractiveObject interactiveObject = (InteractiveObject)p_sender;
                Vector3           localPosition     = Helper.SlotLocalPosition(interactiveObject.Position, 0f);
                transform.localPosition = localPosition;
            }
        }
예제 #10
0
        public override void RecieveDraggable(IDraggable draggable)
        {
            var project   = draggable.Entity as Project;
            var eventArgs = new MoveEntityEventArgs(project, project.Customer, Customer);

            project.Customer   = Customer;
            project.CustomerID = Customer.Id;

            InternalCommands.MoveEntityRequest.Execute(eventArgs);

            _dataService.SaveProject(project).Subscribe(
                result => { }
                );
        }
예제 #11
0
        private void OnMoveEntityEvent(Object p_sender, EventArgs p_args)
        {
            MoveEntityEventArgs moveEntityEventArgs = p_args as MoveEntityEventArgs;

            if (moveEntityEventArgs != null && p_sender == MyController)
            {
                Party party = (Party)MyController;
                MoveTo(Helper.SlotLocalPosition(moveEntityEventArgs.Position, party.Height));
                if (!party.IsPushed)
                {
                    FXMainCamera.Instance.PlayWalkFX(MoveTime());
                }
                PlayMoveSound(false);
            }
        }
예제 #12
0
        public override void RecieveDraggable(IDraggable draggable)
        {
            var timeEntry = draggable.Entity as TimeEntry;

            var eventArgs = new MoveEntityEventArgs(timeEntry, timeEntry.Task, Task);

            timeEntry.Task.TimeEntries.Remove(timeEntry);
            Task.TimeEntries.Add(timeEntry);

            timeEntry.Task = Task;

            _dataService.SaveTimeEntry(timeEntry);

            InternalCommands.MoveEntityRequest.Execute(eventArgs);
        }
예제 #13
0
        protected override void OnMoveEntity(Object p_sender, EventArgs p_args)
        {
            base.OnMoveEntity(p_sender, p_args);
            MoveEntityEventArgs moveEntityEventArgs = p_args as MoveEntityEventArgs;

            if (moveEntityEventArgs != null && p_sender == MyController)
            {
                MovingEntity myController = MyController;
                Vector3      vector       = GetVectorPosition(myController.Position, myController.Size, myController.Height);
                Quaternion   quaternion   = Helper.GridDirectionToQuaternion(myController.Direction);
                vector  = ViewManager.Instance.GridOrigin.TransformPoint(vector);
                vector += quaternion * m_PositionOffset;
                m_animatorControl.MoveTo(vector, quaternion);
            }
        }
예제 #14
0
        private void OnMoveEntity(Object p_sender, EventArgs p_args)
        {
            MoveEntityEventArgs moveEntityEventArgs = (MoveEntityEventArgs)p_args;

            if (moveEntityEventArgs != null && p_sender == MyController)
            {
                Single   p_height = 0f;
                GridSlot slot     = LegacyLogic.Instance.MapLoader.Grid.GetSlot(moveEntityEventArgs.Position);
                if (slot != null)
                {
                    p_height = slot.Height;
                }
                Vector3 localPosition = Helper.SlotLocalPosition(moveEntityEventArgs.Position, p_height);
                transform.localPosition = localPosition;
            }
        }
예제 #15
0
        private void OnMoveEntity(Object p_sender, EventArgs p_args)
        {
            MoveEntityEventArgs moveEntityEventArgs = (MoveEntityEventArgs)p_args;

            if (moveEntityEventArgs != null && p_sender == MyController)
            {
                Single   p_height = 0f;
                GridSlot slot     = LegacyLogic.Instance.MapLoader.Grid.GetSlot(moveEntityEventArgs.Position);
                if (slot != null)
                {
                    p_height = slot.Height;
                }
                Vector3           a = Helper.SlotLocalPosition(moveEntityEventArgs.Position, p_height);
                InteractiveObject interactiveObject = p_sender as InteractiveObject;
                transform.localPosition = a + new Vector3(interactiveObject.OffsetPosition.X, interactiveObject.OffsetPosition.Y, interactiveObject.OffsetPosition.Z);
            }
        }
예제 #16
0
        protected virtual void EntityDragged(MoveEntityEventArgs moveEntityEventArgs)
        {
            if (Entity.GetType() != moveEntityEventArgs.NewParent.GetType())
            {
                return;
            }

            if (moveEntityEventArgs.OldParent.Id == Entity.Id)
            {
                RemoveChild(moveEntityEventArgs.MovedEntity.Id);
            }

            if (moveEntityEventArgs.NewParent.Id == Entity.Id)
            {
                if (Children.SingleOrDefault(item => item.Entity.Id == moveEntityEventArgs.MovedEntity.Id) == null)
                {
                    AddChild(moveEntityEventArgs.MovedEntity);
                }
            }
        }
예제 #17
0
        protected override void DoExecute()
        {
            InteractiveObject interactiveObject = Grid.FindInteractiveObject(m_targetSpawnID);

            if (interactiveObject == null)
            {
                throw new InvalidOperationException("Tried to move something that is not an object!");
            }
            Position position = new Position(m_posX, m_posY);

            if (interactiveObject == null)
            {
                return;
            }
            MoveEntityEventArgs p_eventArgs = new MoveEntityEventArgs(interactiveObject.Position, position);

            LegacyLogic.Instance.EventManager.InvokeEvent(interactiveObject, EEventType.MOVE_ENTITY, p_eventArgs);
            Grid.MoveObject(interactiveObject, position);
            interactiveObject.Position = position;
            FinishExecution();
        }
예제 #18
0
        //public bool Swap(int[] l1, int[] l2)
        //{
        //    string temp = Grid[l1[0], l1[1]];
        //    Grid[l1[0], l1[1]] = Grid[l2[0], l2[1]];
        //    Grid[l2[0], l2[1]] = temp;

        //    if (Focus == true)
        //    {
        //        UpdateDisplay(new List<Tuple<int[], int[]>> { new Tuple<int[], int[]>(l1, l2) });
        //    }

        //    return true;
        //}

        public bool Move(object entity, MoveEntityEventArgs e)
        {
            int[] location1 = (int[])e.Location.Clone();
            int[] location2 = (int[])e.NewLocation.Clone();

            if (location2[0] < 0 || location2[0] >= Grid.GetLength(0) || location2[1] < 0 || location2[1] >= Grid.GetLength(1))
            {
                return(false);
            }

            if (Grid[location2[0], location2[1]] != null)
            {
                // Find object
                foreach (KeyValuePair <string, IEntity> otherEntity in Entities)
                {
                    if (otherEntity.Value.Location[0] == e.NewLocation[0] && otherEntity.Value.Location[1] == e.NewLocation[1])
                    {
                        // Raise collision event
                        OnRaiseEntityCollision(new EntityCollisionEventArgs((IEntity)entity, otherEntity.Value));
                        break;
                    }
                }

                return(false);
            }

            string temp = Grid[location1[0], location1[1]];

            Grid[location1[0], location1[1]] = null;
            Grid[location2[0], location2[1]] = temp;

            if (Focus == true)
            {
                UpdateDisplay(new List <Tuple <int[], int[]> > {
                    new Tuple <int[], int[]>(location1, location2)
                });
            }

            return(true);
        }
예제 #19
0
        protected override void DoExecute()
        {
            Monster monster = LegacyLogic.Instance.WorldManager.FindObjectBySpawnerId <Monster>(m_targetSpawnID);

            if (monster == null)
            {
                LegacyLogger.Log("Tried to move something that is not a monster " + m_targetSpawnID);
            }
            else
            {
                Position position  = monster.Position;
                Position position2 = new Position(m_posX, m_posY);
                GridSlot slot      = Grid.GetSlot(monster.Position);
                if (Grid.GetSlot(position2).AddEntity(monster))
                {
                    slot.RemoveEntity(monster);
                }
                MoveEntityEventArgs p_eventArgs = new MoveEntityEventArgs(position, position2);
                LegacyLogic.Instance.EventManager.InvokeEvent(monster, EEventType.MOVE_ENTITY, p_eventArgs);
                FinishExecution();
            }
        }
예제 #20
0
        public override void RecieveDraggable(IDraggable draggable)
        {
            var timeEntry = draggable.Entity as TimeEntry;

            if (timeEntry == null || timeEntry.DocumentType == 2)
            {
                MessageBox.Show("You can't drop this time entry, it have already been invoiced");
                return;
            }

            var eventArgs = new MoveEntityEventArgs(timeEntry, timeEntry.Task, Task);

            timeEntry.Task   = Task;
            timeEntry.TaskID = Task.Id;
            DataService.SaveTimeEntry(timeEntry);

            DataService.SaveTask(Task);

            // Update visuals
            var draggedTimeEntry = draggable as ListTimeEntryViewModel;

            if (draggedTimeEntry == null)
            {
                return;
            }

            draggedTimeEntry.ParentTask.RemoveChild(timeEntry.Id);
            if (Children.All(item => item.Entity.Id != timeEntry.Id))
            {
                AddChild(draggedTimeEntry.Entity);
                IsExpanded = true;
            }

            // For treeview
            InternalCommands.MoveEntityRequest.Execute(eventArgs);

            Reload();
        }
예제 #21
0
        protected override void DoExecute()
        {
            InteractiveObject interactiveObject = Grid.FindInteractiveObject(m_targetSpawnID);

            if (interactiveObject == null)
            {
                throw new InvalidOperationException("Tried to move something that is not an object!");
            }
            Position position  = interactiveObject.Position;
            Position position2 = interactiveObject.Position;
            Boolean  flag      = false;

            while (!flag)
            {
                GridSlot slot = Grid.GetSlot(position2 + m_dir);
                if ((slot.TerrainType & ETerrainType.LAVA) != ETerrainType.NONE)
                {
                    position2 += m_dir;
                }
                else
                {
                    flag = true;
                }
            }
            if (position != position2)
            {
                GridSlot slot2 = Grid.GetSlot(position);
                slot2.TerrainType          = ETerrainType.LAVA;
                slot2                      = Grid.GetSlot(position2);
                slot2.TerrainType          = ETerrainType.PASSABLE;
                interactiveObject.Position = position2;
                Grid.MoveObject(interactiveObject, position2);
                MoveEntityEventArgs p_eventArgs = new MoveEntityEventArgs(position, position2);
                LegacyLogic.Instance.EventManager.InvokeEvent(interactiveObject, EEventType.PLATFORM_MOVED, p_eventArgs);
            }
            FinishExecution();
        }
예제 #22
0
        protected override void EntityDragged(MoveEntityEventArgs moveEntityEventArgs)
        {
            var target      = moveEntityEventArgs.NewParent as Task;
            var source      = moveEntityEventArgs.OldParent as Task;
            var movedEntity = moveEntityEventArgs.MovedEntity as TimeEntry;

            if (target == null || source == null || movedEntity == null)
            {
                return;
            }

            if (source.Guid == Task.Guid)
            {
                RemoveChild(moveEntityEventArgs.MovedEntity.Id);
            }

            if (target.Guid == Task.Guid)
            {
                if (Children.SingleOrDefault(item => item.Entity.Id == moveEntityEventArgs.MovedEntity.Id) == null)
                {
                    AddChild(movedEntity);
                }
            }
        }
예제 #23
0
        public override void HandleAttacks(List <Attack> p_attackList, Monster p_monster, Character p_character, Boolean p_isMagic)
        {
            if (p_monster.DistanceToParty > 1f)
            {
                return;
            }
            Grid       grid      = LegacyLogic.Instance.MapLoader.Grid;
            Position   position  = LegacyLogic.Instance.WorldManager.Party.Position;
            EDirection direction = LegacyLogic.Instance.WorldManager.Party.Direction;
            EDirection p_dir     = (direction - EDirection.EAST != -1) ? (direction - 1) : EDirection.WEST;
            EDirection p_dir2    = (direction + 1 != EDirection.COUNT) ? (direction + 1) : EDirection.NORTH;
            Boolean    flag      = true;

            if (direction != EDirectionFunctions.GetOppositeDir(p_monster.Direction) && direction != p_monster.Direction)
            {
                p_dir  = direction;
                p_dir2 = EDirectionFunctions.GetOppositeDir(direction);
                flag   = false;
            }
            p_monster.CombatHandler.MeleeStrikes = 3;
            Position position2 = p_monster.Position;
            Position p_pos     = position + p_dir;
            Position position3 = position + p_dir2;
            Boolean  flag2     = Random.Range(0, 2) == 1;

            if (flag2)
            {
                if (grid.GetSlot(p_pos).AddEntity(p_monster))
                {
                    grid.GetSlot(position2).RemoveEntity(p_monster);
                    p_monster.Rotate(EDirectionFunctions.RotationCount(p_monster.Direction, EDirectionFunctions.GetOppositeDir(direction)), false);
                    if (flag)
                    {
                        p_monster.Rotate(-1, false);
                    }
                }
                else
                {
                    flag2 = false;
                }
            }
            if (!flag2)
            {
                if (Position.Distance(p_monster.Position, position3) < 2f)
                {
                    if (grid.GetSlot(position3).AddEntity(p_monster))
                    {
                        grid.GetSlot(position2).RemoveEntity(p_monster);
                        p_monster.Rotate(EDirectionFunctions.RotationCount(p_monster.Direction, EDirectionFunctions.GetOppositeDir(direction)), false);
                        if (flag)
                        {
                            p_monster.Rotate(1, false);
                        }
                    }
                }
                else if (grid.GetSlot(p_pos).AddEntity(p_monster))
                {
                    grid.GetSlot(position2).RemoveEntity(p_monster);
                    p_monster.Rotate(EDirectionFunctions.RotationCount(p_monster.Direction, EDirectionFunctions.GetOppositeDir(direction)), false);
                    if (flag)
                    {
                        p_monster.Rotate(-1, false);
                    }
                }
            }
            if (position2 != p_monster.Position)
            {
                MoveEntityEventArgs p_eventArgs = new MoveEntityEventArgs(position2, p_monster.Position);
                LegacyLogic.Instance.EventManager.InvokeEvent(p_monster, EEventType.MOVE_ENTITY, p_eventArgs);
                AbilityTriggeredEventArgs p_args = new AbilityTriggeredEventArgs(p_monster, this);
                LegacyLogic.Instance.ActionLog.PushEntry(p_args);
                LegacyLogic.Instance.EventManager.InvokeEvent(this, EEventType.ENTITY_ABILITY_ADDED, new AbilityEventArgs(p_monster, this));
            }
        }
        private void OnChangedPlayerMoved(Object p_sender, EventArgs p_args)
        {
            MoveEntityEventArgs moveEntityEventArgs = (MoveEntityEventArgs)p_args;

            OnPositionChange(moveEntityEventArgs.Position);
        }