Merge remote-tracking branch 'origin/master' into materials

This commit is contained in:
Magnus Norddahl 2018-01-23 20:16:32 +01:00
commit c7ec489846
68 changed files with 2248 additions and 945 deletions

View file

@ -129,6 +129,9 @@ public:
void SetAttenuate(bool on) { m_attenuate = on; }
void SetHalo(bool halo) { m_halo = halo; }
void SetDontLightActors(bool on) { m_dontlightactors = on; }
void SetSpot(bool spot) { m_spot = spot; }
void SetSpotInnerAngle(double angle) { m_spotInnerAngle = angle; }
void SetSpotOuterAngle(double angle) { m_spotOuterAngle = angle; }
void OrderIntensities()
{
@ -152,6 +155,9 @@ protected:
bool m_dontlightself = false;
bool m_dontlightactors = false;
bool m_swapped = false;
bool m_spot = false;
double m_spotInnerAngle = 10.0;
double m_spotOuterAngle = 25.0;
};
TDeletingArray<FLightDefaults *> LightDefaults;
@ -184,6 +190,10 @@ void FLightDefaults::ApplyProperties(ADynamicLight * light) const
if (m_additive) light->lightflags |= LF_ADDITIVE;
if (m_dontlightself) light->lightflags |= LF_DONTLIGHTSELF;
if (m_dontlightactors) light->lightflags |= LF_DONTLIGHTACTORS;
if (m_spot)
light->lightflags |= LF_SPOT;
light->SpotInnerAngle = m_spotInnerAngle;
light->SpotOuterAngle = m_spotOuterAngle;
light->m_tickCount = 0;
if (m_type == PulseLight)
{
@ -234,7 +244,8 @@ static const char *LightTags[]=
"dontlightself",
"attenuate",
"dontlightactors",
NULL
"spot",
nullptr
};
@ -256,6 +267,7 @@ enum {
LIGHTTAG_DONTLIGHTSELF,
LIGHTTAG_ATTENUATE,
LIGHTTAG_DONTLIGHTACTORS,
LIGHTTAG_SPOT
};
@ -396,6 +408,15 @@ static void ParsePointLight(FScanner &sc)
case LIGHTTAG_DONTLIGHTACTORS:
defaults->SetDontLightActors(ParseInt(sc) != 0);
break;
case LIGHTTAG_SPOT:
{
float innerAngle = ParseFloat(sc);
float outerAngle = ParseFloat(sc);
defaults->SetSpot(true);
defaults->SetSpotInnerAngle(innerAngle);
defaults->SetSpotOuterAngle(outerAngle);
}
break;
default:
sc.ScriptError("Unknown tag: %s\n", sc.String);
}
@ -481,6 +502,15 @@ static void ParsePulseLight(FScanner &sc)
case LIGHTTAG_DONTLIGHTACTORS:
defaults->SetDontLightActors(ParseInt(sc) != 0);
break;
case LIGHTTAG_SPOT:
{
float innerAngle = ParseFloat(sc);
float outerAngle = ParseFloat(sc);
defaults->SetSpot(true);
defaults->SetSpotInnerAngle(innerAngle);
defaults->SetSpotOuterAngle(outerAngle);
}
break;
default:
sc.ScriptError("Unknown tag: %s\n", sc.String);
}
@ -568,6 +598,15 @@ void ParseFlickerLight(FScanner &sc)
case LIGHTTAG_DONTLIGHTACTORS:
defaults->SetDontLightActors(ParseInt(sc) != 0);
break;
case LIGHTTAG_SPOT:
{
float innerAngle = ParseFloat(sc);
float outerAngle = ParseFloat(sc);
defaults->SetSpot(true);
defaults->SetSpotInnerAngle(innerAngle);
defaults->SetSpotOuterAngle(outerAngle);
}
break;
default:
sc.ScriptError("Unknown tag: %s\n", sc.String);
}
@ -654,6 +693,15 @@ void ParseFlickerLight2(FScanner &sc)
case LIGHTTAG_DONTLIGHTACTORS:
defaults->SetDontLightActors(ParseInt(sc) != 0);
break;
case LIGHTTAG_SPOT:
{
float innerAngle = ParseFloat(sc);
float outerAngle = ParseFloat(sc);
defaults->SetSpot(true);
defaults->SetSpotInnerAngle(innerAngle);
defaults->SetSpotOuterAngle(outerAngle);
}
break;
default:
sc.ScriptError("Unknown tag: %s\n", sc.String);
}
@ -737,6 +785,15 @@ static void ParseSectorLight(FScanner &sc)
case LIGHTTAG_DONTLIGHTACTORS:
defaults->SetDontLightActors(ParseInt(sc) != 0);
break;
case LIGHTTAG_SPOT:
{
float innerAngle = ParseFloat(sc);
float outerAngle = ParseFloat(sc);
defaults->SetSpot(true);
defaults->SetSpotInnerAngle(innerAngle);
defaults->SetSpotOuterAngle(outerAngle);
}
break;
default:
sc.ScriptError("Unknown tag: %s\n", sc.String);
}