~~NOTOC~~ <=[[4rpl:start| Index]] ====== SetFieldRect ====== SetFieldRect(<-cellX <-cellZ <-fieldRect <-rectWidth <-strength <-direction <-affected <-deploy) ===== Description ===== Sets the field cells as defined by the fieldRect. **Fields are reset on map load, so any fields must be recreated in the [[func_awake|:awake]] method.** This method is, in essence, a more performant way to call [[SetFieldCell]] over a larger area. Despite the name, this method **adds** field cells rather than sets them, meaning the effect of existing fields will not be erased. To cancel the effect of calling SetFieldRect on an area, you should call SetFieldRect with the same properties in the same position, but opposite strength to the call used to create it. This will cancel out the effect. * **cellX**: The X position to deploy the field rect. The center of the field rect will be at this position. * **cellZ**: The Z position to deploy the field rect. The center of the field rect will be at this position. * **fieldRect**: A list containing vectors that describe the field direction at each cell in the rectangle. Values are treated as normalized values in the range of -1 to 1. Each vector in the list specifies the X and Z directions of the field via the first and SECOND elements of the supplied vectors. * **rectWidth**: The width of the rectangle that the fieldRect contains the data for. The height of the rectangle is determined by taking the fieldRect length and dividing it by the rectWidth. * **strength**: The strength is multiplied by the normalized value in the fieldRect to determine the actual value writing to the game's field array. * **direction**: A fieldRect is specified in a direction that can be thought of as pointing to the right (the positive X direction). The direction parameter can be 0,1,2,3. O leaves the fieldRect unmodified. 1 will cause the field to be deployed as if the fieldRect was rotated 90 degrees counterclockwise. 2 as if it was rotated 180 degrees, and 3 as if 270 degrees. * **affected**: 0 means the field applies to both creeper and AC. 1 means creeper only, and 2 means AC only. * **deploy**: If //true //then values are written to the game's field array. If //false//, then negative values are written to the game's field array. Useful for exactly reversing a deployed field. Note: The values are read from the bottom left corner, doing a row at a time. So if you're doing the double for loop like the example, the inner loop has to be x, and the outer loop has to be z. ===== Examples ===== :Awake CreateList ->field V2(1 0) ->v do (21 0) do(101 0) AppendToList(<-field <-v) loop loop SetFieldRect(119 86 <-field 101 1000000 0 0 true) <=[[4rpl:start| Index]]