Пример #1
0
        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);
            }
        }
Пример #2
0
 //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);
         }
     }
 }
Пример #3
0
 public bool FootballCanMoveTo(RoomItemBattleBanzaiPuck puck, int x, int y)
 {
     return(this.Room.RoomItemManager.CanPlaceItemAt(puck, x, y));
 }
Пример #4
0
        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);
        }