mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2024-11-19 02:46:35 -05:00
Use vectors for object positioning (#587)
* Use d2vector.Position in objects * Remove arbitrary render offset If things are actually wrong lets figure out why * Remove arbitrary wall offset This broke maggot lair
This commit is contained in:
parent
a0c966eeeb
commit
09a6869aea
@ -30,7 +30,7 @@ func (ae *AnimatedEntity) Render(target d2interface.Surface) {
|
|||||||
renderOffset := ae.Position.RenderOffset()
|
renderOffset := ae.Position.RenderOffset()
|
||||||
target.PushTranslation(
|
target.PushTranslation(
|
||||||
int((renderOffset.X()-renderOffset.Y())*16),
|
int((renderOffset.X()-renderOffset.Y())*16),
|
||||||
int(((renderOffset.X()+renderOffset.Y())*8)-5),
|
int(((renderOffset.X() + renderOffset.Y()) * 8)),
|
||||||
)
|
)
|
||||||
|
|
||||||
defer target.Pop()
|
defer target.Pop()
|
||||||
|
@ -75,7 +75,7 @@ func (v *NPC) Render(target d2interface.Surface) {
|
|||||||
renderOffset := v.Position.RenderOffset()
|
renderOffset := v.Position.RenderOffset()
|
||||||
target.PushTranslation(
|
target.PushTranslation(
|
||||||
int((renderOffset.X()-renderOffset.Y())*16),
|
int((renderOffset.X()-renderOffset.Y())*16),
|
||||||
int(((renderOffset.X()+renderOffset.Y())*8)-5),
|
int(((renderOffset.X() + renderOffset.Y()) * 8)),
|
||||||
)
|
)
|
||||||
|
|
||||||
defer target.Pop()
|
defer target.Pop()
|
||||||
|
@ -147,7 +147,7 @@ func (v *Player) Render(target d2interface.Surface) {
|
|||||||
renderOffset := v.Position.RenderOffset()
|
renderOffset := v.Position.RenderOffset()
|
||||||
target.PushTranslation(
|
target.PushTranslation(
|
||||||
int((renderOffset.X()-renderOffset.Y())*16),
|
int((renderOffset.X()-renderOffset.Y())*16),
|
||||||
int(((renderOffset.X()+renderOffset.Y())*8)-5),
|
int(((renderOffset.X() + renderOffset.Y()) * 8)),
|
||||||
)
|
)
|
||||||
|
|
||||||
defer target.Pop()
|
defer target.Pop()
|
||||||
|
@ -264,7 +264,7 @@ func (mr *MapRenderer) renderWall(tile d2ds1.WallRecord, viewport *Viewport, tar
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
viewport.PushTranslationOrtho(-80, float64(tile.YAdjust)-8)
|
viewport.PushTranslationOrtho(-80, float64(tile.YAdjust))
|
||||||
defer viewport.PopTranslation()
|
defer viewport.PopTranslation()
|
||||||
|
|
||||||
target.PushTranslation(viewport.GetTranslationScreen())
|
target.PushTranslation(viewport.GetTranslationScreen())
|
||||||
|
@ -2,25 +2,22 @@
|
|||||||
package d2object
|
package d2object
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"math"
|
|
||||||
"math/rand"
|
"math/rand"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data/d2datadict"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data/d2datadict"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2math/d2vector"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Object represents a composite of animations that can be projected onto the map.
|
// Object represents a composite of animations that can be projected onto the map.
|
||||||
type Object struct {
|
type Object struct {
|
||||||
|
Position d2vector.Position
|
||||||
composite *d2asset.Composite
|
composite *d2asset.Composite
|
||||||
highlight bool
|
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
|
|
||||||
// nameLabel d2ui.Label
|
// nameLabel d2ui.Label
|
||||||
objectRecord *d2datadict.ObjectRecord
|
objectRecord *d2datadict.ObjectRecord
|
||||||
drawLayer int
|
drawLayer int
|
||||||
@ -32,12 +29,7 @@ func CreateObject(x, y int, objectRec *d2datadict.ObjectRecord, palettePath stri
|
|||||||
locX, locY := float64(x), float64(y)
|
locX, locY := float64(x), float64(y)
|
||||||
entity := &Object{
|
entity := &Object{
|
||||||
objectRecord: objectRec,
|
objectRecord: objectRec,
|
||||||
LocationX: locX,
|
Position: d2vector.NewPosition(locX, locY),
|
||||||
LocationY: locY,
|
|
||||||
subcellX: 1 + math.Mod(locX, 5),
|
|
||||||
subcellY: 1 + math.Mod(locY, 5),
|
|
||||||
TileX: x / 5,
|
|
||||||
TileY: y / 5,
|
|
||||||
name: d2common.TranslateString(objectRec.Name),
|
name: d2common.TranslateString(objectRec.Name),
|
||||||
}
|
}
|
||||||
objectType := &d2datadict.ObjectTypes[objectRec.Index]
|
objectType := &d2datadict.ObjectTypes[objectRec.Index]
|
||||||
@ -104,9 +96,10 @@ func (ob *Object) Selectable() bool {
|
|||||||
|
|
||||||
// Render draws this animated entity onto the target
|
// Render draws this animated entity onto the target
|
||||||
func (ob *Object) Render(target d2interface.Surface) {
|
func (ob *Object) Render(target d2interface.Surface) {
|
||||||
|
renderOffset := ob.Position.RenderOffset()
|
||||||
target.PushTranslation(
|
target.PushTranslation(
|
||||||
int((ob.subcellX-ob.subcellY)*16),
|
int((renderOffset.X()-renderOffset.Y())*16),
|
||||||
int(((ob.subcellX + ob.subcellY) * 8)),
|
int(((renderOffset.X() + renderOffset.Y()) * 8)),
|
||||||
)
|
)
|
||||||
|
|
||||||
if ob.highlight {
|
if ob.highlight {
|
||||||
@ -131,12 +124,14 @@ func (ob *Object) GetLayer() int {
|
|||||||
|
|
||||||
// GetPosition of the object
|
// GetPosition of the object
|
||||||
func (ob *Object) GetPosition() (x, y float64) {
|
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
|
// GetPositionF of the object but differently
|
||||||
func (ob *Object) GetPositionF() (x, y float64) {
|
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
|
// Name gets the name of the object
|
||||||
|
Loading…
Reference in New Issue
Block a user