src/newgrf_cargo.cpp
branchnoai
changeset 9517 be1775555bbd
child 6709 e440af8c72ca
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/newgrf_cargo.cpp	Sat Mar 24 15:19:35 2007 +0000
@@ -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;
+}