Example #1
0
        public MapObjectGround(int tileID, Position3D position)
            : base(position)
        {
            ItemID = tileID;
            m_normals = new Vector3[4];
            SortThreshold = -1;
            SortTiebreaker = -1;

            // set no draw flag
            m_noDraw = (ItemID < 3 || (ItemID >= 0x1AF && ItemID <= 0x1B5));

            // get draw data
            UltimaData.LandData landData = UltimaData.TileData.LandData[ItemID & 0x3FFF];
            if (landData.TextureID <= 0)
            {
                m_draw_3DStretched = false;
                m_draw_texture = UltimaData.ArtData.GetLandTexture(ItemID);
                m_draw_width = m_draw_height = 44;
                m_draw_X = 0;
                m_draw_Y = (int)(Z * 4);
                m_draw_hue = Vector2.Zero;
                m_pickType = PickTypes.PickGroundTiles;
                m_draw_flip = false;
            }
            else
            {
                m_draw_3DStretched = true;
                m_draw_texture = UltimaData.TexmapData.GetTexmapTexture(landData.TextureID);
            }

            // set pick type
            m_pickType = PickTypes.PickGroundTiles;
        }
Example #2
0
        public MapObjectDynamic(DynamicObject entity, Position3D position, int itemID, int frame, int hue, bool useGumpArt)
            : base(position)
        {
            OwnerEntity = entity;
            ItemID = itemID;
            m_frame = frame;

            // set up draw variables
            if (useGumpArt)
            {
                m_draw_texture = UltimaData.GumpData.GetGumpXNA(ItemID + frame);
                m_draw_width = m_draw_texture.Width;
                m_draw_height = m_draw_texture.Height;
                m_draw_X = (m_draw_width >> 1);
                m_draw_Y = (int)(Z * 4) + m_draw_height - 22;
            }
            else
            {
                m_draw_texture = UltimaData.ArtData.GetStaticTexture(ItemID + frame);
                m_draw_width = m_draw_texture.Width;
                m_draw_height = m_draw_texture.Height;
                m_draw_X = (m_draw_width >> 1) - 22;
                m_draw_Y = (int)(Z * 4) + m_draw_height - 44;
            }
            m_draw_hue = Utility.GetHueVector(hue);
            m_pickType = PickTypes.PickNothing;
            m_draw_flip = false;
        }
Example #3
0
        public MapObjectStatic(int staticTileID, int sortInfluence, Position3D position)
            : base(position)
        {
            ItemID = staticTileID;
            SortTiebreaker = sortInfluence;

            m_itemData = UltimaData.TileData.ItemData[ItemID & 0x3FFF];

            // Set threshold.
            int background = (m_itemData.IsBackground) ? 0 : 1;
            if (!m_itemData.IsBackground)
                SortThreshold++;
            if (!(m_itemData.Height == 0))
                SortThreshold++;
            if (m_itemData.IsSurface)
                SortThreshold--;

            // get no draw flag
            if (m_itemData.Name == "nodraw" || ItemID <= 0)
                m_noDraw = true;

            // set up draw variables
            m_draw_texture = UltimaData.ArtData.GetStaticTexture(ItemID);
            m_draw_width = m_draw_texture.Width;
            m_draw_height = m_draw_texture.Height;
            m_draw_X = (m_draw_width >> 1) - 22;
            m_draw_Y = (int)(Z * 4) + m_draw_height - 44;
            m_draw_hue = Vector2.Zero;
            m_pickType = PickTypes.PickStatics;
            m_draw_flip = false;
        }
Example #4
0
        public MapObjectText(Position3D position, BaseEntity ownerEntity, string text, int hue, int fontID)
            : base(position)
        {
            OwnerEntity = ownerEntity;
            Hue = hue;
            FontID = fontID;

            // set up draw data
            m_draw_texture = Texture = ASCIIText.GetTextTexture(text, 1);
            m_draw_width = m_draw_texture.Width;
            m_draw_height = m_draw_texture.Height;
            m_draw_X = (m_draw_width >> 1) - 22 - (int)((Position.X_offset - Position.Y_offset) * 22);
            m_draw_Y = ((int)Position.Z_offset * 4) + m_draw_height - 44 - (int)((Position.X_offset + Position.Y_offset) * 22);
            m_draw_hue = Utility.GetHueVector(Hue);
            m_pickType = PickTypes.PickObjects;
            m_draw_flip = false;
        }
Example #5
0
        public MapObjectItem(int itemID, Position3D position, int direction, BaseEntity ownerEntity, int hue)
            : base(position)
        {
            ItemID = itemID;
            OwnerEntity = ownerEntity;
            Facing = direction;
            Hue = hue;

            // set up draw data
            m_draw_texture = UltimaData.ArtData.GetStaticTexture(ItemID);
            m_draw_width = m_draw_texture.Width;
            m_draw_height = m_draw_texture.Height;
            m_draw_X = (m_draw_width >> 1) - 22;
            m_draw_Y = (int)(Z * 4) + m_draw_height - 44;
            m_draw_hue = Utility.GetHueVector(Hue);
            m_pickType = PickTypes.PickObjects;
            m_draw_flip = false;
        }
