blob: 99d2e17e0d047b070ff5baeb36feafadcd16cf3c [file] [log] [blame]
// MorgenGrauen MUDlib
//
// thing/description.c -- Lichtsystemkomponenten fuer Standardobjekte
//
// $Id: description.c 7635 2010-08-19 21:21:30Z Zesstra $
#pragma strict_types
#pragma save_types,rtt_checks
#pragma range_check
#pragma no_clone
#define NEED_PROTOTYPES
#include <thing/properties.h>
#include <thing/language.h>
#include <hook.h>
#undef NEED_PROTOTYPES
#include <thing/lighttypes.h>
#include <properties.h>
// #####################
//######################## System-Funktionen ############################
// #####################
// Objekt erzeugen
protected void create()
{
Set( P_LIGHT, 0 );
Set( P_LIGHT_TYPE, LT_MISC);
}
protected void create_super() {
set_next_reset(-1);
}
// Lichtsy ... sys ...
static int _query_total_light() { return QueryProp(P_LIGHT); }
static int _set_light( int light )
{
object env = this_object();
// TODO: Temporaer Lichtlevel in geeignete Wertefenster zwingen.
if (light > 100)
light = 100;
else if (light < -100)
light = -100;
while ( objectp(env = environment(env)) )
// Ja. Man ruft die _set_xxx()-Funktionen eigentlich nicht direkt auf.
// Aber das Lichtsystem ist schon *so* rechenintensiv und gerade der
// P_LAST_CONTENT_CHANGE-Cache wird *so* oft benoetigt, dass es mir
// da um jedes bisschen Rechenzeit geht.
// Der Zweck heiligt ja bekanntlich die Mittel. ;-)
//
// Tiamak
env->_set_last_content_change();
return Set( P_LIGHT, light, F_VALUE);
}
// ##############
//######################## Lichttypen ############################
// ##############
// Lichttypen pruefen
public varargs int CheckLightType(int lighttype, int mode)
{
int my_light_type = QueryProp(P_LIGHT_TYPE);
switch( mode )
{
// mind. alle angegebenen muessen vertreten sein
case LT_CHECK_ALL:
return ((lighttype & my_light_type) == lighttype);
// Genau diese Typen muessen vertreten sein.
case LT_CHECK_MATCH:
return (lighttype == my_light_type);
// Es darf kein Typ vertreten sein.
case LT_CHECK_NONE:
return !(lighttype & my_light_type);
// mind. einer der uebergebenen Typen muss vertreten sein
case LT_CHECK_ANY:
default:
return (lighttype & my_light_type);
}
}