diff options
author | peter1138 <peter1138@openttd.org> | 2007-03-23 20:55:45 +0000 |
---|---|---|
committer | peter1138 <peter1138@openttd.org> | 2007-03-23 20:55:45 +0000 |
commit | 68572f1076de258cc8ec26926d1e87503f6a9aae (patch) | |
tree | e63cd1b8346fd2727f464367928e91ad1aac22ca /src/newgrf_cargo.cpp | |
parent | 8353032129970458bfb76c40972e9a575432c6a0 (diff) | |
download | openttd-68572f1076de258cc8ec26926d1e87503f6a9aae.tar.xz |
(svn r9418) -Codechange: Implement actions 1/2/3 for cargos, callback handler and custom icon sprites
Diffstat (limited to 'src/newgrf_cargo.cpp')
-rw-r--r-- | src/newgrf_cargo.cpp | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/src/newgrf_cargo.cpp b/src/newgrf_cargo.cpp new file mode 100644 index 000000000..2e79d02c1 --- /dev/null +++ b/src/newgrf_cargo.cpp @@ -0,0 +1,93 @@ +/* $Id$ */ + +#include "stdafx.h" +#include "openttd.h" +#include "cargotype.h" +#include "newgrf.h" +#include "newgrf_callbacks.h" +#include "newgrf_spritegroup.h" +#include "newgrf_cargo.h" + + +static uint32 CargoGetRandomBits(const ResolverObject *object) +{ + return 0; +} + + +static uint32 CargoGetTriggers(const ResolverObject *object) +{ + return 0; +} + + +static void CargoSetTriggers(const ResolverObject *object, int triggers) +{ + return; +} + + +static uint32 CargoGetVariable(const ResolverObject *object, byte variable, byte parameter, bool *available) +{ + *available = false; + return 0; +} + + +static const SpriteGroup *CargoResolveReal(const ResolverObject *object, const SpriteGroup *group) +{ + /* Cargo action 2s should always have only 1 "loaded" state */ + if (group->g.real.num_loaded == 0) return NULL; + + return group->g.real.loaded[0]; +} + + +static void NewCargoResolver(ResolverObject *res, const CargoSpec *cs) +{ + res->GetRandomBits = &CargoGetRandomBits; + res->GetTriggers = &CargoGetTriggers; + res->SetTriggers = &CargoSetTriggers; + res->GetVariable = &CargoGetVariable; + res->ResolveReal = &CargoResolveReal; + + res->u.cargo.cs = cs; + + res->callback = 0; + res->callback_param1 = 0; + res->callback_param2 = 0; + res->last_value = 0; + res->trigger = 0; + res->reseed = 0; +} + + +SpriteID GetCustomCargoSprite(const CargoSpec *cs) +{ + const SpriteGroup *group; + ResolverObject object; + + NewCargoResolver(&object, cs); + + group = Resolve(cs->group, &object); + if (group == NULL || group->type != SGT_RESULT) return 0; + + return group->g.result.sprite; +} + + +uint16 GetCargoCallback(uint16 callback, uint32 param1, uint32 param2, const CargoSpec *cs) +{ + ResolverObject object; + const SpriteGroup *group; + + NewCargoResolver(&object, cs); + object.callback = callback; + object.callback_param1 = param1; + object.callback_param2 = param2; + + group = Resolve(cs->group, &object); + if (group == NULL || group->type != SGT_CALLBACK) return CALLBACK_FAILED; + + return group->g.callback.result; +} |