From: Laszlo T. <ave...@us...> - 2006-01-02 23:27:05
|
Update of /cvsroot/gemrb/gemrb/gemrb/plugins/Core In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5573/Core Modified Files: ActorBlock.cpp ActorBlock.h Control.cpp Control.h GSUtils.cpp GameControl.cpp GameControl.h GameScript.cpp GameScript.h Interface.h Map.cpp Triggers.cpp WorldMapControl.cpp WorldMapControl.h Log Message: CREImp:saving a structurally correct creature file (still stripped of spells) WorldmapControl:displaying tooltips of traveling distance handling the override point for regions implemented WalkedToTrigger trigger Index: WorldMapControl.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/WorldMapControl.cpp,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** WorldMapControl.cpp 17 Dec 2005 17:27:00 -0000 1.18 --- WorldMapControl.cpp 2 Jan 2006 23:26:54 -0000 1.19 *************** *** 184,188 **** if(Area!=ae) { Area=ae; ! printf("A: %s, Distance: %d\n", Area->AreaName, worldmap->GetDistance(Area->AreaName) ); break; } --- 184,188 ---- if(Area!=ae) { Area=ae; ! DisplayTooltip(); break; } *************** *** 193,196 **** --- 193,222 ---- } + /** Sets the tooltip to be displayed on the screen now */ + void WorldMapControl::DisplayTooltip() + { + int distance; + if (Area) { + WorldMap* worldmap = core->GetWorldMap(); + distance = worldmap->GetDistance(Area->AreaName); + } else { + distance = -1; + } + if (distance <= 0) { + core->DisplayTooltip( 0, 0, NULL ); + SetTooltip(NULL); + return; + } + + char hours[10]; + sprintf(hours,"%d\n", distance); + core->GetTokenDictionary()->SetAtCopy("HOUR", hours); + char *tmp = core->GetString(10700); + SetTooltip(tmp); + free(tmp); + //core->DisplayTooltip( (( Window* )Owner)->XPos + lastMouseX, (( Window* )Owner)->YPos + lastMouseY, this ); + core->DisplayTooltip( lastMouseX, lastMouseY, this ); + } + /** Mouse Leave Event */ void WorldMapControl::OnMouseLeave(unsigned short /*x*/, unsigned short /*y*/) Index: GameScript.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/GameScript.cpp,v retrieving revision 1.347 retrieving revision 1.348 diff -C2 -d -r1.347 -r1.348 *** GameScript.cpp 2 Jan 2006 10:14:48 -0000 1.347 --- GameScript.cpp 2 Jan 2006 23:26:54 -0000 1.348 *************** *** 309,312 **** --- 309,313 ---- {"unselectablevariablelt", GameScript::UnselectableVariableLT, 0}, {"vacant",GameScript::Vacant, 0}, + {"walkedtotrigger", GameScript::WalkedToTrigger, 0}, {"xor", GameScript::Xor,TF_MERGESTRINGS}, {"xp", GameScript::XP, 0}, *************** *** 975,988 **** { m=objects.begin(); ! return GetNextTarget(m,Type); } const targettype *Targets::GetNextTarget(targetlist::iterator &m, int Type) { while (m!=objects.end() ) { ! if ( (Type==-1) || ((*m).actor->Type==Type) ) { ! return &(*m++); } ! m++; } return NULL; --- 976,998 ---- { m=objects.begin(); ! while (m!=objects.end() ) { ! if ( (Type!=-1) && ( (*m).actor->Type!=Type)) { ! m++; ! continue; ! } ! return &(*m); ! } ! return NULL; } const targettype *Targets::GetNextTarget(targetlist::iterator &m, int Type) { + m++; while (m!=objects.end() ) { ! if ( (Type!=-1) && ( (*m).actor->Type!=Type)) { ! m++; ! continue; } ! return &(*m); } return NULL; Index: Control.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Control.cpp,v retrieving revision 1.41 retrieving revision 1.42 diff -C2 -d -r1.41 -r1.42 *** Control.cpp 25 Nov 2005 23:22:35 -0000 1.41 --- Control.cpp 2 Jan 2006 23:26:54 -0000 1.42 *************** *** 63,67 **** /** Sets the Tooltip text of the current control */ ! int Control::SetTooltip(const char* string, int /*pos*/) { if (Tooltip) --- 63,67 ---- /** Sets the Tooltip text of the current control */ ! int Control::SetTooltip(const char* string) { if (Tooltip) Index: WorldMapControl.h =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/WorldMapControl.h,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** WorldMapControl.h 24 Nov 2005 17:44:09 -0000 1.10 --- WorldMapControl.h 2 Jan 2006 23:26:54 -0000 1.11 *************** *** 90,93 **** --- 90,95 ---- /** Special Key Press */ void OnSpecialKeyPress(unsigned char Key); + /** DisplayTooltip */ + void DisplayTooltip(); }; Index: GSUtils.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/GSUtils.cpp,v retrieving revision 1.45 retrieving revision 1.46 diff -C2 -d -r1.45 -r1.46 *** GSUtils.cpp 25 Dec 2005 10:31:39 -0000 1.45 --- GSUtils.cpp 2 Jan 2006 23:26:54 -0000 1.46 *************** *** 405,408 **** --- 405,410 ---- while (t) { if (t->actor->Type!=ST_ACTOR) { + //we should never stumble here + abort(); t = tgts->RemoveTargetAt(m); continue; Index: Control.h =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Control.h,v retrieving revision 1.33 retrieving revision 1.34 diff -C2 -d -r1.33 -r1.34 *** Control.h 25 Nov 2005 23:22:35 -0000 1.33 --- Control.h 2 Jan 2006 23:26:54 -0000 1.34 *************** *** 88,92 **** virtual int SetText(const char* string, int pos = 0) = 0; /** Sets the Tooltip text of the current control */ ! virtual int SetTooltip(const char* string, int pos = 0); void DisplayTooltip(); /** Variables */ --- 88,92 ---- virtual int SetText(const char* string, int pos = 0) = 0; /** Sets the Tooltip text of the current control */ ! virtual int SetTooltip(const char* string); void DisplayTooltip(); /** Variables */ Index: GameScript.h =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/GameScript.h,v retrieving revision 1.235 retrieving revision 1.236 diff -C2 -d -r1.235 -r1.236 *** GameScript.h 25 Dec 2005 10:31:39 -0000 1.235 --- GameScript.h 2 Jan 2006 23:26:54 -0000 1.236 *************** *** 887,890 **** --- 887,891 ---- static int UnselectableVariableLT(Scriptable* Sender, Trigger* parameters); static int Vacant(Scriptable* Sender, Trigger* parameters); + static int WalkedToTrigger(Scriptable* Sender, Trigger* parameters); static int IsWeather(Scriptable* Sender, Trigger* parameters); static int Xor(Scriptable* Sender, Trigger* parameters); Index: Interface.h =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Interface.h,v retrieving revision 1.181 retrieving revision 1.182 diff -C2 -d -r1.181 -r1.182 *** Interface.h 22 Dec 2005 23:29:41 -0000 1.181 --- Interface.h 2 Jan 2006 23:26:54 -0000 1.182 *************** *** 406,409 **** --- 406,413 ---- /*returns true if the file should be saved */ bool SavedExtension(const char *filename); + /*returns true if the file should never be deleted accidentally */ + bool ProtectedExtension(const char *filename); + /*returns true if the directory path isn't good as a Cache */ + bool StupidityDetector(const char* Pt); /*handles the load screen*/ void LoadProgress(int percent); Index: Triggers.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Triggers.cpp,v retrieving revision 1.36 retrieving revision 1.37 diff -C2 -d -r1.36 -r1.37 *** Triggers.cpp 25 Dec 2005 10:31:39 -0000 1.36 --- Triggers.cpp 2 Jan 2006 23:26:54 -0000 1.37 *************** *** 1143,1146 **** --- 1143,1168 ---- } + int GameScript::WalkedToTrigger(Scriptable* Sender, Trigger* parameters) + { + Actor *target = Sender->GetCurrentArea()->GetActorByGlobalID(Sender->LastTrigger); + if (!target) { + return 0; + } + if (Distance(target, Sender) > MAX_OPERATING_DISTANCE ) { + return 0; + } + //now objects suicide themselves if they are empty objects + //so checking an empty object is easier + if (parameters->objectParameter == NULL) { + Sender->AddTrigger (&Sender->LastTrigger); + return 1; + } + if (MatchActor(Sender, Sender->LastTrigger, parameters->objectParameter)) { + Sender->AddTrigger (&Sender->LastTrigger); + return 1; + } + return 0; + } + int GameScript::Clicked(Scriptable* Sender, Trigger* parameters) { *************** *** 2504,2511 **** --- 2526,2535 ---- return 0; } + /* matchactor would do this, hmm Scriptable* tar = GetActorFromObject( Sender, parameters->objectParameter ); if (!tar || tar->Type != ST_ACTOR) { return 0; } + */ if (MatchActor(Sender, Sender->LastTrigger, parameters->objectParameter)) { Sender->AddTrigger (&Sender->LastTrigger); Index: GameControl.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/GameControl.cpp,v retrieving revision 1.277 retrieving revision 1.278 diff -C2 -d -r1.277 -r1.278 *** GameControl.cpp 30 Dec 2005 19:02:21 -0000 1.277 --- GameControl.cpp 2 Jan 2006 23:26:54 -0000 1.278 *************** *** 942,946 **** } ! bool GameControl::HandleActiveRegion(InfoPoint *trap, Actor * actor) { switch(trap->Type) { --- 942,946 ---- } ! bool GameControl::HandleActiveRegion(InfoPoint *trap, Actor * actor, Point &p) { switch(trap->Type) { *************** *** 974,977 **** --- 974,982 ---- } } + if (trap->Flags&TRAP_USEPOINT) { + //overriding the target point + p = trap->Pos; + return false; + } return true; default:; *************** *** 1048,1052 **** } if (overInfoPoint) { ! if (HandleActiveRegion(overInfoPoint, core->GetFirstSelectedPC())) { return; } --- 1053,1057 ---- } if (overInfoPoint) { ! if (HandleActiveRegion(overInfoPoint, core->GetFirstSelectedPC(), p)) { return; } Index: Map.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Map.cpp,v retrieving revision 1.217 retrieving revision 1.218 diff -C2 -d -r1.217 -r1.218 *** Map.cpp 29 Dec 2005 18:01:46 -0000 1.217 --- Map.cpp 2 Jan 2006 23:26:54 -0000 1.218 *************** *** 506,516 **** while (q--) { Actor* actor = queue[0][q]; ! if ((ip->Type == ST_PROXIMITY) && !(ip->Flags&TRAP_DEACTIVATED) ) { ! if (ip->outline->PointIn( actor->Pos )) { ! ip->Entered(actor); } - ip->ExecuteScript( ip->Scripts[0] ); - //Execute Pending Actions - ip->ProcessActions(); } else { //ST_TRAVEL --- 506,515 ---- while (q--) { Actor* actor = queue[0][q]; ! if (ip->Type == ST_PROXIMITY) { ! if (ip->Entered(actor)) { ! ip->ExecuteScript( ip->Scripts[0] ); ! //Execute Pending Actions ! ip->ProcessActions(); } } else { //ST_TRAVEL *************** *** 518,522 **** if (actor->GetNextAction()) continue; ! if (ip->outline->PointIn( actor->Pos )) { UseExit(actor, ip); } --- 517,521 ---- if (actor->GetNextAction()) continue; ! if (ip->Entered(actor)) { UseExit(actor, ip); } Index: ActorBlock.h =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/ActorBlock.h,v retrieving revision 1.96 retrieving revision 1.97 diff -C2 -d -r1.96 -r1.97 *** ActorBlock.h 12 Dec 2005 18:39:54 -0000 1.96 --- ActorBlock.h 2 Jan 2006 23:26:54 -0000 1.97 *************** *** 67,71 **** #define TRAP_DEACTIVATED 256 #define TRAVEL_NONPC 512 ! //#define TRAP_1024 1024 //override? #define INFO_DOOR 2048 //info trigger blocked by door --- 67,71 ---- #define TRAP_DEACTIVATED 256 #define TRAVEL_NONPC 512 ! #define TRAP_USEPOINT 1024 //override usage point of travel regions #define INFO_DOOR 2048 //info trigger blocked by door *************** *** 431,436 **** //returns true if trap has been triggered, tumble skill??? bool TriggerTrap(int skill); ! //call this when some actor entered the trigger zone ! void Entered(Actor *actor); //checks if the actor may use this travel trigger int CheckTravel(Actor *actor); --- 431,436 ---- //returns true if trap has been triggered, tumble skill??? bool TriggerTrap(int skill); ! //call this to check if an actor entered the trigger zone ! bool Entered(Actor *actor); //checks if the actor may use this travel trigger int CheckTravel(Actor *actor); *************** *** 446,450 **** ieWord TrapDetected; //overheadtext contains the string, but we have to save this ! ieStrRef StrRef; }; --- 446,451 ---- ieWord TrapDetected; //overheadtext contains the string, but we have to save this ! ieStrRef StrRef; ! Point UsePoint; }; Index: ActorBlock.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/ActorBlock.cpp,v retrieving revision 1.128 retrieving revision 1.129 diff -C2 -d -r1.128 -r1.129 *** ActorBlock.cpp 25 Dec 2005 10:31:39 -0000 1.128 --- ActorBlock.cpp 2 Jan 2006 23:26:54 -0000 1.129 *************** *** 1020,1024 **** { if (Type!=ST_PROXIMITY) { ! return false; } //actually this could be script name[0] --- 1020,1024 ---- { if (Type!=ST_PROXIMITY) { ! return true; } //actually this could be script name[0] *************** *** 1046,1057 **** } ! void InfoPoint::Entered(Actor *actor) { if (actor->InParty || (Flags&TRAP_NPC) ) { //skill? if (TriggerTrap(0) ) { LastTrigger = LastEntered = actor->GetID(); } } } --- 1046,1069 ---- } ! bool InfoPoint::Entered(Actor *actor) { + if (outline->PointIn( actor->Pos ) ) { + goto check; + } + if (Flags&TRAP_USEPOINT) { + if (Distance(UsePoint, actor->Pos)<14) { + goto check; + } + } + return false; + check: if (actor->InParty || (Flags&TRAP_NPC) ) { //skill? if (TriggerTrap(0) ) { LastTrigger = LastEntered = actor->GetID(); + return true; } } + return false; } Index: GameControl.h =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/GameControl.h,v retrieving revision 1.81 retrieving revision 1.82 diff -C2 -d -r1.81 -r1.82 *** GameControl.h 30 Dec 2005 19:02:21 -0000 1.81 --- GameControl.h 2 Jan 2006 23:26:54 -0000 1.82 *************** *** 181,185 **** void HandleContainer(Container *container, Actor *actor); void HandleDoor(Door *door, Actor *actor); ! bool HandleActiveRegion(InfoPoint *trap, Actor *actor); void MoveToPointFormation(Actor *actor, Point p, int Orient); void InitDialog(Actor* speaker, Actor* target, const char* dlgref); --- 181,185 ---- void HandleContainer(Container *container, Actor *actor); void HandleDoor(Door *door, Actor *actor); ! bool HandleActiveRegion(InfoPoint *trap, Actor *actor, Point &p); void MoveToPointFormation(Actor *actor, Point p, int Orient); void InitDialog(Actor* speaker, Actor* target, const char* dlgref); |