aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/newview/lightshare.h
blob: 3561a918da52e53bb96c1db81c56e84419b391b4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/**
 * @file lightshare.h
 * @brief WindlightMessage class definition.
 *
 * Copyright (c) 2010, Jacek Antonelli
 *
 * The source code in this file ("Source Code") is provided to you
 * under the terms of the GNU General Public License, version 2.0
 * ("GPL"). Terms of the GPL can be found in doc/GPL-license.txt in
 * this distribution, or online at
 * http://secondlifegrid.net/programs/open_source/licensing/gplv2
 *
 * There are special exceptions to the terms and conditions of the GPL as
 * it is applied to this Source Code. View the full text of the exception
 * in the file doc/FLOSS-exception.txt in this software distribution, or
 * online at
 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
 *
 * By copying, modifying or distributing this software, you acknowledge
 * that you have read and understood your obligations described above,
 * and agree to abide by those obligations.
 *
 * ALL SOURCE CODE IS PROVIDED "AS IS." THE AUTHOR MAKES NO
 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
 * COMPLETENESS OR PERFORMANCE.
 */


#ifndef LIGHTSHARE_H
#define LIGHTSHARE_H

#include <string>
#include "llwlparamset.h"
#include "llwaterparamset.h"
#include "lluuid.h"

struct Meta7WindlightPacket;


typedef enum wl_scope
{
	WL_SCOPE_USER,
	WL_SCOPE_REGION,
	WL_SCOPE_PARCEL,
	WL_SCOPE_RLV
} WLScope;

struct WLCombined
{
	LLWaterParamSet water;
	LLWLParamSet sky;
	BOOL enabled;
};

// Encapsulates a "Windlight" (LightShare) message sent from the
// region, allowing the settings to be applied at a later time.
//
class LightShare
{
public:
	// The meanings of the LightShareAllowed user setting.
	enum LIGHTSHARE_ALLOWED
	{
		LIGHTSHARE_NEVER  = 0,
		LIGHTSHARE_ASK    = 1,
		LIGHTSHARE_ALWAYS = 2,
	};

	// The name of the preset where the region settings are stored.
	static const std::string sRegionPresetName;
	// The name of the preset where the parcel settings are stored.
	static const std::string sParcelPresetName;
	// The name of the preset where the RLV settings are stored.
	static const std::string sRLVPresetName;

	// Constructs a new LightShare instance from a GenericMessage
	// with the "Windlight" method, such as those sent by a
	// Lightshare-enabled OpenSim region.
	LightShare( LLMessageSystem* msg );

	~LightShare();

	// Message handler for GenericMessage with the "Windlight" method.
	// Creates and applies a new LightShare (or prompts user).
	static void processWindlight(LLMessageSystem* msg, void**);

	static void applyMaybe(LLWaterParamSet* thisWater, LLUUID* thisVaterNormal, LLWLParamSet* thisSky);

	// Called after the user has entered a new region, to reset the
	// "ignore while in this region" state.
	static void resetRegion();

	// Returns true if the message contains valid Windlight settings.
	// (But there's no real validation yet, so this is always true.)
	bool isValid();

	static void apply(LLWaterParamSet * newWater, LLUUID *newWaterNormal, LLWLParamSet *newSky, WLScope scope);

private:
	static LLTimer* sIgnoreTimer;
	static bool sIgnoreRegion;

	Meta7WindlightPacket* mPacket;
	static LLWaterParamSet* mWater;
	static LLWLParamSet* mSky;
	static LLUUID* mWaterNormal;
	bool mIsValid;

	// Callback when the user interacts with the notification.
	static bool applyCallback(const LLSD& notification, const LLSD& response);

	// Converts the message's raw bytes into a Meta7WindlightPacket.
	void process_packet( char* buf );

	// Constructs a LLWaterParamSet from the Meta7WindlightPacket.
	void process_water();

	// Constructs a LLWLParamSet from the Meta7WindlightPacket.
	void process_sky();

 	// Restart the timer for temporarily ignoring settings.
	static void restartIgnoreTimer();

	// Returns true if the ignore timer has expired (i.e. new settings
	// should not be ignored anymore).
	static bool ignoreTimerHasExpired();

	static void mergeWaterSets(LLWaterParamSet* thisSet, LLWaterParamSet* oldSet);
	static void mergeWLSets(LLWLParamSet* thisSet, LLWLParamSet* oldSet);
};

#endif