Ejemplo n.º 1
0
        public Boolean Collides(OrientedBoundingBox box)
        {
            try
            {
                GridBlockCollection gridBlockCollection = GridBlocks.GetBlocksNearBoundingBox(box);
                if (gridBlockCollection == null)
                {
                    return(true);
                }

                if (gridBlockCollection.Any(gridBlock => box.Collides(gridBlock.LowBox) || box.Collides(gridBlock.MidBox) || (box.Collides(gridBlock.HighBox) && !gridBlock.HasSkybox)))
                {
                    return(true);
                }

                if (gridBlockCollection.Where(gridBlock => gridBlock.LowBoxTile != null).Any(gridBlock => gridBlock.LowBoxTile.TileBlocks.Where(tileBlock => tileBlock.BottomBoundingBox != null).Any(tileBlock => box.Collides(tileBlock.BottomBoundingBox))))
                {
                    return(true);
                }

                if (Triggers.Where(t => t.TriggerType == TriggerType.Elevator).Where(t => (Int32)System.Math.Floor(box.Origin.X / 64) == t.X1 && (Int32)System.Math.Floor(box.Origin.Y / 64) == t.Y1).Any(t => box.Origin.Z > t.OffHeight && box.Origin.Z < t.Position.Z))
                {
                    return(true);
                }
            }
            catch (Exception)
            {
                return(true);
            }

            return(false);
        }
Ejemplo n.º 2
0
 public Grid()
 {
     GridBlocks            = new GridBlockCollection(true);
     GridObjects           = new GridObjectCollection();
     GridObjectDefinitions = new GridObjectDefinitionCollection();
     Thins    = new ThinCollection();
     Tiles    = new TileCollection(true);
     Triggers = new TriggerCollection(true);
     Pools    = new PoolCollection();
 }
