User Tools

Site Tools


4rpl:commands:setunitcell

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
4rpl:commands:setunitcell [2021/09/15 14:49] – added another example Grabz4rpl:commands:setunitcell [2025/02/14 14:57] (current) – external edit 127.0.0.1
Line 15: Line 15:
 <code 4rpl> <code 4rpl>
 SetUnitCell(<-UID <-posX <-posZ true) SetUnitCell(<-UID <-posX <-posZ true)
-</code> 
-===== Handling all the cases ===== 
-Here's an example of how to handle all the cases with setting custom occupied count on a unit. This is an example of a 9x9 unit that only wants the outer rim of the unit to occupy space, with a hollow middle. Make sure the unit is set to not occupy land in unit settings. 
-<code 4rpl> 
-:Awake 
- once 
- RegisterForMSG("MSG_PostUpdate" "PostUpdate") 
- endonce 
-:Once 
- @Awake 
-:PostUpdate 
- Self GetUnitMoveCell pop ->POU_iMoveCell 
- Self GetUnitCell ->POU_iZ ->POU_iX 
-  
- #If a movable unit is moved by the player 
- #Remove custom occupied cells when the unit takes off 
- #Add them back when the unit has landed 
- <-POU_iMoveCell <-POU_iLastMoveCell neq if 
- <-POU_iMoveCell -1 eq if 
- Self GetUnitCell TRUE @SetCustomOccupiedLand 
- else 
- Self GetUnitCell FALSE @SetCustomOccupiedLand 
- endif 
- #Update occupied count when the unit is forcibly moved in the editor 
- #Only occurs when the unit is landed 
- else <-POU_iMoveCell -1 eq if 
- <-POU_iLastX <-POU_iX neq <-POU_iLastZ <-POU_iZ neq or if 
- <-POU_iLastX <-POU_iLastZ FALSE @SetCustomOccupiedLand 
- <-POU_iX <-POU_iZ TRUE @SetCustomOccupiedLand 
- endif 
- endif endif 
-  
- <-POU_iZ <-POU_iX ->POU_iLastX ->POU_iLastZ 
- <-POU_iMoveCell ->POU_iLastMoveCell 
-#i1 i2 b3 - 
-#Uniformly set or unset a chunk of occupied land 
-#Arguments: CellX and CellY of the last position (if unsetting) or current position (if setting), 
-#           boolean that determines if to set or unset 
-#Result: None 
-:SetCustomOccupiedLand 
- ->SOL_bSet ->SOL_iCellZ ->SOL_iCellX 
- 4 ->SOL_iRadius 
- <-SOL_iCellZ <-SOL_iRadius add 1 add <-SOL_iCellZ <-SOL_iRadius sub do 
- <-SOL_iCellX <-SOL_iRadius add 1 add <-SOL_iCellX <-SOL_iRadius sub do 
- <-SOL_iCellX <-SOL_iRadius sub I eq 
- <-SOL_iCellX <-SOL_iRadius add I eq or 
- <-SOL_iCellZ <-SOL_iRadius sub J eq or 
- <-SOL_iCellZ <-SOL_iRadius add J eq or if 
- I J GetCellOccupiedCount ->SOL_iCount 
- <-SOL_bSet if 
- I J <-SOL_iCount 1 add SetCellOccupiedCount 
- else 
- I J <-SOL_iCount 1 sub SetCellOccupiedCount 
- endif 
- endif 
- loop 
- loop 
 </code> </code>
  
 <=[[4rpl:start| Index]] <=[[4rpl:start| Index]]
  
4rpl/commands/setunitcell.1631717356.txt.gz · Last modified: 2025/02/14 14:56 (external edit)