Merge branch 'master' of git://github.com/peterix/dfhack
						commit
						831145701a
					
				| @ -0,0 +1,32 @@ | |||||||
|  | #ifndef CL_MOD_WORLD | ||||||
|  | #define CL_MOD_WORLD | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  | * World: all kind of stuff related to the current world state | ||||||
|  | */ | ||||||
|  | #include "Export.h" | ||||||
|  | 
 | ||||||
|  | namespace DFHack | ||||||
|  | { | ||||||
|  |     class APIPrivate; | ||||||
|  |     class DFHACK_EXPORT World | ||||||
|  |     { | ||||||
|  |         public: | ||||||
|  |          | ||||||
|  |         World(DFHack::APIPrivate * d); | ||||||
|  |         ~World(); | ||||||
|  |         bool Start(); | ||||||
|  |         bool Finish(); | ||||||
|  |          | ||||||
|  |         uint32_t ReadCurrentTick(); | ||||||
|  |         uint32_t ReadCurrentYear(); | ||||||
|  |         uint32_t ReadCurrentMonth(); | ||||||
|  |         uint32_t ReadCurrentDay(); | ||||||
|  |          | ||||||
|  |         private: | ||||||
|  |         struct Private; | ||||||
|  |         Private *d; | ||||||
|  |     }; | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| @ -0,0 +1,94 @@ | |||||||
|  | /*
 | ||||||
|  | www.sourceforge.net/projects/dfhack | ||||||
|  | Copyright (c) 2009 Petr Mrázek (peterix), Kenneth Ferland (Impaler[WrG]), dorf | ||||||
|  | 
 | ||||||
|  | This software is provided 'as-is', without any express or implied | ||||||
|  | warranty. In no event will the authors be held liable for any | ||||||
|  | damages arising from the use of this software. | ||||||
|  | 
 | ||||||
|  | Permission is granted to anyone to use this software for any | ||||||
|  | purpose, including commercial applications, and to alter it and | ||||||
|  | redistribute it freely, subject to the following restrictions: | ||||||
|  | 
 | ||||||
|  | 1. The origin of this software must not be misrepresented; you must | ||||||
|  | not claim that you wrote the original software. If you use this | ||||||
|  | software in a product, an acknowledgment in the product documentation | ||||||
|  | would be appreciated but is not required. | ||||||
|  | 
 | ||||||
|  | 2. Altered source versions must be plainly marked as such, and | ||||||
|  | must not be misrepresented as being the original software. | ||||||
|  | 
 | ||||||
|  | 3. This notice may not be removed or altered from any source | ||||||
|  | distribution. | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | #include "DFCommonInternal.h" | ||||||
|  | #include "../private/APIPrivate.h" | ||||||
|  | #include "modules/World.h" | ||||||
|  | #include "DFProcess.h" | ||||||
|  | #include "DFMemInfo.h" | ||||||
|  | #include "DFTypes.h" | ||||||
|  | 
 | ||||||
|  | using namespace DFHack; | ||||||
|  | 
 | ||||||
|  | struct World::Private | ||||||
|  | { | ||||||
|  |     bool Inited; | ||||||
|  |     bool Started; | ||||||
|  |     uint32_t year_offset; | ||||||
|  |     uint32_t tick_offset; | ||||||
|  |     APIPrivate *d; | ||||||
|  |     Process * owner; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | World::World(APIPrivate * _d) | ||||||
|  | { | ||||||
|  |      | ||||||
|  |     d = new Private; | ||||||
|  |     d->d = _d; | ||||||
|  |     d->owner = _d->p; | ||||||
|  |      | ||||||
|  |     memory_info * mem = d->d->offset_descriptor; | ||||||
|  |     d->year_offset = mem->getAddress( "current_year" ); | ||||||
|  |     d->tick_offset = mem->getAddress( "current_tick" ); | ||||||
|  |     d->Inited = d->Started = true; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | World::~World() | ||||||
|  | { | ||||||
|  |     delete d; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | bool World::Start() | ||||||
|  | { | ||||||
|  |     return true; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | bool World::Finish() | ||||||
|  | { | ||||||
|  |     return true; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | uint32_t World::ReadCurrentYear() | ||||||
|  | { | ||||||
|  |     if(d->Inited) | ||||||
|  |         return(d->owner->readDWord(d->year_offset)); | ||||||
|  |     return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | uint32_t World::ReadCurrentTick() | ||||||
|  | { | ||||||
|  |     if(d->Inited) | ||||||
|  |         return(d->owner->readDWord(d->tick_offset)); | ||||||
|  |     return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | uint32_t World::ReadCurrentMonth() | ||||||
|  | { | ||||||
|  |     return this->ReadCurrentTick() / 1200 / 24; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | uint32_t World::ReadCurrentDay() | ||||||
|  | { | ||||||
|  |     return ((this->ReadCurrentTick() / 1200) % 24) + 1; | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue