Difference between revisions of "Coordinate Functions"

From the CreationKit Wiki
Jump to navigation Jump to search
imported>Rasikko
imported>Rasikko
(Undo revision 52768 by Rasikko (talk))
 
(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 positions of 0, 4096, respectively.
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="papryus">
<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
    coordinateX + 4096
    endif
        endif
if coordinateY < 0
if coordinateY < 0
coordinateY = coordinateY * 4096 + 4096
    coordinateY = coordinateY * 4096 + 4096
else
else
coordinateY + 4096
    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