public override void invoke(CollisionEvent eventObject) { if (eventObject.TriggeringEntity == this.owner && eventObject.CollisionResult.triggeringBody.Solid && eventObject.CollisionResult.affectedBody.Solid) { // Le aplica una fuerza de impacto EventManager.Instance.fireEvent(ForceAppliedEvent.Create(eventObject.AffectedEntity, this.angle, this.magnitude)); } }
public override void invoke(CollisionEvent eventObject) { if (eventObject.CollisionResult.triggeringBody.Owner == this.owner) { // Si no es multihit entonces guarda la entidad a la que atacará // y luego realiza el ataque // Hace cierto daño a la entidad EventManager.Instance.fireEvent(DamageEvent.Create(eventObject.AffectedEntity, owner.find<PhysicalAttackComponent>().Damage, this.owner, ElementType.NONE)); } }
public override void invoke(CollisionEvent eventObject) { // se asegura que ambos cuerpos sean solidos if (eventObject.CollisionResult.triggeringBody.Solid && eventObject.CollisionResult.affectedBody.Solid) { // se calcula una fuerza de impacto basado en que tan profundo fue la colisión float force = eventObject.CollisionResult.minimumTranslationVector.Length() * 10000; double angle = 0; // Luego se verifica si es la entidad causante o afectada para determinar la direccion en la cual se aplicara la fuerza Vector2 direction = eventObject.CollisionResult.translationAxis; if (eventObject.AffectedEntity == this.owner) { Vector2.Multiply(ref direction, -1, out direction); } angle = UtilMethods.directionToAngle(ref direction); EventManager.Instance.fireEvent(ForceAppliedEvent.Create(this.owner, angle, force)); } }
public override void invoke(CollisionEvent eventObject) { if (eventObject.AffectedEntity == this.owner && eventObject.CollisionResult.triggeringBody.Solid && eventObject.CollisionResult.affectedBody.Solid) { // Se calcula el angulo entre un vector recto horizontalmente y la perpendicular del eje de transicion // para saber si el angulo es mayor o menor a 45 grados, en caso de que sea menor determinamos que la entidad que ha colisionado // con esta superficie se encuentra en tierra Vector2 perpendicular = new Vector2(); perpendicular.X = -eventObject.CollisionResult.translationAxis.Y; perpendicular.Y = eventObject.CollisionResult.translationAxis.X; double angle = (Math.Atan2(0, 1) - Math.Atan2(perpendicular.Y, perpendicular.X)) * (180 / Math.PI); if ((Math.Abs(angle) >= 125 || Math.Abs(angle) <= 55) && eventObject.CollisionResult.minimumTranslationVector.Y <= 0 && eventObject.CollisionResult.triggeringBody.Center.Y < eventObject.CollisionResult.affectedBody.Center.Y) { EventManager.Instance.fireEvent(SurfaceContactEvent.Create(eventObject.TriggeringEntity)); EventManager.Instance.fireEvent(EntityOnSurfaceEvent.Create(this.owner, eventObject.TriggeringEntity)); /*SurfaceComponent comp = this.owner.find<SurfaceComponent>(); if (comp != null) { comp.addEntityOnSurface(eventObject.TriggeringEtity); }*/ } } }
public void invoke(CollisionEvent eventObject) { if (!isActive) { currentEntity = eventObject.TriggeringEntity; isActive = true; isEnabled = true; EventManager.Instance.fireEvent(TriggerRangeEvent.Create(zone, currentEntity, true)); } }
public abstract void invoke(CollisionEvent eventObject);