Example #6
0
        public MapObjectMobile(Position3D position, int facing, int action, float frame, BaseEntity ownerEntity)
            : base(position)
        {
            if (frame >= 1.0f)
                return;

            m_layers = new MapObjectMobileLayer[(int)EquipLayer.LastUserValid];

            Facing = facing;
            Action = action;
            m_frame = frame;
            OwnerEntity = ownerEntity;

            // set pick type
            m_pickType = PickTypes.PickObjects;

            // set up draw data
            m_draw_flip = (Facing > 4) ? true : false;
            m_draw_IsometricOverlap = true;
        }
Example #7
0
        public MapObjectCorpse(Position3D position, int direction, BaseEntity ownerEntity, int nHue, int bodyID, float frame)
            : base(0x2006, position, direction, ownerEntity, nHue)
        {
            BodyID = bodyID;
            FrameIndex = (int)(frame * UltimaData.BodyConverter.DeathAnimationFrameCount(bodyID));

            UltimaData.AnimationFrame iFrame = getFrame();
            if (iFrame == null)
            {
                m_noDraw = true;
                return;
            }
            m_draw_texture = iFrame.Texture;
            m_draw_width = m_draw_texture.Width;
            m_draw_height = m_draw_texture.Height;
            m_draw_X = iFrame.Center.X - 22;
            m_draw_Y = iFrame.Center.Y + (int)(Z * 4) + m_draw_height - 22;
            m_draw_hue = Utility.GetHueVector(Hue);
            m_pickType = PickTypes.PickObjects;
            m_draw_flip = false;
        }
Example #8
0
        private Position3D getNextTile(Position3D current, Position3D goal, out Direction facing)
        {
            facing = getNextFacing(current, goal);
            Vector3 nextTile = MovementCheck.OffsetTile(current.Tile_V3, facing);

            int nextAltitude;
            bool moveIsOkay = MovementCheck.CheckMovement((Mobile)m_entity, IsometricRenderer.Map, current.Tile_V3, facing, out nextAltitude);
            nextTile.Z = nextAltitude;
            if (moveIsOkay)
            {
                if (IsRunning)
                    facing |= Direction.Running;
                return new Position3D(nextTile);
            }
            else
            {
                return null;
            }
        }
Example #9
0
        private Direction getNextFacing(Position3D current, Position3D goal)
        {
            Direction facing;

            if (goal.X < current.X)
            {
                if (goal.Y < current.Y)
                    facing = Direction.Up;
                else if (goal.Y > current.Y)
                    facing = Direction.Left;
                else
                    facing = Direction.West;
            }
            else if (goal.X > current.X)
            {
                if (goal.Y < current.Y)
                    facing = Direction.Right;
                else if (goal.Y > current.Y)
                    facing = Direction.Down;
                else
                    facing = Direction.East;
            }
            else
            {
                if (goal.Y < current.Y)
                    facing = Direction.North;
                else if (goal.Y > current.Y)
                    facing = Direction.South;
                else
                {
                    // We should never reach this.
                    facing = Facing & Direction.FacingMask;
                }
            }

            return facing;
        }
Example #10
0
        public void Update(double frameMS)
        {
            flushDrawObjects();
            // Are we moving? (if our current location != our destination, then we are moving)
            if (IsMoving)
            {
                MoveSequence += ((float)(frameMS) / TimeToCompleteMove(Facing).Milliseconds);

                if (MoveSequence < 1f)
                {
                    m_currentPosition.Offset_V3 = (m_goalPosition.Tile_V3 - m_currentPosition.Tile_V3) * MoveSequence;
                }
                else
                {
                    m_currentPosition = m_goalPosition;
                    MoveSequence = 0f;
                }
            }
            else
            {
                MoveEvent moveEvent;
                int sequence;
                while ((moveEvent = m_moveEvents.GetMoveEvent(out sequence)) != null)
                {
                    if (m_entity.IsClientEntity)
                        SendMoveRequestPacket(new MoveRequestPacket((byte)moveEvent.Facing, (byte)sequence, moveEvent.Fastwalk));
                    Facing = (Direction)moveEvent.Facing;
                    Position3D p = new Position3D(
                        moveEvent.X, moveEvent.Y, moveEvent.Z);
                    if (p != m_currentPosition)
                    {
                        m_goalPosition = p;
                        return;
                    }
                }

            }
        }
Example #11
0
 public void Move_Instant(int x, int y, int z, int facing)
 {
     m_moveEvents.ResetMoveSequence();
     flushDrawObjects();
     Facing = ((Direction)facing & Direction.FacingMask);
     m_goalPosition = m_currentPosition = new Position3D(x, y, z);
 }
