public void UserKickPuck(RoomUnit user, RoomItemBattleBanzaiPuck puck) { if (user is RoomUnitUser user_) { puck.LastUserHitPuck = user; puck.ExtraData = ((int)user_.GameTeam).ToString(); puck.UpdateState(false, true); if (user_.GameType == GameType.BattleBanzai) //we have change user is on game { (this.Room.RoomGamemapManager.GetTile(puck.X, puck.Y).HigestRoomItem as RoomItemBattleBanzaiPatch)?.TileWalkOnLogic(puck.LastUserHitPuck); } } else { puck.LastUserHitPuck = null; } if (user.TargetX == puck.X && user.TargetY == puck.Y) { this.DoPuckMath(puck, user.BodyRotation, 6); } else { this.DoPuckMath(puck, user.BodyRotation, 1); } }
//return: was not blocked public bool DoPuckHitTest(RoomItemBattleBanzaiPuck puck, int x, int y, int direction, int blockedDirection) { if (this.Room.RoomItemManager.MoveFloorItemOnRoom(null, puck, x, y, puck.Rot, -1.0, false)) { puck.PuckDirection = direction; return(true); } else { RoomTile tile = this.Room.RoomGamemapManager.GetTile(x, y); if (tile != null && tile.IsInUse) { puck.Power = 0; return(true); } else { puck.PuckDirection = blockedDirection; puck.PuckWaitTime = 3; return(false); } } }
public bool FootballCanMoveTo(RoomItemBattleBanzaiPuck puck, int x, int y) { return(this.Room.RoomItemManager.CanPlaceItemAt(puck, x, y)); }
public void DoPuckMath(RoomItemBattleBanzaiPuck puck, int direction, int power) { int originalX = puck.X; int originalY = puck.Y; double originalZ = puck.Z; int footballX = puck.X; int footballY = puck.Y; puck.Power = power; if (direction == 4) { footballY++; this.DoPuckHitTest(puck, footballX, footballY, 4, 0); } else { if (direction == 0) { footballY--; this.DoPuckHitTest(puck, footballX, footballY, 0, 4); } else { if (direction == 6) { footballX--; this.DoPuckHitTest(puck, footballX, footballY, 6, 2); } else { if (direction == 2) { footballX++; this.DoPuckHitTest(puck, footballX, footballY, 2, 6); } else { if (direction == 3) { footballX++; footballY++; if (!this.DoPuckHitTest(puck, footballX, footballY, 3, 3)) { bool rightAvaible = this.FootballCanMoveTo(puck, puck.X + 1, puck.Y); bool leftAvaible = this.FootballCanMoveTo(puck, puck.X, puck.Y + 1); if (!rightAvaible && !leftAvaible) { puck.PuckDirection = 7; } else if (!rightAvaible && leftAvaible) { puck.PuckDirection = 5; } else { puck.PuckDirection = 1; } puck.PuckWaitTime = 3; } } else { if (direction == 1) { footballX++; footballY--; if (!this.DoPuckHitTest(puck, footballX, footballY, 1, 3)) { bool leftAvaible = this.FootballCanMoveTo(puck, puck.X + 1, puck.Y); bool rightAvaible = this.FootballCanMoveTo(puck, puck.X, puck.Y - 1); if (!leftAvaible && !rightAvaible) { puck.PuckDirection = 5; } else if (leftAvaible) { puck.PuckDirection = 3; } else { puck.PuckDirection = 7; } puck.PuckWaitTime = 3; } } else { if (direction == 7) { footballX--; footballY--; if (!this.DoPuckHitTest(puck, footballX, footballY, 7, 3)) { bool leftAvaible = this.FootballCanMoveTo(puck, puck.X - 1, puck.Y); bool rightAvaible = this.FootballCanMoveTo(puck, puck.X - 1, puck.Y); if (leftAvaible && !rightAvaible) { puck.PuckDirection = 3; } else if (leftAvaible && rightAvaible) { puck.PuckDirection = 5; } else { puck.PuckDirection = 1; } puck.PuckWaitTime = 3; } } else { if (direction == 5) { footballX--; footballY++; if (!this.DoPuckHitTest(puck, footballX, footballY, 5, 3)) { bool leftAvaible = this.FootballCanMoveTo(puck, puck.X - 1, puck.Y); bool rightAvaible = this.FootballCanMoveTo(puck, puck.X, puck.Y + 1); if (!leftAvaible && rightAvaible) { puck.PuckDirection = 3; } else { puck.PuckDirection = 7; } puck.PuckWaitTime = 3; } } } } } } } } } if (originalX == puck.X && originalY == puck.Y) //no movement { return; } this.Room.RoomItemManager.MoveAnimation[puck.ID] = new RoomItemRollerMovement(puck.ID, originalX, originalY, originalZ, 0, puck.X, puck.Y, puck.Z); (this.Room.RoomItemManager.FloorItems.Get(typeof(RoomItemBattleBanzaiPatch)).FirstOrDefault(t => t.X == puck.X && t.Y == puck.Y) as RoomItemBattleBanzaiPatch)?.TileWalkOnLogic(puck.LastUserHitPuck); }