Aw state change
Minimum requirements | ||
---|---|---|
Added in version 2.1 | ||
SDK | build 13 |
int aw_state_change (void)
Description
Informs the world server of your avatar's current state.
Callback
None (returns immediately)
Notes
An instance must call this method at least once per world in order to receive any of the following events in that world, unless the bot is in global mode:
- AW_EVENT_AVATAR_ADD
- AW_EVENT_AVATAR_CHANGE
- AW_EVENT_AVATAR_CLICK
- AW_EVENT_AVATAR_DELETE
- AW_EVENT_CHAT
- AW_EVENT_OBJECT_CLICK
- AW_EVENT_OBJECT_BUMP
- AW_EVENT_OBJECT_SELECT
- AW_EVENT_TOOLBAR_CLICK
- AW_EVENT_URL_CLICK
This method triggers AW_EVENT_AVATAR_CHANGE events in all other nearby clients that are tracking avatars.
The SDK will limit itself to sending at most AW_WORLD_AVATAR_REFRESH_RATE state changes per second (in the Active Worlds Browser it would be under World Features, General, Avatar Updates per second). If this limit is exceeded then aw_state_change will return RC_NOT_YET. Either keep calling aw_state_change until it succeeds again or aw_wait (as per normal operation) until the SDK automatically updates the state (seems to delay a full second). The maximum number of updates per second can never exceed AW_MAX_AVCHANGE_PER_SECOND (defined in Aw.h).
Arguments
None
Argument attributes
Return values
- RC_SUCCESS
- RC_NOT_INITIALIZED
- RC_NO_INSTANCE
- RC_NO_CONNECTION
- The connection to the world is down.
- RC_NOT_YET
- It would exceed the maximum number of state changes per second.
Returned attributes
None
Usage
Old example:
int yaw; int rc; /* spin on a dime (45 degrees/second) */ for (yaw = 0; !aw_wait (1000); yaw += 450) { aw_int_set (AW_MY_YAW, yaw); rc = aw_state_change (); if (rc != RC_SUCCESS && rc != RC_NOT_YET) break; }
Smoother movement (version 3.4 and later):
int yaw; int rate = aw_int (AW_WORLD_AVATAR_REFRESH_RATE); int rc; /* spin on a dime (45 degrees/second) as smoothly as possible */ for (yaw = 0; !aw_wait (1000 / rate); yaw += 450 / rate) { aw_int_set (AW_MY_YAW, yaw); rc = aw_state_change (); if (rc != RC_SUCCESS && rc != RC_NOT_YET) break; }