You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
212 lines
6.0 KiB
Lua
212 lines
6.0 KiB
Lua
----------------------------------------------------------------------------------------------------
|
|
--
|
|
-- Copyright (c) Contributors to the Open 3D Engine Project.
|
|
-- For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
|
--
|
|
-- SPDX-License-Identifier: Apache-2.0 OR MIT
|
|
--
|
|
--
|
|
-- Description: Comment system.
|
|
--
|
|
----------------------------------------------------------------------------------------------------
|
|
----------------------------------------------------------------------------------------------------
|
|
-- $Id$
|
|
-- $DateTime$
|
|
-- Description: Comment system.
|
|
--
|
|
----------------------------------------------------------------------------------------------------
|
|
|
|
Comment =
|
|
{
|
|
Properties =
|
|
{
|
|
Text = "This is a comment",
|
|
fSize = 1.2, --[0.0, 100.0 , 0.1, ""]
|
|
bHidden = 0,
|
|
fMaxDist = 100, --[0.0 ,255.0 , 0.1, ""]
|
|
nCharsPerLine = 30, --[1, 255, 1, ""]
|
|
bFixed = 0,
|
|
clrDiffuse = { x=1,y=0.5,z=0 },
|
|
},
|
|
|
|
Editor={
|
|
Model="Editor/Objects/comment.cgf",
|
|
Icon="Comment.bmp",
|
|
},
|
|
|
|
hidden = 0,
|
|
lines = {},
|
|
lineCount = 0,
|
|
fMaxDistSquared = 0,
|
|
bNoUpdateInGame = 1,
|
|
}
|
|
|
|
|
|
-------------------------------------------------------
|
|
function Comment:OnLoad(table)
|
|
self.hidden = table.hidden;
|
|
end
|
|
|
|
-------------------------------------------------------
|
|
function Comment:OnSave(table)
|
|
table.hidden = self.hidden;
|
|
end
|
|
|
|
-------------------------------------------------------
|
|
function Comment:OnInit()
|
|
-- Delete when not in dev-mode.
|
|
if (not System.IsDevModeEnable() ) then
|
|
self:DeleteThis();
|
|
return;
|
|
end
|
|
|
|
self:OnReset();
|
|
end
|
|
|
|
-------------------------------------------------------
|
|
function Comment:OnSpawn()
|
|
end
|
|
|
|
-------------------------------------------------------
|
|
function Comment:OnPropertyChange()
|
|
self:OnReset();
|
|
end
|
|
|
|
-------------------------------------------------------
|
|
function Comment:OnReset()
|
|
-- Comment is only Active(OnUpdate() will be called) when in Editor or when cl_comment > 0
|
|
local cl_comment = System.GetCVar("cl_comment")
|
|
if (System.IsEditor() or cl_comment > 0) then
|
|
self:SetUpdatePolicy( ENTITY_UPDATE_VISIBLE );
|
|
self:Activate(1)
|
|
else
|
|
self:Activate(0);
|
|
end
|
|
|
|
-- bNoUpdateInGame is checked in OnUpdate() to account for in-editor game mode.
|
|
if (cl_comment == 0) then
|
|
self.bNoUpdateInGame = 1;
|
|
else
|
|
self.bNoUpdateInGame = 0;
|
|
end
|
|
|
|
self.fMaxDistSquared = self.Properties.fMaxDist * self.Properties.fMaxDist;
|
|
|
|
self.hidden = self.Properties.bHidden;
|
|
self.lines = {};
|
|
|
|
-- process the text and line-break it
|
|
local maxLength = self.Properties.nCharsPerLine;
|
|
local curLength = 0;
|
|
local curText = "";
|
|
local curLine = 1;
|
|
|
|
for char in string.gfind(self.Properties.Text, ".") do
|
|
if (char == " ") then
|
|
-- word finished ... see if we are over the limit
|
|
if (curLength > maxLength) then
|
|
-- commit line
|
|
self.lines[curLine] = curText;
|
|
curLine = curLine + 1;
|
|
curText = "";
|
|
curLength = 0;
|
|
-- "consume" the whitespace
|
|
char = "";
|
|
end
|
|
end
|
|
if (char ~= "") then
|
|
-- append char
|
|
curText = curText..char;
|
|
curLength = curLength + 1;
|
|
end
|
|
end
|
|
|
|
self.lines[curLine] = curText;
|
|
self.lineCount = curLine;
|
|
|
|
self:OnUpdate(0);
|
|
end
|
|
|
|
-------------------------------------------------------
|
|
function Comment:OnUpdate(delta)
|
|
if (self.hidden ~= 0 or self:IsHidden() or self.Properties.Text =="" or (self.bNoUpdateInGame == 1 and not System.IsEditing())) then
|
|
return;
|
|
end
|
|
|
|
-- calculate alpha
|
|
local alpha = 0;
|
|
local factor = 0;
|
|
|
|
if (self.fMaxDistSquared>0) then
|
|
local mypos = g_Vectors.temp_v1;
|
|
|
|
self:GetWorldPos(mypos);
|
|
SubVectors(mypos, mypos, System.GetViewCameraPos());
|
|
|
|
local distSquared = LengthSqVector(mypos);
|
|
factor = distSquared;
|
|
|
|
if (self.Properties.fMaxDist >= 255.0) then
|
|
alpha = 1.0;
|
|
elseif (distSquared<self.fMaxDistSquared) then
|
|
alpha = distSquared/self.fMaxDistSquared;
|
|
alpha = 1.0 - alpha*alpha;
|
|
end
|
|
end
|
|
|
|
-- draw text
|
|
local increment = System.GetViewCameraUpDir();
|
|
|
|
if (alpha>0.001) then
|
|
local pos = self:GetWorldPos( g_Vectors.temp_v1 );
|
|
|
|
factor = math.sqrt(factor);
|
|
factor = (self.Properties.fSize/60) * factor * System.GetViewCameraFov();
|
|
|
|
local incrementAll = g_Vectors.temp_v4;
|
|
FastScaleVector(increment, increment, factor);
|
|
FastScaleVector(incrementAll, increment, (self.lineCount / 2 + 1));
|
|
|
|
-- start all the way at the top
|
|
FastSumVectors(pos, pos, incrementAll);
|
|
|
|
local textColor = { x=0, y=1, z=0 }; -- default color is for (bFixed == 1)
|
|
if (self.Properties.bFixed ~= 1) then
|
|
textColor = {x=self.Properties.clrDiffuse.x, y=self.Properties.clrDiffuse.y, z=self.Properties.clrDiffuse.z};
|
|
end
|
|
|
|
for i,val in ipairs(self.lines) do
|
|
System.DrawLabel( pos, self.Properties.fSize, val, textColor.x, textColor.y, textColor.z, alpha );
|
|
-- decrement the increment
|
|
FastDifferenceVectors(pos, pos, increment);
|
|
end
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------
|
|
function Comment:Event_UnHide(sender)
|
|
BroadcastEvent(self, "UnHide");
|
|
self.hidden = 0;
|
|
end
|
|
|
|
-------------------------------------------------------
|
|
function Comment:Event_Hide(sender)
|
|
BroadcastEvent(self, "Hide");
|
|
self.hidden = 1;
|
|
end
|
|
|
|
-------------------------------------------------------
|
|
Comment.FlowEvents =
|
|
{
|
|
Inputs =
|
|
{
|
|
Hide = { Comment.Event_Hide, "bool" },
|
|
UnHide = { Comment.Event_UnHide, "bool" },
|
|
},
|
|
Outputs =
|
|
{
|
|
Hide = "bool",
|
|
UnHide = "bool",
|
|
},
|
|
}
|