blob: 465eea76224113fe11d337e69e986fd42e90e106 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001// MorgenGrauen MUDlib
2//
3// thing/description.c -- Lichtsystemkomponenten fuer Standardobjekte
4//
5// $Id: description.c 7635 2010-08-19 21:21:30Z Zesstra $
6
7#pragma strict_types
8#pragma save_types,rtt_checks
9#pragma range_check
10#pragma no_clone
MG Mud User88f12472016-06-24 23:31:02 +020011
12#define NEED_PROTOTYPES
13#include <thing/properties.h>
14#include <thing/language.h>
15#include <hook.h>
16#undef NEED_PROTOTYPES
17
18#include <thing/lighttypes.h>
19#include <properties.h>
20
21// #####################
22//######################## System-Funktionen ############################
23// #####################
24
25// Objekt erzeugen
26protected void create()
27{
28 Set( P_LIGHT, 0 );
29 Set( P_LIGHT_TYPE, LT_MISC);
30}
31
32protected void create_super() {
33 set_next_reset(-1);
34}
35
36// Lichtsy ... sys ...
37static int _query_total_light() { return QueryProp(P_LIGHT); }
38
39static int _set_light( int light )
40{
41 object env = this_object();
42
43 // TODO: Temporaer Lichtlevel in geeignete Wertefenster zwingen.
44 if (light > 100)
45 light = 100;
46 else if (light < -100)
47 light = -100;
Arathorn12d05162016-08-20 12:32:38 +020048
MG Mud User88f12472016-06-24 23:31:02 +020049 while ( objectp(env = environment(env)) )
50 // Ja. Man ruft die _set_xxx()-Funktionen eigentlich nicht direkt auf.
51 // Aber das Lichtsystem ist schon *so* rechenintensiv und gerade der
52 // P_LAST_CONTENT_CHANGE-Cache wird *so* oft benoetigt, dass es mir
53 // da um jedes bisschen Rechenzeit geht.
54 // Der Zweck heiligt ja bekanntlich die Mittel. ;-)
55 //
56 // Tiamak
57 env->_set_last_content_change();
Arathorn12d05162016-08-20 12:32:38 +020058
MG Mud User88f12472016-06-24 23:31:02 +020059 return Set( P_LIGHT, light, F_VALUE);
60}
61
Arathorn12d05162016-08-20 12:32:38 +020062
63// ##############
64//######################## Lichttypen ############################
65// ##############
66
67// Lichttypen pruefen
Zesstra02e8b682018-11-28 22:28:15 +010068public varargs int CheckLightType(int lighttype, int mode)
Arathorn12d05162016-08-20 12:32:38 +020069{
70 int my_light_type = QueryProp(P_LIGHT_TYPE);
71
72 switch( mode )
73 {
74 // mind. alle angegebenen muessen vertreten sein
75 case LT_CHECK_ALL:
76 return ((lighttype & my_light_type) == lighttype);
77 // Genau diese Typen muessen vertreten sein.
78 case LT_CHECK_MATCH:
79 return (lighttype == my_light_type);
80 // Es darf kein Typ vertreten sein.
81 case LT_CHECK_NONE:
82 return !(lighttype & my_light_type);
83 // mind. einer der uebergebenen Typen muss vertreten sein
84 case LT_CHECK_ANY:
85 default:
86 return (lighttype & my_light_type);
87 }
88 return 0;
89}