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(); }
public SelectComponent(IEntity parent) { Parent = parent; parent?.AddComponent(this); keyService = Parent.Scene.ServiceProvider.GetService <IKeystateService>(); }