diff --git a/d2core/d2map/d2mapentity/animated_entity.go b/d2core/d2map/d2mapentity/animated_entity.go index cead298e..70b47f4e 100644 --- a/d2core/d2map/d2mapentity/animated_entity.go +++ b/d2core/d2map/d2mapentity/animated_entity.go @@ -30,7 +30,7 @@ func (ae *AnimatedEntity) Render(target d2interface.Surface) { renderOffset := ae.Position.RenderOffset() target.PushTranslation( int((renderOffset.X()-renderOffset.Y())*16), - int(((renderOffset.X()+renderOffset.Y())*8)-5), + int(((renderOffset.X() + renderOffset.Y()) * 8)), ) defer target.Pop() diff --git a/d2core/d2map/d2mapentity/npc.go b/d2core/d2map/d2mapentity/npc.go index aea49d95..1c3fc17f 100644 --- a/d2core/d2map/d2mapentity/npc.go +++ b/d2core/d2map/d2mapentity/npc.go @@ -75,7 +75,7 @@ func (v *NPC) Render(target d2interface.Surface) { renderOffset := v.Position.RenderOffset() target.PushTranslation( int((renderOffset.X()-renderOffset.Y())*16), - int(((renderOffset.X()+renderOffset.Y())*8)-5), + int(((renderOffset.X() + renderOffset.Y()) * 8)), ) defer target.Pop() diff --git a/d2core/d2map/d2mapentity/player.go b/d2core/d2map/d2mapentity/player.go index 20b5c143..36ff178f 100644 --- a/d2core/d2map/d2mapentity/player.go +++ b/d2core/d2map/d2mapentity/player.go @@ -147,7 +147,7 @@ func (v *Player) Render(target d2interface.Surface) { renderOffset := v.Position.RenderOffset() target.PushTranslation( int((renderOffset.X()-renderOffset.Y())*16), - int(((renderOffset.X()+renderOffset.Y())*8)-5), + int(((renderOffset.X() + renderOffset.Y()) * 8)), ) defer target.Pop() diff --git a/d2core/d2map/d2maprenderer/renderer.go b/d2core/d2map/d2maprenderer/renderer.go index 828c50fb..2fa954ae 100644 --- a/d2core/d2map/d2maprenderer/renderer.go +++ b/d2core/d2map/d2maprenderer/renderer.go @@ -264,7 +264,7 @@ func (mr *MapRenderer) renderWall(tile d2ds1.WallRecord, viewport *Viewport, tar return } - viewport.PushTranslationOrtho(-80, float64(tile.YAdjust)-8) + viewport.PushTranslationOrtho(-80, float64(tile.YAdjust)) defer viewport.PopTranslation() target.PushTranslation(viewport.GetTranslationScreen()) diff --git a/d2core/d2object/object.go b/d2core/d2object/object.go index ac3a40de..57943546 100644 --- a/d2core/d2object/object.go +++ b/d2core/d2object/object.go @@ -2,25 +2,22 @@ package d2object import ( - "math" "math/rand" "github.com/OpenDiablo2/OpenDiablo2/d2common" "github.com/OpenDiablo2/OpenDiablo2/d2common/d2data/d2datadict" "github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum" "github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface" + "github.com/OpenDiablo2/OpenDiablo2/d2common/d2math/d2vector" "github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource" "github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset" ) // Object represents a composite of animations that can be projected onto the map. type Object struct { - composite *d2asset.Composite - highlight bool - LocationX float64 - LocationY float64 - TileX, TileY int // Coordinates of the tile the unit is within - subcellX, subcellY float64 // Subcell coordinates within the current tile + Position d2vector.Position + composite *d2asset.Composite + highlight bool // nameLabel d2ui.Label objectRecord *d2datadict.ObjectRecord drawLayer int @@ -32,12 +29,7 @@ func CreateObject(x, y int, objectRec *d2datadict.ObjectRecord, palettePath stri locX, locY := float64(x), float64(y) entity := &Object{ objectRecord: objectRec, - LocationX: locX, - LocationY: locY, - subcellX: 1 + math.Mod(locX, 5), - subcellY: 1 + math.Mod(locY, 5), - TileX: x / 5, - TileY: y / 5, + Position: d2vector.NewPosition(locX, locY), name: d2common.TranslateString(objectRec.Name), } objectType := &d2datadict.ObjectTypes[objectRec.Index] @@ -104,9 +96,10 @@ func (ob *Object) Selectable() bool { // Render draws this animated entity onto the target func (ob *Object) Render(target d2interface.Surface) { + renderOffset := ob.Position.RenderOffset() target.PushTranslation( - int((ob.subcellX-ob.subcellY)*16), - int(((ob.subcellX + ob.subcellY) * 8)), + int((renderOffset.X()-renderOffset.Y())*16), + int(((renderOffset.X() + renderOffset.Y()) * 8)), ) if ob.highlight { @@ -131,12 +124,14 @@ func (ob *Object) GetLayer() int { // GetPosition of the object func (ob *Object) GetPosition() (x, y float64) { - return float64(ob.TileX), float64(ob.TileY) + w := ob.Position.Tile() + return w.X(), w.Y() } // GetPositionF of the object but differently func (ob *Object) GetPositionF() (x, y float64) { - return float64(ob.TileX) + (ob.subcellX / 5.0), float64(ob.TileY) + ob.subcellY/5.0 + w := ob.Position.World() + return w.X(), w.Y() } // Name gets the name of the object