Example #12
0
 internal void drawOverheads(MapTile tile, Position3D position)
 {
     // base entities do not draw, but they can have overheads, so we draw those.
     foreach (KeyValuePair<int, Overhead> overhead in m_overheads)
     {
         if (!overhead.Value.IsDisposed)
             overhead.Value.Draw(tile, position);
     }
 }
Example #13
0
 public AMapObject(Position3D position)
 {
     Position = position;
 }
Example #14
0
 internal override void Draw(MapTile tile, Position3D position)
 {
     tile.FlushObjectsBySerial(Serial);
     int hue = m_isHued ? m_hue : 0;
     tile.AddMapObject(new MapObjectDynamic(this, position, m_baseItemID, (int)(m_frameSequence * m_frameLength), hue, m_useGumpArtInsteadOfTileArt));
 }
Example #15
0
        internal override void Draw(MapTile tile, Position3D position)
        {
            if (Ignored)
                return;

            tile.AddMapObject(new MapObjectItem(DisplayItemID, position, DrawFacing, this, Hue));
            drawOverheads(tile, new Position3D(position.Point_V3));
        }
Example #16
0
 public Movement(BaseEntity entity)
 {
     m_entity = entity;
     m_currentPosition = new Position3D();
     m_moveEvents = new MoveEvents();
 }
Example #17
0
 internal override void Draw(MapTile tile, Position3D position)
 {
     m_movement.ClearImmediate();
     tile.AddMapObject(new MapObjectCorpse(position, DrawFacing, this, Hue, m_corpseBody, m_corpseFrame));
     drawOverheads(tile, new Position3D(m_movement.Position.Point_V3));
 }
Example #18
0
        internal override void Draw(MapTile tile, Position3D position)
        {
            if (IsMoving)
            {
                if (IsRunning)
                    m_animation.Animate(MobileAction.Run);
                else
                    m_animation.Animate(MobileAction.Walk);
            }
            else
            {
                if (!m_animation.IsAnimating)
                    m_animation.Animate(MobileAction.Stand);
            }

            MapObjectMobile mobtile = new MapObjectMobile(position, DrawFacing, m_animation.ActionIndex, m_animation.AnimationFrame, this);
            tile.AddMapObject(mobtile);

            int[] drawLayers = m_DrawLayerOrder;
            bool hasOuterTorso = m_equipment[(int)EquipLayer.OuterTorso] != null && m_equipment[(int)EquipLayer.OuterTorso].AnimationDisplayID != 0;

            for (int i = 0; i < drawLayers.Length; i++)
            {
                // when wearing something on the outer torso the other torso stuff is not drawn
                if (hasOuterTorso && (drawLayers[i] == (int)EquipLayer.InnerTorso || drawLayers[i] == (int)EquipLayer.MiddleTorso))
                {
                    continue;
                }

                if (drawLayers[i] == (int)EquipLayer.Body)
                {
                    mobtile.AddLayer(BodyID, Hue);
                }
                else if (m_equipment[drawLayers[i]] != null && m_equipment[drawLayers[i]].AnimationDisplayID != 0)
                {
                    mobtile.AddLayer(m_equipment[drawLayers[i]].AnimationDisplayID, m_equipment[drawLayers[i]].Hue);
                }
            }
            drawOverheads(tile, new Position3D(m_movement.Position.Tile_V3));
        }
Example #19
0
 internal virtual void Draw(MapTile tile, Position3D position)
 {
 }
Example #20
0
 internal override void Draw(MapTile tile, Position3D position)
 {
     // string text = Utility.WrapASCIIText(m_font, m_text, 200);
     // tile.Add(new TileEngine.MapObjectText(position, m_ownerEntity, text, m_hue, m_font));
 }
 public MapObjectPrerendered(Position3D position)
     : base(position)
 {
     m_objects.Add(this);
 }
Example #22
0
        internal override void Draw(MapTile tile, Position3D position)
        {
            if (m_unloadedTiles.Count == 0)
                return;

            List<Point> drawnTiles = new List<Point>();

            foreach (Point p in m_unloadedTiles)
            {
                int x = tile.X + p.X - m_components.Center.X;
                int y = tile.Y + p.Y - m_components.Center.Y;

                MapTile t = IsometricRenderer.Map.GetMapTile(x, y, false);
                if (t != null)
                {
                    drawnTiles.Add(p);

                    if (!m_hasCustomTiles)
                    {
                        if (p.X < m_components.Width && p.Y < m_components.Height)
                        {
                            foreach (StaticTile s in m_components.Tiles[p.X][p.Y])
                            {
                                t.AddMapObject(new MapObjectStatic(s.ID, 0, new Position3D(x, y, s.Z)));
                            }
                        }
                    }
                    else
                    {
                        foreach (StaticTile s in m_customHouseTiles)
                        {
                            if ((s.X == p.X) && (s.Y == p.Y))
                            {
                                t.AddMapObject(new MapObjectStatic(s.ID, 0, new Position3D(s.X, s.Y, s.Z)));
                            }
                        }
                    }
                }
            }

            foreach (Point p in drawnTiles)
            {
                m_unloadedTiles.Remove(p);
            }
        }