Difference between revisions of "Talk:FindClosestActorFromRef - Game"
Talk:FindClosestActorFromRef - Game (edit)
Revision as of 02:58, 2 January 2018
, 02:58, 2 January 2018→SKSE alternative: Cleaned up function to make more readible.
imported>Rasikko |
imported>Rasikko m (→SKSE alternative: Cleaned up function to make more readible.) |
||
Line 3: | Line 3: | ||
<source lang="papyrus"> | <source lang="papyrus"> | ||
Actor Function GetClosestActorFromRef(ObjectReference akCenter) Global | Actor Function GetClosestActorFromRef(ObjectReference akCenter) Global | ||
; | ;/ Returns the closest actor to akCenter. akCenter is excluded from the search. | ||
*1. Check if there is more than 128 actors or only akCenter. | |||
*2. Iterate through all actors found and record their distances to the player. | |||
*3. Find the smallest distance from the player and return the actor. | |||
*4. Valid types for actors: 43 or 62 | |||
/; | |||
ObjectReference[] kRefs = new ObjectReference[128] | ObjectReference[] kRefs = new ObjectReference[128] | ||
Float[] fDistances = new Float[128] | Float[] fDistances = new Float[128] | ||
Cell kCell = akCenter.GetParentCell() | Cell kCell = akCenter.GetParentCell() | ||
Int CellRefs = kCell.GetNumRefs(43) | |||
Int CellRefs = kCell.GetNumRefs(43) | |||
Float fLowestValue = 1000000.0 | Float fLowestValue = 1000000.0 | ||
Int i | |||
if (CellRefs >= 129 || CellRefs == 1) | if (CellRefs >= 129 || CellRefs == 1) | ||
return none | return none | ||
Line 37: | Line 35: | ||
endWhile | endWhile | ||
Int refIndex = fDistances.Find(fLowestValue) | |||
return kRefs[refIndex] as Actor | return kRefs[refIndex] as Actor | ||
EndFunction | EndFunction | ||
</source> | </source> | ||
How fast this function returns, depends on how many actors are in the cell. --[[User:Rasikko|Rasikko]] ([[User talk:Rasikko|talk]]) 2018-01-02T02:58:34 (EST) |