protected void CheckCollisions(float timeMult) { if (health <= 0) { return; } TileMap tiles = levelHandler.TileMap; if (tiles != null) { AABB adjustedAABB = AABBInner + new Vector2(speedX * timeMult, speedY * timeMult); if (tiles.CheckWeaponDestructible(ref adjustedAABB, WeaponType, strength) > 0) { if (WeaponType != WeaponType.Freezer) { if (owner != null) { owner.AddScore(50); } } DecreaseHealth(1); } else if (!tiles.IsTileEmpty(ref AABBInner, false)) { EventMap events = levelHandler.EventMap; bool handled = false; if (events != null) { Vector3 pos = Transform.Pos; ushort[] eventParams = null; switch (events.GetEventByPosition(pos.X + speedX * timeMult, pos.Y + speedY * timeMult, ref eventParams)) { case EventType.ModifierRicochet: if (lastRicochetFrame + 2 < Time.FrameCount) { lastRicochet = null; lastRicochetFrame = Time.FrameCount; OnRicochet(); handled = true; } break; } } if (!handled) { OnHitWall(); } } } }
protected bool CanMoveToPosition(float x, float y) { Vector3 pos = Transform.Pos; int direction = (IsFacingLeft ? -1 : 1); EventMap events = api.EventMap; Hitbox h1 = currentHitbox + new Vector2(x, y - 3); Hitbox h2 = currentHitbox + new Vector2(x, y + 3); Hitbox h3 = currentHitbox + new Vector2(x + direction * (currentHitbox.Right - currentHitbox.Left) / 2, y + 12); ushort[] p = null; return((api.IsPositionEmpty(this, ref h1, true) || api.IsPositionEmpty(this, ref h2, true)) && (events != null && events.GetEventByPosition(pos.X + x, pos.Y + y, ref p) != EventType.AreaStopEnemy) && !api.IsPositionEmpty(this, ref h3, true)); }
protected bool CanMoveToPosition(float x, float y) { Vector3 pos = Transform.Pos; int direction = (IsFacingLeft ? -1 : 1); EventMap events = levelHandler.EventMap; AABB aabbA = AABBInner + new Vector2(x, y - 3); AABB aabbB = AABBInner + new Vector2(x, y + 3); if (!levelHandler.IsPositionEmpty(this, ref aabbA, true) && !levelHandler.IsPositionEmpty(this, ref aabbB, true)) { return(false); } AABB aabbDir = AABBInner + new Vector2(x + direction * (AABBInner.UpperBound.X - AABBInner.LowerBound.X) * 0.5f, y + 12); ushort[] p = null; return((events == null || events.GetEventByPosition(pos.X + x, pos.Y + y, ref p) != EventType.AreaStopEnemy) && !levelHandler.IsPositionEmpty(this, ref aabbDir, true)); }
protected void CheckCollisions() { TileMap tiles = api.TileMap; if (tiles != null) { float timeMult = Time.TimeMult; Hitbox hitbox = currentHitbox + new Vector2(speedX * timeMult, speedY * timeMult); if (tiles.CheckWeaponDestructible(ref hitbox, WeaponType, strength) > 0) { if (WeaponType != WeaponType.Freezer) { if (owner != null) { owner.AddScore(50); } } DecreaseHealth(1); } else if (!tiles.IsTileEmpty(ref hitbox, false)) { EventMap events = api.EventMap; if (events != null) { Vector3 pos = Transform.Pos; ushort[] eventParams = null; switch (events.GetEventByPosition(pos.X + speedX * timeMult, pos.Y + speedY * timeMult, ref eventParams)) { case EventType.ModifierRicochet: lastRicochet = null; OnRicochet(); break; } } } } }