Ejemplo n.º 3
0
        public Boolean LineToBoxIsBlocked(Vector3 startPoint, OrientedBoundingBox targetBox)
        {
            try
            {
                if (targetBox.Corners.Any(t => GridBlocks.GetBlocksInLine(startPoint, t).Count > 0))
                {
                    if (GridBlocks.GetBlocksInLine(startPoint, targetBox.Origin).Count > 0)
                    {
                        return(true);
                    }
                }

                GridBlockCollection gridBlockCollection = GridBlocks.GetBlocksAroundLine(startPoint, targetBox.Origin);

                foreach (GridBlock gridBlock in gridBlockCollection)
                {
                    if (gridBlock.LowBoxTile != null)
                    {
                        foreach (TileBlock tileBlock in gridBlock.LowBoxTile.TileBlocks)
                        {
                            if (tileBlock.TopBoundingBox != null)
                            {
                                if (tileBlock.TopBoundingBox.LineInBox(startPoint, targetBox.Origin))
                                {
                                    return(true);
                                }
                            }

                            if (tileBlock.BottomBoundingBox != null)
                            {
                                if (tileBlock.BottomBoundingBox.LineInBox(startPoint, targetBox.Origin))
                                {
                                    return(true);
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception)
            {
                return(true);
            }

            return(false);
        }
Ejemplo n.º 4
0
        public GridBlock GetHighestGravityBlock(OrientedBoundingBox boundingBox)
        {
            GridBlockCollection gridBlockCollection = GetBlocksNearBoundingBox(boundingBox);

            for (Int32 i = gridBlockCollection.Count - 1; i > 0; i--)
            {
                if (gridBlockCollection[i].LowBoxTopZ < gridBlockCollection[i - 1].LowBoxTopZ)
                {
                    gridBlockCollection.RemoveAt(i);
                }
                else
                {
                    gridBlockCollection.RemoveAt(i - 1);
                }
            }

            return(gridBlockCollection[0]);
        }
Ejemplo n.º 5
0
        public GridBlockCollection GetBlocksAroundLine(Vector3 startPoint, Vector3 endPoint)
        {
            GridBlockCollection gridBlockCollection = new GridBlockCollection(false);

            Vector3 currentPoint     = startPoint;
            Vector3 direction        = Vector3.Normalize(endPoint - startPoint);
            Single  originalDistance = Vector3.Distance(currentPoint, endPoint);

            while (Vector3.Distance(startPoint, currentPoint) < originalDistance)
            {
                GridBlock block = GetBlockByLocation(currentPoint.X, currentPoint.Y);

                if (block != null && !gridBlockCollection.Contains(block))
                {
                    gridBlockCollection.Add(block);
                }

                currentPoint += direction;
            }

            for (Int32 i = gridBlockCollection.Count - 1; i >= 0; i--)
            {
                GridBlock block = gridBlockCollection[i];
                if (block == null)
                {
                    continue;
                }

                if (block.ContainerBox == null)
                {
                    continue;
                }
                if (block.ContainerBox.LineInBox(startPoint, endPoint))
                {
                    continue;
                }

                gridBlockCollection.RemoveAt(i);
            }

            return(gridBlockCollection);
        }
Ejemplo n.º 6
0
        public Boolean TileCollides(OrientedBoundingBox box)
        {
            GridBlockCollection gridBlockCollection = GridBlocks.GetBlocksNearBoundingBox(box);

            if (gridBlockCollection.Count == 0)
            {
                return(false);
            }

            foreach (GridBlock gridBlock in gridBlockCollection)
            {
                if (gridBlock != null && gridBlock.LowBoxTile != null)
                {
                    foreach (TileBlock tileBlock in gridBlock.LowBoxTile.TileBlocks)
                    {
                        if (tileBlock.TopBoundingBox != null)
                        {
                            if (box.Collides(tileBlock.TopBoundingBox))
                            {
                                return(true);
                            }
                        }

                        if (tileBlock.BottomBoundingBox != null)
                        {
                            if (box.Collides(tileBlock.BottomBoundingBox))
                            {
                                return(true);
                            }
                        }
                    }
                }
            }

            return(false);
        }
Ejemplo n.º 7
0
        public Grid(Grid grid)
        {
            GridBlocks = grid.GridBlocks;
            Thins      = grid.Thins;
            Tiles      = grid.Tiles;
            Triggers   = new TriggerCollection(false);

            foreach (Trigger t in grid.Triggers)
            {
                Trigger nTrigger = new Trigger
                {
                    Duration          = null,
                    Cooldown          = new Interval(2000, false),
                    Enabled           = t.Enabled,
                    EndAngle          = t.EndAngle,
                    InitialState      = t.InitialState,
                    IsFromValhalla    = t.IsFromValhalla,
                    MaxAngleRate      = t.MaxAngleRate,
                    MaxRate           = t.MaxRate,
                    MoveCeiling       = t.MoveCeiling,
                    MoveFloor         = t.MoveFloor,
                    MoveRooftop       = t.MoveRooftop,
                    NextTrigger       = t.NextTrigger,
                    NextTriggerTiming = t.NextTriggerTiming,
                    OffHeight         = t.OffHeight,
                    OffSound          = t.OffSound,
                    OffText           = t.OffText,
                    OnHeight          = t.OnHeight,
                    OnSound           = t.OnSound,
                    OnText            = t.OnText,
                    Position          = new Vector3(t.Position.X, t.Position.Y, t.Position.X),
                    Random            = t.Random,
                    ResetTimer        = t.ResetTimer,
                    SlideAmount       = t.SlideAmount,
                    SlideAxis         = t.SlideAxis,
                    Speed             = t.Speed,
                    StartAngle        = t.StartAngle,
                    CurrentState      = TriggerState.Inactive,
                    Team        = t.Team,
                    TextureOff  = t.TextureOff,
                    TextureOn   = t.TextureOn,
                    TriggerId   = t.TriggerId,
                    TriggerType = t.TriggerType,
                    X0          = t.X0,
                    X1          = t.X1,
                    X2          = t.X2,
                    X3          = t.X3,
                    X4          = t.X4,
                    Y0          = t.Y0,
                    Y1          = t.Y1,
                    Y2          = t.Y2,
                    Y3          = t.Y3,
                    Y4          = t.Y4
                };

                Triggers.Add(nTrigger);
            }

            BalanceShrine = new Shrine(grid.BalanceShrine.Team, grid.BalanceShrine.ShrineId, grid.BalanceShrine.Power, grid.BalanceShrine.CurrentBias);
            ChaosShrine   = new Shrine(grid.ChaosShrine.Team, grid.ChaosShrine.ShrineId, grid.ChaosShrine.Power, grid.ChaosShrine.CurrentBias);
            OrderShrine   = new Shrine(grid.OrderShrine.Team, grid.OrderShrine.ShrineId, grid.OrderShrine.Power, grid.OrderShrine.CurrentBias);

            GameName     = grid.GameName;
            GridFilename = grid.GridFilename;
            GridId       = grid.GridId;
            MaxPlayers   = grid.MaxPlayers;
            MiscFilename = grid.MiscFilename;
            Name         = grid.Name;

            Pools = new PoolCollection();
            foreach (Pool p in grid.Pools)
            {
                Pools.Add(new Pool(p));
            }

            ShortGameName   = grid.ShortGameName;
            TimeLimit       = grid.TimeLimit;
            TriggerFilename = grid.TriggerFilename;
            WorldFilename   = grid.WorldFilename;
            ExpBonus        = grid.ExpBonus;
        }