From: <ma...@us...> - 2011-12-31 14:36:36
|
Revision: 7955 http://planeshift.svn.sourceforge.net/planeshift/?rev=7955&view=rev Author: magodra Date: 2011-12-31 14:36:29 +0000 (Sat, 31 Dec 2011) Log Message: ----------- - Added automatic hide/show on /path reload - Made all the waypoint/path updates iterate all displaying clients. Should allow for more than one to edit/view changes in same sector. NB! psEffects dosn't have sector so don't display in multiple sectors with warping protals. Modified Paths: -------------- trunk/src/server/adminmanager.cpp trunk/src/server/adminmanager.h trunk/src/server/client.cpp trunk/src/server/client.h trunk/src/server/database/mysql/sc_npctypes.sql Modified: trunk/src/server/adminmanager.cpp =================================================================== --- trunk/src/server/adminmanager.cpp 2011-12-31 12:34:21 UTC (rev 7954) +++ trunk/src/server/adminmanager.cpp 2011-12-31 14:36:29 UTC (rev 7955) @@ -3633,7 +3633,7 @@ if(IsHelp(words[1])) return; - if(words.GetCount() >= index && subCommandList.IsSubCommand(words[index])) + if(words.GetCount() > index && subCommandList.IsSubCommand(words[index])) { subCmd = words[index++]; } @@ -3647,7 +3647,7 @@ } } - if(words.GetCount() >= index) + if(words.GetCount() > index) { ParseError(me, "Too many arguments"); } @@ -5910,8 +5910,230 @@ return psserver->GetCacheManager()->NextEffectUID(); } +void AdminManager::HideAllPaths(bool clearSelected) +{ + ClientIterator i(*clients); + while(i.HasNext()) + { + Client *client = i.Next(); + // Cleare selected while we are iterating over the clients. + if (clearSelected) + { + client->PathSetPath(NULL); + } + if (client->PathIsDisplaying()) + { + HidePaths(client); + } + if (client->WaypointIsDisplaying()) + { + HideWaypoints(client); + } + } +} + +void AdminManager::HidePaths(Client* client) +{ + if (client->PathIsDisplaying()) + { + csList<iSector*>::Iterator iter = client->GetPathDisplaying(); + while (iter.HasNext()) + { + iSector* sector = iter.Next(); + HidePaths(client, sector); + } + } +} + +void AdminManager::HideWaypoints(Client* client) +{ + if (client->WaypointIsDisplaying()) + { + csList<iSector*>::Iterator iter = client->GetWaypointDisplaying(); + while (iter.HasNext()) + { + iSector* sector = iter.Next(); + HideWaypoints(client, sector); + } + } +} + +void AdminManager::HidePaths(Client* client, iSector* sector) +{ + csList<psPathPoint*> list; + if (pathNetwork->FindPointsInSector(sector,list)) + { + csList<psPathPoint*>::Iterator iter(list); + while (iter.HasNext()) + { + psPathPoint* point = iter.Next(); + + // Don't send enpoints of paths + if (!point->GetWaypoint()) + { + psStopEffectMessage msg(client->GetClientNum(), point->GetEffectID(this)); + msg.SendMessage(); + } + + } + } +} + +void AdminManager::HideWaypoints(Client* client, iSector* sector) +{ + csList<Waypoint*> list; + if (pathNetwork->FindWaypointsInSector(sector,list)) + { + csList<Waypoint*>::Iterator iter(list); + while (iter.HasNext()) + { + Waypoint* waypoint = iter.Next(); + psStopEffectMessage msg(client->GetClientNum(), waypoint->GetEffectID(this)); + msg.SendMessage(); + } + } +} + + +void AdminManager::RedisplayAllPaths() +{ + ClientIterator i(*clients); + while(i.HasNext()) + { + Client* client = i.Next(); + + if (client->PathIsDisplaying()) + { + ShowPaths(client); + } + if (client->WaypointIsDisplaying()) + { + ShowWaypoints(client); + } + + } +} + +void AdminManager::ShowPaths(Client* client) +{ + if (client->PathIsDisplaying()) + { + csList<iSector*>::Iterator iter = client->GetPathDisplaying(); + while (iter.HasNext()) + { + iSector* sector = iter.Next(); + ShowPaths(client, sector); + } + } +} + +void AdminManager::ShowWaypoints(Client* client) +{ + if (client->WaypointIsDisplaying()) + { + csList<iSector*>::Iterator iter = client->GetWaypointDisplaying(); + while (iter.HasNext()) + { + iSector* sector = iter.Next(); + ShowWaypoints(client, sector); + } + } +} + +void AdminManager::ShowPaths(Client* client, iSector* sector) +{ + csList<psPathPoint*> list; + if (pathNetwork->FindPointsInSector(sector,list)) + { + csList<psPathPoint*>::Iterator iter(list); + while (iter.HasNext()) + { + psPathPoint* point = iter.Next(); + + // Don't send enpoints of paths + if (!point->GetWaypoint()) + { + psEffectMessage msg(client->GetClientNum(),"admin_path_point", + point->GetPosition(),0,0,point->GetEffectID(this),point->GetRadius()); + msg.SendMessage(); + } + + } + + } +} + +void AdminManager::ShowWaypoints(Client* client, iSector* sector) +{ + csList<Waypoint*> list; + if (pathNetwork->FindWaypointsInSector(sector,list)) + { + csList<Waypoint*>::Iterator iter(list); + while (iter.HasNext()) + { + Waypoint* waypoint = iter.Next(); + + psEffectMessage msg(client->GetClientNum(),"admin_waypoint", + waypoint->GetPosition(),0,0,waypoint->GetEffectID(this),waypoint->GetRadius()); + msg.SendMessage(); + } + } +} + +void AdminManager::UpdateDisplayPath(psPathPoint* point) +{ + ClientIterator i(*clients); + while(i.HasNext()) + { + Client* client = i.Next(); + + if (client->PathIsDisplaying()) + { + csList<iSector*>::Iterator iter = client->GetPathDisplaying(); + while (iter.HasNext()) + { + iSector* sector = iter.Next(); + + // Hide + psStopEffectMessage hide(client->GetClientNum(), point->GetEffectID(this)); + hide.SendMessage(); + // Display + psEffectMessage show(client->GetClientNum(),"admin_path_point",point->GetPosition(),0,0,point->GetEffectID(this),point->GetRadius()); + show.SendMessage(); + } + } + } +} + +void AdminManager::UpdateDisplayWaypoint(Waypoint* wp) +{ + ClientIterator i(*clients); + while(i.HasNext()) + { + Client* client = i.Next(); + + if (client->WaypointIsDisplaying()) + { + csList<iSector*>::Iterator iter = client->GetWaypointDisplaying(); + while (iter.HasNext()) + { + iSector* sector = iter.Next(); + + // Hide + psStopEffectMessage hide(client->GetClientNum(), wp->GetEffectID(this)); + hide.SendMessage(); + // Display + // TODO: Include sector in psEffectMessage + psEffectMessage show(client->GetClientNum(),"admin_waypoint",wp->GetPosition(),0,0, + wp->GetEffectID(this),wp->GetRadius()); + show.SendMessage(); + } + } + } +} + void AdminManager::HandlePath(MsgEntry* me, psAdminCmdMessage& msg, AdminCmdData* cmddata, Client *client) { AdminCmdDataPath* data = dynamic_cast<AdminCmdDataPath*>(cmddata); @@ -5955,18 +6177,7 @@ { if (wp->Adjust(db,myPos,mySectorName)) { - if (client->WaypointIsDisplaying()) - { - // Move the displayed waypoint - - // Hide - psStopEffectMessage hide(me->clientnum, wp->GetEffectID(this)); - hide.SendMessage(); - // Display - psEffectMessage show(me->clientnum,"admin_waypoint",myPos,0,0,wp->GetEffectID(this),wp->GetRadius()); - show.SendMessage(); - } - + UpdateDisplayWaypoint(wp); psserver->SendSystemInfo(me->clientnum, "Adjusted waypoint %s(%d) at range %.2f", wp->GetName(), wp->GetID(), rangeWP); @@ -5976,16 +6187,7 @@ { if (pathPoint->Adjust(db,indexPoint,myPos,mySectorName)) { - if (client->PathIsDisplaying()) - { - // Hide - psStopEffectMessage hide(me->clientnum, point->GetEffectID(this)); - hide.SendMessage(); - // Display - psEffectMessage show(me->clientnum,"admin_path_point",myPos,0,0,point->GetEffectID(this),point->GetRadius()); - show.SendMessage(); - } - + UpdateDisplayPath(point); psserver->SendSystemInfo(me->clientnum, "Adjusted point(%d) %d of path %s(%d) at range %.2f", point->GetID(),indexPoint,path->GetName(),path->GetID(),rangePoint); @@ -6130,18 +6332,7 @@ { wp->RecalculateEdges(EntityManager::GetSingleton().GetWorld(),EntityManager::GetSingleton().GetEngine()); - - if (client->WaypointIsDisplaying()) - { - // Hide - psStopEffectMessage hide(me->clientnum, wp->GetEffectID(this)); - hide.SendMessage(); - // Display - psEffectMessage show(me->clientnum,"admin_waypoint",wp->GetPosition(),0,0, - wp->GetEffectID(this),wp->GetRadius()); - show.SendMessage(); - } - + UpdateDisplayWaypoint(wp); psserver->SendSystemInfo(me->clientnum, "Waypoint %s updated with new radius %.3f.", wp->GetName(),wp->GetRadius()); return; @@ -6171,12 +6362,7 @@ psPathPoint* point = path->AddPoint(db, myPos, mySectorName); - if (client->PathIsDisplaying()) - { - psEffectMessage msg(me->clientnum,"admin_path_point",myPos,0,0,point->GetEffectID(this)); - msg.SendMessage(); - } - + UpdateDisplayPath(point); psserver->SendSystemInfo( me->clientnum, "Added point."); } @@ -6234,12 +6420,7 @@ } - if (client->PathIsDisplaying()) - { - psEffectMessage msg(me->clientnum,"admin_path_point",myPos,0,0,newPoint->GetEffectID(this)); - msg.SendMessage(); - } - + UpdateDisplayPath(newPoint); psserver->SendSystemInfo( me->clientnum, "Inserted point."); } else if (data->subCmd == "start") @@ -6288,17 +6469,7 @@ wp = pathNetwork->CreateWaypoint(wpName,myPos,mySectorName,data->radius,data->flagName); - if (client->WaypointIsDisplaying()) - { - // Move the displayed waypoint - - // Hide - psStopEffectMessage hide(me->clientnum, wp->GetEffectID(this)); - hide.SendMessage(); - // Display - psEffectMessage show(me->clientnum,"admin_waypoint",myPos,0,0,wp->GetEffectID(this),wp->GetRadius()); - show.SendMessage(); - } + UpdateDisplayWaypoint(wp); psserver->SendSystemInfo( me->clientnum, "Starting path, using new waypoint %s(%d)", wp->GetName(), wp->GetID()); } @@ -6356,11 +6527,7 @@ wp = pathNetwork->CreateWaypoint(wpName,myPos,mySectorName,data->radius,data->waypointFlags); - if (client->WaypointIsDisplaying()) - { - psEffectMessage msg(me->clientnum,"admin_waypoint",myPos,0,0,wp->GetEffectID(this),wp->GetRadius()); - msg.SendMessage(); - } + UpdateDisplayWaypoint(wp); } client->PathSetPath(NULL); @@ -6381,46 +6548,16 @@ { if (data->cmdTarget.IsEmpty() || data->cmdTarget == 'P') { - csList<psPathPoint*> list; - if (pathNetwork->FindPointsInSector(mySector,list)) - { - csList<psPathPoint*>::Iterator iter(list); - while (iter.HasNext()) - { - psPathPoint* point = iter.Next(); + ShowPaths(client,mySector); - // Don't send enpoints of paths - if (!point->GetWaypoint()) - { - psEffectMessage msg(me->clientnum,"admin_path_point", - point->GetPosition(),0,0,point->GetEffectID(this),point->GetRadius()); - msg.SendMessage(); - } - - } - - } - - client->PathSetIsDisplaying(true); + client->PathSetIsDisplaying(mySector); psserver->SendSystemInfo(me->clientnum, "Displaying all path points in sector %s",mySectorName.GetDataSafe()); } if (data->cmdTarget.IsEmpty() || data->cmdTarget == 'W') { - csList<Waypoint*> list; - if (pathNetwork->FindWaypointsInSector(mySector,list)) - { - csList<Waypoint*>::Iterator iter(list); - while (iter.HasNext()) - { - Waypoint* waypoint = iter.Next(); - - psEffectMessage msg(me->clientnum,"admin_waypoint", - waypoint->GetPosition(),0,0,waypoint->GetEffectID(this),waypoint->GetRadius()); - msg.SendMessage(); - } - } + ShowWaypoints(client, mySector); - client->WaypointSetIsDisplaying(true); + client->WaypointSetIsDisplaying(mySector); psserver->SendSystemInfo(me->clientnum, "Displaying all waypoints in sector %s",mySectorName.GetDataSafe()); } } @@ -6428,41 +6565,16 @@ { if (data->cmdTarget.IsEmpty() || data->cmdTarget == 'P') { - csList<psPathPoint*> list; - if (pathNetwork->FindPointsInSector(mySector,list)) - { - csList<psPathPoint*>::Iterator iter(list); - while (iter.HasNext()) - { - psPathPoint* point = iter.Next(); + HidePaths(client); - // Don't send enpoints of paths - if (!point->GetWaypoint()) - { - psStopEffectMessage msg(me->clientnum, point->GetEffectID(this)); - msg.SendMessage(); - } - - } - } - client->PathSetIsDisplaying(false); + client->PathClearDisplaying(); psserver->SendSystemInfo(me->clientnum, "All path points hidden"); } if (data->cmdTarget.IsEmpty() || data->cmdTarget == "W") { - csList<Waypoint*> list; - if (pathNetwork->FindWaypointsInSector(mySector,list)) - { - csList<Waypoint*>::Iterator iter(list); - while (iter.HasNext()) - { - Waypoint* waypoint = iter.Next(); - psStopEffectMessage msg(me->clientnum, waypoint->GetEffectID(this)); - msg.SendMessage(); - } - - } - client->WaypointSetIsDisplaying(false); + HideWaypoints(client); + + client->WaypointClearDisplaying(); psserver->SendSystemInfo(me->clientnum, "All waypoints hidden"); } } @@ -6570,16 +6682,8 @@ { if (wp->Adjust(db,myPos,mySectorName)) { - if (client->WaypointIsDisplaying()) - { - // Hide - psStopEffectMessage hide(me->clientnum, wp->GetEffectID(this)); - hide.SendMessage(); - // Display - psEffectMessage show(me->clientnum,"admin_waypoint",myPos,0,0,wp->GetEffectID(this),wp->GetRadius()); - show.SendMessage(); - } + UpdateDisplayWaypoint(wp); psserver->SendSystemInfo(me->clientnum, "Moved waypoint %s(%d)", wp->GetName(), wp->GetID()); @@ -6617,16 +6721,7 @@ { if (point->Adjust(db,myPos,mySectorName)) { - if (client->PathIsDisplaying()) - { - // Hide - psStopEffectMessage hide(me->clientnum, point->GetEffectID(this)); - hide.SendMessage(); - // Show - psEffectMessage show(me->clientnum,"admin_path_point",myPos,0,0,point->GetEffectID(this),point->GetRadius()); - show.SendMessage(); - } - + UpdateDisplayPath(point); psserver->SendSystemInfo(me->clientnum, "Adjusted point(%d)", point->GetID()); @@ -6687,11 +6782,7 @@ { return; } - if (client->WaypointIsDisplaying()) - { - psEffectMessage msg(me->clientnum,"admin_waypoint",myPos,0,0,wp->GetEffectID(this),wp->GetRadius()); - msg.SendMessage(); - } + UpdateDisplayWaypoint(wp); psPath * path1 = pathNetwork->CreatePath("",path->start,wp, "" ); psPath * path2 = pathNetwork->CreatePath("",wp,path->end, "" ); @@ -11457,10 +11548,15 @@ } else if(data->subCmd == "path") { + HideAllPaths(true); // And cleare Selected Paths + delete pathNetwork; pathNetwork = new psPathNetwork(); pathNetwork->Load(EntityManager::GetSingleton().GetEngine(),db, EntityManager::GetSingleton().GetWorld()); + + RedisplayAllPaths(); + psserver->SendSystemOK(client->GetClientNum(), "Successfully reloaded path network."); } Modified: trunk/src/server/adminmanager.h =================================================================== --- trunk/src/server/adminmanager.h 2011-12-31 12:34:21 UTC (rev 7954) +++ trunk/src/server/adminmanager.h 2011-12-31 14:36:29 UTC (rev 7955) @@ -3506,7 +3506,68 @@ /** Implement the abstract function from the iEffectIDAllocator */ virtual uint32_t GetEffectID(); + + /** @brif Hide all paths for all clients + * @param clearSelected Clear selected path when iterating. + */ + void HideAllPaths(bool clearSelected); + /** @brif Hide all paths for a client + * @param client The client to hide paths for. + */ + void HidePaths(Client* client); + + /** @brif Hide all waypoints for a client + * @param client The client to hide waypoints for. + */ + void HideWaypoints(Client* client); + + /** @brif Hide all paths for a client in a sector + * @param client The client to hide paths for. + * @param sector The sector to hide paths in. + */ + void HidePaths(Client* client, iSector* sector); + + /** @brif Hide all waypoints for a client in a sector. + * @param client The client ot hide waypoints for. + * @param sector The sector to hide paths in. + */ + void HideWaypoints(Client* client, iSector* sector); + + /** @brif Show paths and waypoints for all clients that have enabled display. + */ + void RedisplayAllPaths(); + + /** @brif Show paths for client in all sectors that has been enabled. + * @param client The client to show paths for. + */ + void ShowPaths(Client* client); + + /** @brif Show waypoint for client in all sectors that has been enabled. + * @param client The client to show waypoints for. + */ + void ShowWaypoints(Client* client); + + /** @brif Show path for a client in a given sector. + * @param client The client to show paths for. + * @param sector The sector to show paths in. + */ + void ShowPaths(Client* client, iSector* sector); + + /** @brif Show waypoints for a client in a given sector. + * @param client The client to show waypoints for. + * @param sector The sector to show paths in. + */ + void ShowWaypoints(Client* client, iSector* sector); + + /** @brif Update the display of paths in clients. + */ + void UpdateDisplayPath(psPathPoint* point); + + /** @brif Update the display of waypoints in clients. + */ + void UpdateDisplayWaypoint(Waypoint* wp); + /** @brief Handle online path editing. * @param me The incoming message from the GM * @param msg The cracked command message. Modified: trunk/src/server/client.cpp =================================================================== --- trunk/src/server/client.cpp 2011-12-31 12:34:21 UTC (rev 7954) +++ trunk/src/server/client.cpp 2011-12-31 14:36:29 UTC (rev 7955) @@ -55,8 +55,7 @@ Client::Client () : accumulatedLag(0), zombie(false), allowedToDisconnect(true), ready(false), accountID(0), playerID(0), securityLevel(0), superclient(false), - name(""), waypointEffectID(0), waypointIsDisplaying(false), - pathEffectID(0), pathPath(NULL), pathIsDisplaying(false), + name(""), waypointEffectID(0), pathEffectID(0), pathPath(NULL), locationEffectID(0), locationIsDisplaying(false),cheatMask(NO_CHEAT) { actor = 0; @@ -474,6 +473,50 @@ spamPoints, advisorPoints, accountID.Unbox()); } +void Client::PathSetIsDisplaying( iSector* sector ) +{ + pathDisplaySectors.PushBack(sector); +} + +void Client::PathClearDisplaying() +{ + pathDisplaySectors.DeleteAll(); +} + +csList<iSector*>::Iterator Client::GetPathDisplaying() +{ + return csList<iSector*>::Iterator(pathDisplaySectors); +} + +bool Client::PathIsDisplaying() +{ + return !pathDisplaySectors.IsEmpty(); +} + + +void Client::WaypointSetIsDisplaying( iSector* sector ) +{ + waypointDisplaySectors.PushBack(sector); +} + +void Client::WaypointClearDisplaying() +{ + waypointDisplaySectors.DeleteAll(); +} + +csList<iSector*>::Iterator Client::GetWaypointDisplaying() +{ + return csList<iSector*>::Iterator(waypointDisplaySectors); +} + + +bool Client::WaypointIsDisplaying() +{ + return !waypointDisplaySectors.IsEmpty(); +} + + + uint32_t Client::LocationGetEffectID() { if (locationEffectID == 0) Modified: trunk/src/server/client.h =================================================================== --- trunk/src/server/client.h 2011-12-31 12:34:21 UTC (rev 7954) +++ trunk/src/server/client.h 2011-12-31 14:36:29 UTC (rev 7955) @@ -352,11 +352,15 @@ psPath * PathGetPath() { return pathPath; } void PathSetPath(psPath * path) { pathPath = path; } - void PathSetIsDisplaying( bool displaying ) { pathIsDisplaying = displaying; } - bool PathIsDisplaying() { return pathIsDisplaying; } + void PathSetIsDisplaying( iSector* sector ); + void PathClearDisplaying(); + csList<iSector*>::Iterator GetPathDisplaying(); + bool PathIsDisplaying(); - void WaypointSetIsDisplaying( bool displaying ) { waypointIsDisplaying = displaying; } - bool WaypointIsDisplaying() { return waypointIsDisplaying; } + void WaypointSetIsDisplaying( iSector* sector ); + void WaypointClearDisplaying(); + csList<iSector*>::Iterator GetWaypointDisplaying(); + bool WaypointIsDisplaying(); /// Online edit of location @@ -448,12 +452,16 @@ // Path edit global vars for client csString waypointPathName; int waypointPathIndex; + uint32_t waypointEffectID; - bool waypointIsDisplaying; uint32_t pathEffectID; + psPath *pathPath; - bool pathIsDisplaying; + + csList<iSector*> waypointDisplaySectors; + csList<iSector*> pathDisplaySectors; + // Location edit global vars for client uint32_t locationEffectID; bool locationIsDisplaying; Modified: trunk/src/server/database/mysql/sc_npctypes.sql =================================================================== --- trunk/src/server/database/mysql/sc_npctypes.sql 2011-12-31 12:34:21 UTC (rev 7954) +++ trunk/src/server/database/mysql/sc_npctypes.sql 2011-12-31 14:36:29 UTC (rev 7955) @@ -216,6 +216,13 @@ <navigate anim="walk" failure="move_failed" /> </behavior> +<!-- Global movement with use of waypoint navigation --> +<behavior name="GlobalMove" complection_decay="-1" resume="yes" failure="move_failed" > + <!-- Find the target and move there --> + <copy_locate source="Move" destination="Active" /> + <wander anim="walk" private="false" failure="move_failed" /> +</behavior> + <!-- Local movement without the waypoint navigation --> <behavior name="LocalMove" complection_decay="-1" resume="yes" failure="move_failed" > <!-- Find the final target and move there --> @@ -225,6 +232,7 @@ <react event="move" behavior="Move" /> <react event="local_move" behavior="LocalMove" /> +<react event="global_move" behavior="GlobalMove" /> <react event="move_failed" behavior="MoveFailed" />'); @@ -765,29 +773,48 @@ </behavior>'); -INSERT INTO sc_npctypes VALUES("117","MoveTest5","Answerer","","$walk","","","","", +INSERT INTO sc_npctypes VALUES("117","MoveTest5","Answerer,Move","","$walk","","","","", '<!-- Example Citizen behaviour --> -<behavior name="GoHome" decay="0" growth="0" initial="0"> - <locate obj="waypoint" static="no" /> <!-- Locate nearest waypoint --> - <navigate anim="walk" /> <!-- Local navigation --> +<!-- Go find nearest waypoint at startup --> +<behavior name="Initialize" resume="yes" completion_decay="-1" initial="1000"> + <locate obj="waypoint" static="no" destination="Move" /> + <percept event="local_move" /> +</behavior> - <locate obj="waypoint:name:$name_home" static="no" /> - <wander anim="walk" /> <!-- Navigate using waypoints --> +<!-- Create a behavior that cause the npc to go visible when going from home --> +<behavior name="WokenFromSleep" completion_decay="-1" > + <visible/> +</behavior> + +<behavior name="AtSleep" loop="yes" completion_decay="-1" interrupt="woken_from_sleep" > + <loop> + <wait duration="10.0" /> + </loop> +</behavior> + +<behavior name="GoHome" resume="yes" completion_decay="-1" > + <locate obj="waypoint:name:$name_home" static="no" destination="Move" /> + <percept event="local_move" /> + <!-- Simulate going inside by setting invisbile --> <wait duration="10" anim="stand" /> <invisible/> - <wait duration="30" anim="stand" /> - <visible/> + <rotate type="relative" value="180" ang_vel="45"/> + <percept event="at_sleep" /> </behavior> +<react event="GoHome" behavior="GoHome" /> -<behavior name="GoWork" decay="0" growth="0" initial="0"> - <locate obj="waypoint" static="no" /> <!-- Locate nearest waypoint --> - <navigate anim="walk" /> <!-- Local navigation --> +<react event="at_sleep" behavior="AtSleep" /> +<react event="woken_from_sleep" behavior="AtSleep" absolute="0" /> +<react event="woken_from_sleep" behavior="WokenFromSleep" /> - <locate obj="waypoint:name:$name_work" static="no" /> - <wander anim="walk" /> <!-- Navigate using waypoints --> +<behavior name="GoWork" resume="yes" completion_decay="-1" > + <locate obj="waypoint:name:$name_work" static="no" destination="Move" /> + <percept event="global_move" /> + <rotate type="relative" value="180" ang_vel="45"/> </behavior> +<react event="GoWork" behavior="GoWork" /> <react event="time" value="0,0,,," random=",5,,," behavior="GoWork" /> <react event="time" value="1,0,,," random=",5,,," behavior="GoHome" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |