openclonk/planet/Decoration.ocd/Village.ocd/Guidepost.ocd/Script.c

64 lines
1.5 KiB
C

/**
Guidepost
@author Graphics Dustin Neß (dness.de), Script Sven2
*/
local inscription = "";
// Players can read the sign via the interaction bar.
public func IsInteractable() { return inscription != ""; }
// Adapt appearance in the interaction bar.
public func GetInteractionMetaInfo(object clonk)
{
return { Description = "$MsgRead$", Selected = false };
}
// Called on player interaction.
public func Interact(object clonk)
{
if (!clonk) return false;
Dialogue->MessageBox(GetTranslatedString(inscription), clonk, this, clonk->GetController(), true);
return true;
}
public func SetInscription(to_text)
{
inscription = to_text ?? "";
return true;
}
// Color for messages
public func GetColor() { return 0xffcf9c1a; }
public func Construction()
{
// Pick an angle range that looks good (some angles show it from the side, which looks weird)
var angle;
if (!Random(2))
angle = -80 + Random(105);
else
angle = 90 + Random(110);
this.MeshTransformation = Trans_Mul(Trans_Rotate(angle, 0, 10), GetID().MeshTransformation);
}
public func Definition(proplist def)
{
// Model file is way too large.
def.MeshTransformation = Trans_Scale(360);
def.PictureTransformation = Trans_Scale(900);
// Inscription props.
if (!def.EditorProps)
def.EditorProps = {};
def.EditorProps.inscription = { Name = "$Inscription$", Type = "string", EditorHelp = "$InscriptionHelp$", Set = "SetInscription", Save = "Inscription", Translatable = true };
}
/*-- Properties --*/
local Name = "$Name$";
local Description = "$Description$";