parent
72ff88880c
commit
ba210c4d59
@ -21,6 +21,8 @@ Visibility.prototype.Init = function()
|
|||||||
this.alwaysVisible = this.template.AlwaysVisible == "true";
|
this.alwaysVisible = this.template.AlwaysVisible == "true";
|
||||||
this.preview = this.template.Preview == "true";
|
this.preview = this.template.Preview == "true";
|
||||||
|
|
||||||
|
this.activated = false;
|
||||||
|
|
||||||
if (this.preview)
|
if (this.preview)
|
||||||
this.SetActivated(true);
|
this.SetActivated(true);
|
||||||
};
|
};
|
||||||
@ -32,6 +34,18 @@ Visibility.prototype.SetActivated = function(status)
|
|||||||
{
|
{
|
||||||
let cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager);
|
let cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager);
|
||||||
cmpRangeManager.ActivateScriptedVisibility(this.entity, status);
|
cmpRangeManager.ActivateScriptedVisibility(this.entity, status);
|
||||||
|
|
||||||
|
this.activated = status;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function is a fallback for some entities whose visibility status
|
||||||
|
* cannot be cached by the range manager (especially local entities like previews).
|
||||||
|
* Calling the scripts is expensive, so only call it if really needed.
|
||||||
|
*/
|
||||||
|
Visibility.prototype.IsActivated = function()
|
||||||
|
{
|
||||||
|
return this.activated;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1462,6 +1462,11 @@ public:
|
|||||||
if (it->second.scriptedVisibility == 1 && cmpVisibility)
|
if (it->second.scriptedVisibility == 1 && cmpVisibility)
|
||||||
return cmpVisibility->GetVisibility(player, los.IsVisible(i, j), los.IsExplored(i, j));
|
return cmpVisibility->GetVisibility(player, los.IsVisible(i, j), los.IsExplored(i, j));
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (cmpVisibility && cmpVisibility->IsActivated())
|
||||||
|
return cmpVisibility->GetVisibility(player, los.IsVisible(i, j), los.IsExplored(i, j));
|
||||||
|
}
|
||||||
|
|
||||||
// Else, default behavior
|
// Else, default behavior
|
||||||
|
|
||||||
|
@ -30,6 +30,11 @@ class CCmpVisibilityScripted : public ICmpVisibility
|
|||||||
public:
|
public:
|
||||||
DEFAULT_SCRIPT_WRAPPER(VisibilityScripted)
|
DEFAULT_SCRIPT_WRAPPER(VisibilityScripted)
|
||||||
|
|
||||||
|
virtual bool IsActivated()
|
||||||
|
{
|
||||||
|
return m_Script.Call<bool>("IsActivated");
|
||||||
|
}
|
||||||
|
|
||||||
virtual ICmpRangeManager::ELosVisibility GetVisibility(player_id_t player, bool isVisible, bool isExplored)
|
virtual ICmpRangeManager::ELosVisibility GetVisibility(player_id_t player, bool isVisible, bool isExplored)
|
||||||
{
|
{
|
||||||
int visibility = m_Script.Call<int, player_id_t, bool, bool>("GetVisibility", player, isVisible, isExplored);
|
int visibility = m_Script.Call<int, player_id_t, bool, bool>("GetVisibility", player, isVisible, isExplored);
|
||||||
|
@ -35,6 +35,13 @@
|
|||||||
class ICmpVisibility : public IComponent
|
class ICmpVisibility : public IComponent
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
/**
|
||||||
|
* This function is a fallback for some entities whose visibility status
|
||||||
|
* cannot be cached by the range manager (especially local entities like previews).
|
||||||
|
* Calling the scripts is expensive, so only call it if really needed.
|
||||||
|
*/
|
||||||
|
virtual bool IsActivated() = 0;
|
||||||
|
|
||||||
virtual ICmpRangeManager::ELosVisibility GetVisibility(player_id_t player, bool isVisible, bool isExplored) = 0;
|
virtual ICmpRangeManager::ELosVisibility GetVisibility(player_id_t player, bool isVisible, bool isExplored) = 0;
|
||||||
|
|
||||||
virtual bool GetRetainInFog() = 0;
|
virtual bool GetRetainInFog() = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user