private bool FindClickTarget()
        {
            NextTarget = null;

            IKeystateService keyService = Parent.Scene.ServiceProvider.GetService <IKeystateService>();
            var clicked = new List <IEntity>();

            foreach (var other in Parent.Scene.ServiceProvider.GetService <IGameObjectService>().GetEntities())
            {
                if (other.HasComponent <OwnerComponent>() && other.GetComponent <OwnerComponent>().Owner == Parent.GetComponent <OwnerComponent>().Owner)
                {
                    continue;
                }
                if (!other.HasComponent <HealthComponent>())
                {
                    continue;
                }
                if ((keyService.MousePosition - other.Position).Length > (other.Size.X / 2))
                {
                    continue;
                }

                clicked.Add(other);
            }

            if (clicked.Count == 0)
            {
                return(false);
            }
            clicked.Sort((obj1, obj2) => (int)((keyService.MousePosition - obj1.Position).Length - (keyService.MousePosition - obj2.Position).Length));
            NextTarget = clicked[0];
            return(true);
        }
        public void Update()
        {
            IKeystateService keyService = Parent.Scene.ServiceProvider.GetService <IKeystateService>();

            if (!keyService.IsButtonPressed(MouseButton.Left))
            {
                return;
            }

            var x = keyService.MousePosition.X;
            var y = keyService.MousePosition.Y;

            if (x > Parent.Position.X + (Parent.Size.X / 2))
            {
                return;
            }
            if (x < Parent.Position.X - (Parent.Size.X / 2))
            {
                return;
            }
            if (y > Parent.Position.Y + (Parent.Size.Y / 2))
            {
                return;
            }
            if (y < Parent.Position.Y - (Parent.Size.Y / 2))
            {
                return;
            }

            callback.Invoke();
        }
        public void Update()
        {
            IKeystateService keyService = Parent.Scene.ServiceProvider.GetService <IKeystateService>();

            if (!keyService.IsButtonPressed(MouseButton.Left))
            {
                return;
            }
            if ((keyService.MousePosition - Parent.Position).Length > (Parent.Size.X / 2))
            {
                return;
            }

            Parent.Scene.ServiceProvider.GetService <ISceneService>().ChangeScene(Scene);
        }
        public void Update()
        {
            if (Parent.Scene.ServiceProvider.GetService <ITimeService>().TimeScale == 0)
            {
                return;
            }

            if (Parent.HasComponent <MoveComponent>())
            {
                IKeystateService keyService = Parent.Scene.ServiceProvider.GetService <IKeystateService>();
                if (keyService.IsButtonPressed(MouseButton.Right) && Parent.GetComponent <OwnerComponent>().Owner == 0 && Parent.GetComponent <SelectComponent>().Selected)
                {
                    Target = null;
                    FindClickTarget();
                }

                if (NextTarget != null && Target == null)
                {
                    if (Parent.HasComponent <PathfindingComponent>() && Parent.GetComponent <PathfindingComponent>().Destination() != NextTarget.Position)
                    {
                        Parent.GetComponent <PathfindingComponent>().Pathfind(NextTarget.Position);
                        Parent.GetComponent <PathfindingComponent>().UpdateFlag();
                    }

                    if (HasInRange(NextTarget))
                    {
                        Parent.GetComponent <MoveComponent>().Moving = false;
                        Target     = NextTarget;
                        NextTarget = null;
                    }
                }
            }

            UpdateAnimation();
            if (Parent.HasComponent <MoveComponent>() && Parent.GetComponent <MoveComponent>().Moving)
            {
                return;
            }

            HealthComponent healthComponent = Parent.GetComponent <HealthComponent>();

            if (healthComponent.Dead)
            {
                return;
            }

            if (Target == null)
            {
                if (!FindNewTarget())
                {
                    return;
                }
            }

            HealthComponent targetHealthComponent = Target.GetComponent <HealthComponent>();

            if (targetHealthComponent.Dead)
            {
                Target = null;
                return;
            }

            if (!HasInRange(Target))
            {
                Target = null;
                return;
            }

            if (Parent.GetComponent <OwnerComponent>().Owner == Target.GetComponent <OwnerComponent>().Owner)
            {
                Target = null;
                return;
            }

            ITimeService timeService = Parent.Scene.ServiceProvider.GetService <ITimeService>();

            if (attackAnimation)
            {
                return;
            }
            if (lastAttack + AttackSpeed > timeService.AbsoluteTime)
            {
                return;
            }
            lastAttack = timeService.AbsoluteTime;

            Attack();
        }
Exemplo n.º 5
0
 public SelectComponent(IEntity parent)
 {
     Parent = parent;
     parent?.AddComponent(this);
     keyService = Parent.Scene.ServiceProvider.GetService <IKeystateService>();
 }