fml update
This commit is contained in:
parent
b10575d4f2
commit
3c784505d2
@ -7,7 +7,7 @@ namespace FML\Script;
|
||||
*
|
||||
* @author steeffeen
|
||||
*/
|
||||
class UISound {
|
||||
abstract class EUISound {
|
||||
/**
|
||||
* Constants
|
||||
*/
|
||||
@ -40,24 +40,4 @@ class UISound {
|
||||
const SOUND_TimeOut = 'TimeOut';
|
||||
const SOUND_VictoryPoint = 'VictoryPoint';
|
||||
const SOUND_Warning = 'Warning';
|
||||
|
||||
/**
|
||||
* Public Properties
|
||||
*/
|
||||
public $name = self::SOUND_Default;
|
||||
public $variant = 0;
|
||||
public $volume = 1.;
|
||||
|
||||
/**
|
||||
* Create a new EUISound Instance
|
||||
*
|
||||
* @param string $name
|
||||
* @param int $variant
|
||||
* @param real $volume
|
||||
*/
|
||||
public function __construct($name = self::SOUND_Default, $variant = 0, $volume = 1.) {
|
||||
$this->name = $name;
|
||||
$this->variant = $variant;
|
||||
$this->volume = $volume;
|
||||
}
|
||||
}
|
@ -24,7 +24,9 @@ class Script {
|
||||
const CLASS_PROFILE = 'FML_Profile';
|
||||
const CLASS_MAPINFO = 'FML_MapInfo';
|
||||
const CLASS_SOUND = 'FML_Sound';
|
||||
const OPTION_TOOLTIP_ONCLICK = 'FML_Tooltip_OnClick';
|
||||
const CLASS_TOGGLE = 'FML_Toggle';
|
||||
const CLASS_SHOW = 'FML_Show';
|
||||
const CLASS_HIDE = 'FML_Hide';
|
||||
const OPTION_TOOLTIP_STAYONCLICK = 'FML_Tooltip_StayOnClick';
|
||||
const OPTION_TOOLTIP_INVERT = 'FML_Tooltip_Invert';
|
||||
const OPTION_TOOLTIP_TEXT = 'FML_Tooltip_Text';
|
||||
@ -37,6 +39,7 @@ class Script {
|
||||
const LABEL_MOUSEOVER = 'MouseOver';
|
||||
const CONSTANT_TOOLTIPTEXTS = 'C_FML_TooltipTexts';
|
||||
const FUNCTION_SETTOOLTIPTEXT = 'FML_SetTooltipText';
|
||||
const FUNCTION_TOGGLE = 'FML_Toggle';
|
||||
|
||||
/**
|
||||
* Protected Properties
|
||||
@ -52,6 +55,7 @@ class Script {
|
||||
protected $profile = false;
|
||||
protected $mapInfo = false;
|
||||
protected $sounds = array();
|
||||
protected $toggles = false;
|
||||
|
||||
/**
|
||||
* Set an Include of the Script
|
||||
@ -255,11 +259,13 @@ class Script {
|
||||
* Add a Sound Playing for the Control
|
||||
*
|
||||
* @param Control $control
|
||||
* @param UISound $sound
|
||||
* @param string $soundName
|
||||
* @param int $soundVariant
|
||||
* @param float $soundVolume
|
||||
* @param string $eventLabel
|
||||
* @return \FML\Script\Script
|
||||
*/
|
||||
public function addSound(Control $control, UISound $sound, $eventLabel = self::LABEL_MOUSECLICK) {
|
||||
public function addSound(Control $control, $soundName, $soundVariant = 0, $soundVolume = 1., $eventLabel = self::LABEL_MOUSECLICK) {
|
||||
if (!($control instanceof Scriptable)) {
|
||||
trigger_error('Scriptable Control needed as ClickControl for Sounds!');
|
||||
return $this;
|
||||
@ -268,13 +274,37 @@ class Script {
|
||||
$control->checkId();
|
||||
$control->addClass(self::CLASS_SOUND);
|
||||
$soundData = array();
|
||||
$soundData['sound'] = $sound;
|
||||
$soundData['id'] = $control->getId();
|
||||
$soundData['label'] = $eventLabel;
|
||||
$soundData['soundName'] = $soundName;
|
||||
$soundData['soundVariant'] = $soundVariant;
|
||||
$soundData['soundVolume'] = $soundVolume;
|
||||
$soundData['controlId'] = $control->getId();
|
||||
$soundData['eventLabel'] = $eventLabel;
|
||||
array_push($this->sounds, $soundData);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a Toggling Behavior
|
||||
*
|
||||
* @param Control $clickControl
|
||||
* @param Control $toggleControl
|
||||
* @param string $mode
|
||||
* @return \FML\Script\Script
|
||||
*/
|
||||
public function addToggle(Control $clickControl, Control $toggleControl, $mode = self::CLASS_TOGGLE) {
|
||||
if (!($clickControl instanceof Scriptable)) {
|
||||
trigger_error('Scriptable Control needed as ClickControl for Toggles!');
|
||||
return $this;
|
||||
}
|
||||
$toggleControl->checkId();
|
||||
$clickControl->setScriptEvents(true);
|
||||
$clickControl->addClass(self::CLASS_TOGGLE);
|
||||
$clickControl->addClass($mode);
|
||||
$clickControl->addClass($toggleControl->getId());
|
||||
$this->toggles = true;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the Script XML Tag
|
||||
*
|
||||
@ -306,6 +336,7 @@ class Script {
|
||||
$scriptText .= $this->getProfileLabels();
|
||||
$scriptText .= $this->getMapInfoLabels();
|
||||
$scriptText .= $this->getSoundLabels();
|
||||
$scriptText .= $this->getToggleLabels();
|
||||
$scriptText .= $this->getMainFunction();
|
||||
return $scriptText;
|
||||
}
|
||||
@ -423,7 +454,6 @@ Void " . self::FUNCTION_SETTOOLTIPTEXT . "(CMlControl _TooltipControl, CMlContro
|
||||
if (!$this->tooltips) return "";
|
||||
$mouseOverScript = "
|
||||
if (Event.Control.HasClass(\"" . self::CLASS_TOOLTIPS . "\")) {
|
||||
if (!Event.Control.HasClass(\"" . self::OPTION_TOOLTIP_ONCLICK . "\")) {
|
||||
declare Invert = Event.Control.HasClass(\"" . self::OPTION_TOOLTIP_INVERT . "\");
|
||||
foreach (ControlClass in Event.Control.ControlClasses) {
|
||||
declare TooltipControl <=> Page.GetFirstChild(ControlClass);
|
||||
@ -431,11 +461,9 @@ if (Event.Control.HasClass(\"" . self::CLASS_TOOLTIPS . "\")) {
|
||||
TooltipControl.Visible = !Invert;
|
||||
" . self::FUNCTION_SETTOOLTIPTEXT . "(TooltipControl, Event.Control);
|
||||
}
|
||||
}
|
||||
}";
|
||||
$mouseOutScript = "
|
||||
if (Event.Control.HasClass(\"" . self::CLASS_TOOLTIPS . "\")) {
|
||||
if (!Event.Control.HasClass(\"" . self::OPTION_TOOLTIP_ONCLICK . "\")) {
|
||||
declare FML_Clicked for Event.Control = False;
|
||||
declare StayOnClick = Event.Control.HasClass(\"" . self::OPTION_TOOLTIP_STAYONCLICK . "\");
|
||||
if (!StayOnClick || !FML_Clicked) {
|
||||
@ -447,14 +475,11 @@ if (Event.Control.HasClass(\"" . self::CLASS_TOOLTIPS . "\")) {
|
||||
" . self::FUNCTION_SETTOOLTIPTEXT . "(TooltipControl, Event.Control);
|
||||
}
|
||||
}
|
||||
}
|
||||
}";
|
||||
$mouseClickScript = "
|
||||
if (Event.Control.HasClass(\"" . self::CLASS_TOOLTIPS . "\")) {
|
||||
declare Handle = True;
|
||||
declare Show = False;
|
||||
declare OnClick = Event.Control.HasClass(\"" . self::OPTION_TOOLTIP_ONCLICK . "\");
|
||||
if (!OnClick) {
|
||||
declare StayOnClick = Event.Control.HasClass(\"" . self::OPTION_TOOLTIP_STAYONCLICK . "\");
|
||||
if (StayOnClick) {
|
||||
declare FML_Clicked for Event.Control = False;
|
||||
@ -467,13 +492,11 @@ if (Event.Control.HasClass(\"" . self::CLASS_TOOLTIPS . "\")) {
|
||||
} else {
|
||||
Handle = False;
|
||||
}
|
||||
}
|
||||
if (Handle) {
|
||||
declare Invert = Event.Control.HasClass(\"" . self::OPTION_TOOLTIP_INVERT . "\");
|
||||
foreach (ControlClass in Event.Control.ControlClasses) {
|
||||
declare TooltipControl <=> Page.GetFirstChild(ControlClass);
|
||||
if (TooltipControl == Null) continue;
|
||||
if (OnClick) Show = !TooltipControl.Visible;
|
||||
TooltipControl.Visible = Show && !Invert;
|
||||
" . self::FUNCTION_SETTOOLTIPTEXT . "(TooltipControl, Event.Control);
|
||||
}
|
||||
@ -638,18 +661,15 @@ if (Event.Control.HasClass(\"" . self::CLASS_MAPINFO . "\")) {
|
||||
if (!$this->sounds) return '';
|
||||
$labelScripts = array();
|
||||
foreach ($this->sounds as $soundData) {
|
||||
$controlId = $soundData['id'];
|
||||
$label = $soundData['label'];
|
||||
$sound = $soundData['sound'];
|
||||
$volume = Builder::getReal($sound->volume);
|
||||
$volume = Builder::getReal($soundData['soundVolume']);
|
||||
$labelScript = "
|
||||
case \"{$controlId}\": {
|
||||
PlayUiSound(CMlScriptIngame::EUISound::{$sound->name}, {$sound->variant}, {$volume});
|
||||
case \"{$soundData['controlId']}\": {
|
||||
PlayUiSound(CMlScriptIngame::EUISound::{$soundData['soundName']}, {$soundData['soundVariant']}, {$volume});
|
||||
}";
|
||||
if (!isset($labelScripts[$label])) {
|
||||
$labelScripts[$label] = '';
|
||||
if (!isset($labelScripts[$soundData['eventLabel']])) {
|
||||
$labelScripts[$soundData['eventLabel']] = '';
|
||||
}
|
||||
$labelScripts[$label] .= $labelScript;
|
||||
$labelScripts[$soundData['eventLabel']] .= $labelScript;
|
||||
}
|
||||
|
||||
$soundScript = '';
|
||||
@ -665,6 +685,37 @@ if (Event.Control.HasClass(\"" . self::CLASS_SOUND . "\")) {
|
||||
return $soundScript;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Toggle Labels
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function getToggleLabels() {
|
||||
if (!$this->toggles) return '';
|
||||
$toggleScript = "
|
||||
if (Event.Control.HasClass(\"" . self::CLASS_TOGGLE . "\")) {
|
||||
declare HasShow = Event.Control.HasClass(\"" . self::CLASS_SHOW . "\");
|
||||
declare HasHide = Event.Control.HasClass(\"" . self::CLASS_HIDE . "\");
|
||||
declare Toggle = True;
|
||||
declare Show = True;
|
||||
if (HasShow || HasHide) {
|
||||
Toggle = False;
|
||||
Show = HasShow;
|
||||
}
|
||||
foreach (ControlClass in Event.Control.ControlClasses) {
|
||||
declare ToggleControl <=> Page.GetFirstChild(ControlClass);
|
||||
if (ToggleControl == Null) continue;
|
||||
if (Toggle) {
|
||||
ToggleControl.Visible = !ToggleControl.Visible;
|
||||
} else {
|
||||
ToggleControl.Visible = Show;
|
||||
}
|
||||
}
|
||||
}";
|
||||
$toggleScript = Builder::getLabelImplementationBlock(self::LABEL_MOUSECLICK, $toggleScript);
|
||||
return $toggleScript;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Main Function
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user