Difference between revisions of "Coordinate Functions"
Jump to navigation
Jump to search
imported>Rasikko |
imported>Rasikko |
||
(7 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
Putting my coordinate functions here since my personal pages are getting too big. | Putting my coordinate functions here since my personal pages are getting too big. | ||
This function converts the objects current x, y position in the world to coordinates. These functions are to be used in exterior cells only. | |||
<source lang="papyrus"> | <source lang="papyrus"> | ||
Int[] Function GetCellCoordinates(ObjectReference akRef) | Int[] Function GetCellCoordinates(ObjectReference akRef) | ||
Line 28: | Line 29: | ||
</source> | </source> | ||
<br> | <br> | ||
The following requires GetCellCoordinates(). To explain what the function below does, the origin in the game, for example has the x axis | The following requires GetCellCoordinates(). To explain what the function below does, the origin in the game, for example has the x axis starting position of 0. | ||
<source lang=" | <source lang="papyrus"> | ||
Int[] Function GetCellStartingWorldPositions(Int[] aiCoordinates) | Int[] Function GetCellStartingWorldPositions(Int[] aiCoordinates) | ||
; Returns an array of starting world positions for this cell. | ; Returns an array of starting world positions for this cell. | ||
Line 39: | Line 40: | ||
coordinateX = coordinateX * 4096 + 4096 | coordinateX = coordinateX * 4096 + 4096 | ||
else | else | ||
coordinateX + 4096 | |||
endif | |||
if coordinateY < 0 | if coordinateY < 0 | ||
coordinateY = coordinateY * 4096 + 4096 | |||
else | else | ||
coordinateY + 4096 | |||
endif | endif | ||
Line 52: | Line 53: | ||
return startPos | return startPos | ||
EndFunction | |||
</source> | |||
<br> | |||
This function returns all the cells that is around the object. | |||
<source lang="papyrus"> | |||
Int[] Function GetAdjacentCells(Int aiCoordinateX, Int aiCoordinateY) | |||
; returns the north, south, east and west cells adajcent to the current cell. | |||
; 0-1: North XY, 2-3 = South XY, 4-5 = East XY, 6-7 = West XY | |||
Int[] AdjacentCells = new Int[8] | |||
AdjacentCells[0] = aiCoordinateX | |||
AdjacentCells[1] = aiCoordinateY + 1 | |||
AdjacentCells[2] = aiCoordinateX | |||
AdjacentCells[3] = aiCoordinateY - 1 | |||
AdjacentCells[4] = aiCoordinateX + 1 | |||
AdjacentCells[5] = aiCoordinateY | |||
AdjacentCells[6] = aiCoordinateX - 1 | |||
AdjacentCells[7] = aiCoordinateY | |||
return AdjacentCells | |||
EndFunction | |||
</source> | |||
<br> | |||
How far long an object is on either x or y axis of particular cell. While GetPostionXYZ returns the positions in the world, GetLocalX and Y returns positions in the cell. | |||
<source lang="papyrus"> | |||
Int Function GetLocalPositionX(Int aiPosX, Int aiCellStartX) | |||
; Returns the position of an object local to the cell it is in. | |||
if aiPosX < 0 | |||
return (aiPosX - aicellStartX) * -1 | |||
endif | |||
return aiPosX - aicellStartX | |||
endFunction | |||
Int Function GetLocalPositionY(Int aiPosY, Int aiCellStartY) | |||
; Return the y position of an object local to the cell it is in. | |||
if aiPosY < 0 | |||
return (aiPosY - aicellStartY) * -1 | |||
endif | |||
return aiPosY - aicellStartY | |||
EndFunction | EndFunction | ||
</source> | </source> |
Latest revision as of 09:39, 4 September 2021
Putting my coordinate functions here since my personal pages are getting too big.
This function converts the objects current x, y position in the world to coordinates. These functions are to be used in exterior cells only.
Int[] Function GetCellCoordinates(ObjectReference akRef)
; Returns an array of this references' cell coordinates.
int posX = akRef.GetPositionX() as int
int posY = akRef.GetPositionY() as int
if (posX < 0)
posX = (posX / 4096) - 1
else
posX = posX / 4096
endif
if (posY < 0)
posY = (posY / 4096) - 1
else
posY = posY / 4096
endif
Int[] CellCoordinates = new Int[2]
CellCoordinates[0] = posX
CellCoordinates[1] = posY
return CellCoordinates
EndFunction
The following requires GetCellCoordinates(). To explain what the function below does, the origin in the game, for example has the x axis starting position of 0.
Int[] Function GetCellStartingWorldPositions(Int[] aiCoordinates)
; Returns an array of starting world positions for this cell.
Int coordinateX = aiCoordinates[0]
Int coordinateY = aiCoordinates[1]
Int[] startPos = new int[2]
if coordinateX < 0
coordinateX = coordinateX * 4096 + 4096
else
coordinateX + 4096
endif
if coordinateY < 0
coordinateY = coordinateY * 4096 + 4096
else
coordinateY + 4096
endif
startPos[0] = coordinateX
startPos[1] = coordinateY
return startPos
EndFunction
This function returns all the cells that is around the object.
Int[] Function GetAdjacentCells(Int aiCoordinateX, Int aiCoordinateY)
; returns the north, south, east and west cells adajcent to the current cell.
; 0-1: North XY, 2-3 = South XY, 4-5 = East XY, 6-7 = West XY
Int[] AdjacentCells = new Int[8]
AdjacentCells[0] = aiCoordinateX
AdjacentCells[1] = aiCoordinateY + 1
AdjacentCells[2] = aiCoordinateX
AdjacentCells[3] = aiCoordinateY - 1
AdjacentCells[4] = aiCoordinateX + 1
AdjacentCells[5] = aiCoordinateY
AdjacentCells[6] = aiCoordinateX - 1
AdjacentCells[7] = aiCoordinateY
return AdjacentCells
EndFunction
How far long an object is on either x or y axis of particular cell. While GetPostionXYZ returns the positions in the world, GetLocalX and Y returns positions in the cell.
Int Function GetLocalPositionX(Int aiPosX, Int aiCellStartX)
; Returns the position of an object local to the cell it is in.
if aiPosX < 0
return (aiPosX - aicellStartX) * -1
endif
return aiPosX - aicellStartX
endFunction
Int Function GetLocalPositionY(Int aiPosY, Int aiCellStartY)
; Return the y position of an object local to the cell it is in.
if aiPosY < 0
return (aiPosY - aicellStartY) * -1
endif
return aiPosY - aicellStartY
EndFunction