963 lines
31 KiB
XML
963 lines
31 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<krpano>
|
|
<!-- Global variables used by actions and plugins -->
|
|
<krpano
|
|
tour_soundson="false"
|
|
tour_soundsvolume="0"
|
|
tour_autotourenabled="false"
|
|
tour_autorotateenabled="false"
|
|
tour_controlmodemousetype="drag"
|
|
tour_controlmodetouchtype="drag"
|
|
tour_fullscreen="false"
|
|
tour_displaymap="false"
|
|
tour_displaythumbnails="true"
|
|
tour_displayfloorplan="false"
|
|
tour_displayinfo="false"
|
|
tour_displayspots="true"
|
|
tour_displaycontrols="true"
|
|
tour_language="ko" />
|
|
<krpano tour_gyroscopedevices="true" devices="no-desktop.and.html5" />
|
|
<krpano tour_vrdevices="true" devices="html5" />
|
|
<krpano videos_sounds_path="%FIRSTXML%" devices="html5" />
|
|
<krpano videos_sounds_path="%SWFPATH%" devices="flash" />
|
|
<krpano projection_current_params="view.fisheyefovlink=0.5&view.architectural=0.0&view.pannini=0.0&view.fisheye=0.0&view.stereographic=false" />
|
|
|
|
|
|
<display autofullscreen="false" devices="android" />
|
|
|
|
|
|
<krpano vrtourdevice.desktop="desktop" vrtourdevice.tablet="tablet" vrtourdevice.mobile="mobile" />
|
|
<krpano vrtourdevicescale.desktop="1.0" vrtourdevicescale.tablet="1.0" vrtourdevicescale.mobile="1.0" />
|
|
<action name="vrtourcurrentscale" autorun="preinit">
|
|
mul(stagescale,get(vrtourdevicescale));
|
|
</action>
|
|
|
|
<!-- Control Mode Management -->
|
|
<control mouse="drag" touch="drag" />
|
|
<action name="setControlModeDragTo">setControlMode(drag);</action>
|
|
<action name="setControlModeMoveTo">setControlMode(moveto);</action>
|
|
<action name="setControlMode">
|
|
if (device.desktop,
|
|
set(control.mouse, %1);
|
|
set(tour_controlmodemousetype, %1);
|
|
,
|
|
set(control.touch, %1);
|
|
set(tour_controlmodetouchtype, %1);
|
|
);
|
|
events.dispatch(oncontrolmodechanged);
|
|
</action>
|
|
|
|
|
|
|
|
<!-- Tour Messages -->
|
|
<action name="getmessage">
|
|
txtadd(real_message_id, get(tour_language), "_", %2);
|
|
set(%1, get(data[get(real_message_id)].content));
|
|
</action>
|
|
|
|
<!-- Hide / Show Hotspots -->
|
|
<action name="hideHotspots">
|
|
set(tour_displayspots, false);
|
|
set(nb_spots, get(hotspot.count));
|
|
if (nb_spots != 0, hidepanospotsaction(); );
|
|
events.dispatch(hotspots_visibility_changed);
|
|
</action>
|
|
<action name="showHotspots">
|
|
set(tour_displayspots, true);
|
|
set(nb_spots, get(hotspot.count));
|
|
if (nb_spots != 0, showpanospotsaction(); );
|
|
events.dispatch(hotspots_visibility_changed);
|
|
</action>
|
|
|
|
<krpano hideShowHotspotsOnNewPanoState="false" />
|
|
|
|
<events name="hideShowHotspotsOnNewPanoEvent" onTourStart="set(hideShowHotspotsOnNewPanoState,true);hideShowHotspotsOnNewPanoAction" onPanoStart="if(hideShowHotspotsOnNewPanoState,hideShowHotspotsOnNewPanoAction);" keep="true"/>
|
|
<action name="hideShowHotspotsOnNewPanoAction">
|
|
set(nb_spots, get(hotspot.count));
|
|
if (nb_spots != 0,
|
|
if (tour_displayspots, showpanospotsaction(); , hidepanospotsaction(); );
|
|
);
|
|
</action>
|
|
|
|
|
|
<action name="startbehavioursxmlcompleteaction">
|
|
if (skipintro !== null,
|
|
set(tour_firstlittleplanet, false);
|
|
ifnot (tour_firststartactiondone,
|
|
set(tour_firststartactiondone, true);
|
|
events.dispatch(onTourStart);
|
|
);
|
|
events.dispatch(onPanoStart);
|
|
,
|
|
ifnot (tour_firststartactiondone,
|
|
|
|
set(sceneisfull360, false);
|
|
if (scene[get(xml.scene)].full360,
|
|
sub(viewhfov, panoview.hmax, panoview.hmin);
|
|
if (viewhfov == 360,
|
|
sub(viewvfov, panoview.vmax, panoview.vmin);
|
|
if (viewvfov == 180,
|
|
set(sceneisfull360, true);
|
|
);
|
|
);
|
|
);
|
|
|
|
|
|
stoptween(view.fov);
|
|
stoptween(view.fovmax);
|
|
stoptween(view.hlookat);
|
|
stoptween(view.vlookat);
|
|
stoptween(view.fisheye);
|
|
|
|
if (sceneisfull360 AND (device.webgl OR device.flash),
|
|
setlittleplanet();
|
|
);
|
|
|
|
|
|
set(tour_firststartactiondone, true);
|
|
,
|
|
events.dispatch(onPanoStart, true);
|
|
);
|
|
);
|
|
</action>
|
|
|
|
<action name="startLittlePlanetIntroEffect">
|
|
if(tour_firstlittleplanet,
|
|
set(sceneisfull360, false);
|
|
if (scene[get(xml.scene)].full360,
|
|
sub(viewhfov, panoview.hmax, panoview.hmin);
|
|
if (viewhfov == 360,
|
|
sub(viewvfov, panoview.vmax, panoview.vmin);
|
|
if (viewvfov == 180,
|
|
set(sceneisfull360, true);
|
|
);
|
|
);
|
|
);
|
|
if (sceneisfull360,
|
|
fromlittleplanetintrotonormalview();
|
|
);
|
|
);
|
|
</action>
|
|
|
|
<action name="setlittleplanet">
|
|
set(view.architectural, 0.0);
|
|
set(view.hlookat, get(panoview.h));
|
|
set(view.vlookat, 90);
|
|
set(view.pannini, 0.0);
|
|
if(panoview.fovmax LE 150,
|
|
set(view.fovmax, 150);
|
|
,
|
|
set(view.fovmax, get(panoview.fovmax));
|
|
);
|
|
set(view.stereographic, true);
|
|
set(view.fisheyefovlink, 1.5);
|
|
set(view.fisheye, 1.0);
|
|
set(view.fov, 150);
|
|
|
|
events.dispatch(onStartLittlePlanetIntroduction);
|
|
</action>
|
|
<action name="fromlittleplanetintrotonormalview">
|
|
tweennormalview();
|
|
</action>
|
|
<action name="tweennormalview">
|
|
hideTooltip();
|
|
tween(view.fovmax, get(panoview.fovmax), 2, easeoutquad);
|
|
tween(view.hlookat, get(panoview.h), 2, easeoutquad);
|
|
tween(view.vlookat, get(panoview.v), 2, easeoutquad);
|
|
if(panoview.fov LE view.fov, tween(view.fov, get(panoview.fov), 2, easeoutquad); );
|
|
tween(view.pannini, 0.0, 2, easeoutquad);
|
|
tween(view.fisheye, 0.0, 2, easeoutquad,
|
|
set(view.architectural, 0.0);
|
|
set(view.stereographic, false);
|
|
set(view.fisheyefovlink, 0.5);
|
|
|
|
|
|
events.dispatch(onEndLittlePlanetIntroduction, true);
|
|
if (tour_firstlittleplanet,
|
|
events.dispatch(onTourStart, true);
|
|
set(tour_firstlittleplanet, false);
|
|
);
|
|
events.dispatch(onPanoStart, true);
|
|
);
|
|
</action>
|
|
|
|
<layer name="splashscreenlayerbg"
|
|
keep="true"
|
|
align="center"
|
|
type="container"
|
|
width="100%" height="100%"
|
|
bgalpha="1"
|
|
bgcolor="0xffffff"
|
|
preload="true"
|
|
onclick="hideintroimage(true);"
|
|
bgcapture="true"
|
|
zorder="98"
|
|
enabled="true"/>
|
|
<action name="preload_splashscreen" autorun="preinit">
|
|
addlayer(splashscreenlayer);
|
|
set(layer[splashscreenlayer].visible, true);
|
|
set(layer[splashscreenlayer].align, center);
|
|
set(layer[splashscreenlayer].zorder, 99);
|
|
set(layer[splashscreenlayer].keep, true);
|
|
set(layer[splashscreenlayer].onclick, hideintroimage(true));
|
|
set(layer[splashscreenlayer].alpha, 1.0);
|
|
|
|
set(layer[splashscreenlayer].onloaded, autohideintroimage(););
|
|
set(layer[splashscreenlayer].url, '%FIRSTXML%/graphics/img0202.gif');
|
|
</action>
|
|
<action name="hideintroimage">
|
|
stopdelayedcall(hideintroimagecall);
|
|
tween(layer[splashscreenlayer].alpha, 0.0, 0.5, default,
|
|
tween(layer[splashscreenlayerbg].alpha , 0.0, 0.5, default,
|
|
hideintroimagetreatment();
|
|
);
|
|
);
|
|
</action>
|
|
<action name="hideintroimagetreatment">
|
|
removelayer(splashscreenlayer);
|
|
|
|
set(sceneisfull360, false);
|
|
if (scene[get(xml.scene)].full360,
|
|
sub(viewhfov, panoview.hmax, panoview.hmin);
|
|
if (viewhfov == 360,
|
|
sub(viewvfov, panoview.vmax, panoview.vmin);
|
|
if (viewvfov == 180,
|
|
set(sceneisfull360, true);
|
|
);
|
|
);
|
|
);
|
|
if (sceneisfull360,
|
|
startLittlePlanetIntroEffect();
|
|
,
|
|
events.dispatch(onTourStart, true);
|
|
events.dispatch(onPanoStart, true);
|
|
);
|
|
removelayer(splashscreenlayerbg);
|
|
</action>
|
|
<action name="autohideintroimage">
|
|
hideTooltip();
|
|
delayedcall(hideintroimagecall, 3, hideintroimage() );
|
|
</action>
|
|
|
|
<action name="skipintroaction">
|
|
stopdelayedcall(hideintroimagecall);
|
|
removelayer(splashscreenlayerbg);
|
|
removelayer(splashscreenlayer);
|
|
</action>
|
|
|
|
|
|
|
|
|
|
<events name="startTourForSoundsEvents" onTourStart="startTourForSoundsEventsAction();" keep="true" />
|
|
<action name="startTourForSoundsEventsAction">
|
|
playTourSoundsActions(true,true);
|
|
</action>
|
|
|
|
<events name="startTourForJsEvents" onTourStart="startTourForJsEventsAction();" keep="true" />
|
|
<action name="startTourForJsEventsAction">
|
|
js(eventTourStarted());
|
|
</action>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<krpano panovideospotsstate="false" />
|
|
<krpano panolivepanospotsstate="false" />
|
|
<events name="panoVideosSpotsStateEvent" onTourStart="set(panovideospotsstate, true);set(panolivepanospotsstate, true);" keep="true" />
|
|
|
|
<krpano ptblendmode="BLEND(1.0, easeInCubic)" />
|
|
<action name="mainloadsceneStartup">
|
|
loadscene(%1, get(projection_current_params), MERGE);
|
|
</action>
|
|
<action name="mainloadscene">
|
|
if (xml.scene != %1,
|
|
events.dispatch(onleavingscene, true);
|
|
|
|
interruptAnimation();
|
|
|
|
|
|
|
|
|
|
|
|
loadscene(%1, get(projection_current_params), MERGE, get(ptblendmode));
|
|
|
|
|
|
|
|
|
|
);
|
|
</action>
|
|
|
|
<!-- Load Previous Scene -->
|
|
<action name="loadPreviousScene">
|
|
copy(sceneprevnexti, scene[get(xml.scene)].index);
|
|
dec(sceneprevnexti);
|
|
if (sceneprevnexti LT 0, sub(sceneprevnexti, scene.count, 1););
|
|
mainloadscene(get(scene[get(sceneprevnexti)].name));
|
|
</action>
|
|
|
|
<!-- Load Next Scene -->
|
|
<action name="loadNextScene">
|
|
copy(sceneprevnexti, scene[get(xml.scene)].index);
|
|
inc(sceneprevnexti);
|
|
if (sceneprevnexti GE scene.count, set(sceneprevnexti, 0););
|
|
mainloadscene(get(scene[get(sceneprevnexti)].name));
|
|
</action>
|
|
|
|
|
|
<!-- AUTOROTATION -->
|
|
<autorotate enabled="false"/>
|
|
<krpano tour_autorotation_pausecounter="0"/>
|
|
<krpano tour_autorotation_pauseplugin="0"/>
|
|
<krpano tour_autorotation_openatstartplugin="0"/>
|
|
<action name="startautorotation">
|
|
if(tour_autorotation_pausecounter LE 0,
|
|
set(tour_autorotateenabled, true );
|
|
|
|
invalidatescreen();
|
|
set(autorotate.enabled, true);
|
|
set(tour_autorotation_pausecounter, 0);
|
|
events.dispatch(onstartautorotation);
|
|
|
|
if(tour_autotourenabled,
|
|
resetautotourvariables();
|
|
);
|
|
);
|
|
</action>
|
|
<action name="stopautorotation">
|
|
set(tour_autorotateenabled, false);
|
|
set(autorotate.enabled, false);
|
|
events.dispatch(onstopautorotation);
|
|
|
|
if(tour_autotourenabled,
|
|
stopautotourtimer();
|
|
);
|
|
</action>
|
|
<action name="pauseautorotation">
|
|
if(%1 == forceplugin,
|
|
inc(tour_autorotation_pauseplugin);
|
|
);
|
|
inc(tour_autorotation_pausecounter);
|
|
if(tour_autorotateenabled,
|
|
set(autorotate.enabled, false);
|
|
events.dispatch(onpauseautorotation);
|
|
|
|
if(tour_autotourenabled AND useautotourdelay == false,
|
|
stopautotourtimer();
|
|
);
|
|
);
|
|
</action>
|
|
<action name="resumeautorotation">
|
|
if(%1 == forceplugin,
|
|
if (tour_autorotation_pauseplugin GT 0,
|
|
dec(tour_autorotation_pauseplugin);
|
|
);
|
|
);
|
|
if (tour_autorotation_pausecounter GE 0,
|
|
if(%1 != forceresume,
|
|
if ((tour_autorotation_pausecounter GT 0) AND (tour_autorotation_pausecounter GT tour_autorotation_pauseplugin),
|
|
dec(tour_autorotation_pausecounter);
|
|
);
|
|
);
|
|
);
|
|
if(tour_autorotateenabled,
|
|
if(tour_autorotation_pausecounter == 0,
|
|
if(%1 != forceresume,
|
|
set(autorotate.enabled, true);
|
|
events.dispatch(onresumeautorotation);
|
|
|
|
if(tour_autotourenabled,
|
|
resetautotourvariables();
|
|
);
|
|
);
|
|
);
|
|
,
|
|
if(%1 != forceresume,
|
|
if(%1 != forceplugin,
|
|
if(%1 != forcehotspot,
|
|
startautorotation();
|
|
);
|
|
,
|
|
|
|
set(forceAutorotationFromPluginUnload, false);
|
|
if(action['autorotationatstart'],
|
|
set(forceAutorotationFromPluginUnload, true);
|
|
);
|
|
if(action['autotouratstart'],
|
|
set(forceAutorotationFromPluginUnload, true);
|
|
);
|
|
if(forceAutorotationFromPluginUnload,
|
|
if(tour_autorotation_openatstartplugin == 1,
|
|
if((tour_autorotation_pauseplugin LE 0) AND (tour_autorotation_pausecounter LE 0),
|
|
startautorotation();
|
|
);
|
|
);
|
|
);
|
|
);
|
|
);
|
|
);
|
|
</action>
|
|
<events name="autorotation_events" onnewpano="if(tour_autorotation_pauseplugin LE 0,resumeautorotation(forceresume););" ongyroscopeon="pauseautorotation(forceplugin);" ongyroscopeoff="resumeautorotation(forceplugin);" keep="true"/>
|
|
|
|
|
|
<!-- AUTOTOUR -->
|
|
|
|
<krpano useautotourdelay="false" autotourdelay="5" autotourHorizontalStartValue="0" />
|
|
<action name="startautotour">
|
|
set(tour_autotourenabled, true);
|
|
startautorotation();
|
|
|
|
|
|
events.dispatch(onstartautotour);
|
|
|
|
|
|
</action>
|
|
<action name="resetautotourvariables">
|
|
stopautotourtimer();
|
|
if (scene[get(xml.scene)].planar,
|
|
set(autotourdelay, 10);
|
|
delayedcall(autotour_call_id, get(autotourdelay), autotourtimer);
|
|
,
|
|
set(autotourHorizontalStartValue, get(view.hlookat));
|
|
if ((panoview.hmin == -180) AND (panoview.hmax == 180),
|
|
delayedcallAutotourFull360();
|
|
,
|
|
set(previousStep, 0);
|
|
set(panoramaHorizontalSize, 0);
|
|
set(totalPartialSize, 0);
|
|
set(firstBorderSize, 0);
|
|
set(secondBorderSize, 0);
|
|
set(firstStep, 0);
|
|
set(firstStepTest, 0);
|
|
set(firstStepKeep, 0);
|
|
set(borderCounter, 0);
|
|
sub(panoramaHorizontalSize, get(panoview.hmax), get(panoview.hmin));
|
|
Math.abs(panoramaHorizontalSize);
|
|
delayedcallAutotourPartial();
|
|
);
|
|
);
|
|
</action>
|
|
<action name="delayedcallAutotourPartial">
|
|
sub(tempPosition, get(view.hlookat), get(autotourHorizontalStartValue));
|
|
Math.ceil(tempPosition);
|
|
Math.abs(tempPosition);
|
|
if(borderCounter == 0 AND tempPosition LT previousStep,
|
|
|
|
inc(borderCounter);
|
|
Math.abs(firstStep, get(previousStep));
|
|
sub(firstStepTest, get(previousStep), get(firstStep));
|
|
set(firstStepKeep, get(firstStepTest));
|
|
Math.abs(firstBorderSize, get(previousStep));
|
|
add(totalPartialSize, get(firstBorderSize));
|
|
);
|
|
if(borderCounter GE 1,
|
|
if(firstBorderSize != 0,
|
|
sub(firstStepTest, get(previousStep), get(firstStep));
|
|
Math.abs(firstStepTest, get(firstStepTest));
|
|
if(firstStepTest LT firstStepKeep,
|
|
|
|
add(totalPartialSize, get(firstBorderSize));
|
|
set(firstBorderSize, 0);
|
|
);
|
|
set(firstStepKeep, get(firstStepTest));
|
|
,
|
|
if(tempPosition LT previousStep,
|
|
|
|
inc(borderCounter);
|
|
Math.abs(secondBorderSize, get(previousStep));
|
|
add(totalPartialSize, get(secondBorderSize));
|
|
);
|
|
);
|
|
);
|
|
set(previousStep, get(tempPosition));
|
|
if(borderCounter GE 2 AND totalPartialSize GT panoramaHorizontalSize,
|
|
delete(previousStep, panoramaHorizontalSize, totalPartialSize, firstBorderSize, secondBorderSize, firstStep, firstStepTest, firstStepKeep, borderCounter);
|
|
autotourtimer();
|
|
,
|
|
delayedcall(autotour_call_id, 0.5, delayedcallAutotourPartial);
|
|
);
|
|
</action>
|
|
<action name="delayedcallAutotourFull360">
|
|
sub(tempPosition, get(view.hlookat), get(autotourHorizontalStartValue));
|
|
mod(tempPositionMod, get(tempPosition), 360);
|
|
Math.ceil(tempPosition);
|
|
Math.ceil(tempPositionMod);
|
|
if(tempPositionMod == tempPosition,
|
|
delayedcall(autotour_call_id, 0.5, delayedcallAutotourFull360);
|
|
,
|
|
autotourtimer();
|
|
);
|
|
</action>
|
|
<action name="stopautotour">
|
|
set(tour_autotourenabled, false);
|
|
stopautotourtimer();
|
|
stopautorotation();
|
|
|
|
|
|
events.dispatch(onstopautotour);
|
|
</action>
|
|
<action name="autotourtimer">
|
|
if(tour_autotourenabled,
|
|
if(tour_autorotateenabled,
|
|
if(autorotate.enabled,
|
|
stopautotour();loadNextScene();
|
|
|
|
startautotour();
|
|
);
|
|
);
|
|
);
|
|
</action>
|
|
<action name="stopautotourtimer">
|
|
stopdelayedcall(autotour_call_id);
|
|
</action>
|
|
<events name="autotourevents"
|
|
onnewpano="autotouronnewpanoaction();"
|
|
onmouseup="autotouronuseraction(true);"
|
|
onmousedown="autotouronuseraction(false);"
|
|
onkeyup="autotouronuseraction(true);"
|
|
keep="true" />
|
|
<action name="autotouronnewpanoaction">
|
|
if(tour_autotourenabled, resetautotourvariables(););
|
|
</action>
|
|
<action name="autotouronuseraction">
|
|
if(tour_autotourenabled, if(%1, resetautotourvariables();, stopautotourtimer();););
|
|
</action>
|
|
<events name="autotourstartevents" onTourStart="autotouratstart();" keep="true" />
|
|
<action name="autotouratstart">
|
|
if(norotation === null, if(noautotour === null, startautotour();););
|
|
set(events[autotourstartevents].keep, false);
|
|
</action>
|
|
|
|
|
|
|
|
<krpano tour_deeplinkingvars=""/>
|
|
<action name="computeDeepLinkingURL">
|
|
txtadd(tour_deeplinkingvars, "s=", get(xml.scene));
|
|
set(viewhlookat, get(view.hlookat));roundval(viewhlookat, 4);
|
|
mod(viewhlookat, 360);
|
|
if (viewhlookat GT 180,
|
|
sub(viewhlookat, 360);
|
|
,
|
|
if (viewhlookat LT -180, add(viewhlookat, 360));
|
|
);
|
|
set(viewvlookat, get(view.vlookat));roundval(viewvlookat, 4);
|
|
set(viewfov, get(view.fov));roundval(viewfov, 4);
|
|
txtadd(tour_deeplinkingvars, get(tour_deeplinkingvars), "&h=", get(viewhlookat));
|
|
txtadd(tour_deeplinkingvars, get(tour_deeplinkingvars), "&v=", get(viewvlookat));
|
|
txtadd(tour_deeplinkingvars, get(tour_deeplinkingvars), "&f=", get(viewfov));
|
|
if (%1 !== null,if (%1, txtadd(tour_deeplinkingvars, get(tour_deeplinkingvars), "&skipintro");););
|
|
if (%2 !== null,if (%2, txtadd(tour_deeplinkingvars, get(tour_deeplinkingvars), "&norotation");););
|
|
|
|
</action>
|
|
|
|
|
|
<!-- Spot animation management -->
|
|
<action name="animate">
|
|
if (tour_stopsequence == false,
|
|
if (stopspotsequence == false,
|
|
txtadd(delayedname, %1, 'delay');
|
|
if(hotspot[%1].loaded,
|
|
inc(hotspot[%1].frame,1,get(hotspot[%1].lastframe),0);
|
|
mul(hotspot[%1].ypos,get(hotspot[%1].frame),get(hotspot[%1].frameheight));
|
|
txtadd(hotspot[%1].crop,'0|',get(hotspot[%1].ypos),'|',get(hotspot[%1].framewidth),'|',get(hotspot[%1].frameheight));
|
|
);
|
|
delayedcall(get(delayedname),%2,animate(%1,%2));
|
|
);
|
|
);
|
|
</action>
|
|
<action name="startspotanimation">
|
|
set(tour_stopsequence, false);
|
|
set(stopspotsequence , false);
|
|
animate(get(name), %1);
|
|
</action>
|
|
<action name="stopspotanimation">
|
|
set(hotspot[%1].stopspotsequence, true);
|
|
txtadd(delayedname, %1, 'delay');
|
|
stopdelayedcall(get(delayedname));
|
|
</action>
|
|
<action name="interruptAnimation">
|
|
if(tour_stopsequence == false,
|
|
set(tour_stopsequence, true);
|
|
|
|
);
|
|
</action>
|
|
|
|
<!-- Disable the default fullscreen mode as it does a fullscreen only on the viewer not "on the tour" -->
|
|
<contextmenu fullscreen="false" versioninfo="false" />
|
|
|
|
<!-- Tooltips management -->
|
|
<!-- Tooltip Management -->
|
|
|
|
<krpano tooltipCurrentTextfieldLayer="panotourTooltipDefaultText" coretooltipmess=""/>
|
|
|
|
<events name="showHideTooltipEvents" onremovepano="hideTooltip();" keep="true" />
|
|
|
|
<action name="showTooltip">
|
|
if (tooltip !== null,
|
|
getmessage(currentTooltipText, get(tooltip));
|
|
if (%2 == null,
|
|
set(tooltipCurrentTextfieldLayer, "panotourTooltipDefaultText");
|
|
,
|
|
set(tooltipCurrentTextfieldLayer, %2);
|
|
);
|
|
|
|
ifnot (currentTooltipText == "",
|
|
|
|
tooltipTextSettingsUpdate(%1, %3, %4, %5, %6);
|
|
|
|
set(tooltipHtmlText, get(currentTooltipText));
|
|
escape(tooltipHtmlText);
|
|
set(layer[get(tooltipCurrentTextfieldLayer)].html, get(tooltipHtmlText));
|
|
set(layer[get(tooltipCurrentTextfieldLayer)].visible, true);
|
|
set(layer[get(tooltipCurrentTextfieldLayer)].tag, "tooltip");
|
|
|
|
div(halfWidth, get(layer[get(tooltipCurrentTextfieldLayer)].width), 2);
|
|
div(halfHeight, get(layer[get(tooltipCurrentTextfieldLayer)].height), 2);
|
|
|
|
<!-- Default edge center -->
|
|
set(usedWidth, get(halfWidth));
|
|
set(usedHeight, get(halfHeight));
|
|
|
|
if(layer[get(tooltipCurrentTextfieldLayer)].edge == "left",
|
|
set(usedWidth, get(layer[get(tooltipCurrentTextfieldLayer)].width));
|
|
add(rightMargin, get(mouse.x), get(usedWidth));
|
|
set(leftMargin, get(mouse.x));
|
|
,
|
|
if(layer[get(tooltipCurrentTextfieldLayer)].edge == "right",
|
|
set(usedWidth, get(layer[get(tooltipCurrentTextfieldLayer)].width));
|
|
set(rightMargin, get(mouse.x));
|
|
sub(leftMargin, get(mouse.x), get(usedWidth));
|
|
,
|
|
add(rightMargin, get(mouse.x), get(usedWidth));
|
|
sub(leftMargin, get(mouse.x), get(usedWidth));
|
|
);
|
|
);
|
|
|
|
add(rightMargin, get(layer[get(tooltipCurrentTextfieldLayer)].xoffset));
|
|
add(leftMargin, get(layer[get(tooltipCurrentTextfieldLayer)].xoffset));
|
|
|
|
if(layer[get(tooltipCurrentTextfieldLayer)].edge == "bottom",
|
|
set(usedHeight, get(layer[get(tooltipCurrentTextfieldLayer)].height));
|
|
sub(topMargin, get(mouse.y), get(usedHeight));
|
|
set(bottomMargin, get(mouse.y));
|
|
,
|
|
if(layer[get(tooltipCurrentTextfieldLayer)].edge == "top",
|
|
set(usedHeight, get(layer[get(tooltipCurrentTextfieldLayer)].height));
|
|
set(topMargin, get(mouse.y));
|
|
add(bottomMargin, get(mouse.y), get(usedHeight));
|
|
,
|
|
sub(topMargin, get(mouse.y), get(usedHeight));
|
|
add(bottomMargin, get(mouse.y), get(usedHeight));
|
|
);
|
|
);
|
|
|
|
add(topMargin, get(layer[get(tooltipCurrentTextfieldLayer)].yoffset));
|
|
add(bottomMargin, get(layer[get(tooltipCurrentTextfieldLayer)].yoffset));
|
|
|
|
if(leftMargin LT 0,
|
|
set(layer[get(tooltipCurrentTextfieldLayer)].align, "left");
|
|
set(tooltipPositionX, get(usedWidth));
|
|
,
|
|
set(tooltipstagewidth, get(stagewidth));
|
|
if(area.left, sub(tooltipstagewidth, get(area.left)));
|
|
if(area.right, sub(tooltipstagewidth, get(area.right)));
|
|
|
|
if(rightMargin GT tooltipstagewidth,
|
|
set(layer[get(tooltipCurrentTextfieldLayer)].align, "right");
|
|
set(tooltipPositionX, get(usedWidth));
|
|
,
|
|
div(tooltipPositionX, get(tooltipstagewidth), 2);
|
|
sub(tooltipPositionX, get(mouse.x), get(tooltipPositionX));
|
|
add(tooltipPositionX, get(layer[get(tooltipCurrentTextfieldLayer)].xoffset));
|
|
);
|
|
);
|
|
|
|
set(layer[get(tooltipCurrentTextfieldLayer)].x, get(tooltipPositionX));
|
|
|
|
if(topMargin LT 0,
|
|
if(layer[get(tooltipCurrentTextfieldLayer)].align == "center",
|
|
set(layer[get(tooltipCurrentTextfieldLayer)].align, "top");
|
|
,
|
|
txtadd(layer[get(tooltipCurrentTextfieldLayer)].align, "top");
|
|
);
|
|
set(tooltipPositionY, get(usedHeight));
|
|
,
|
|
set(tooltipstageheight, get(stageheight));
|
|
if(area.top, sub(tooltipstageheight, get(area.top)));
|
|
if(area.bottom, sub(tooltipstageheight, get(area.bottom)));
|
|
|
|
if(bottomMargin GT tooltipstageheight,
|
|
if(layer[get(tooltipCurrentTextfieldLayer)].align == "center",
|
|
set(layer[get(tooltipCurrentTextfieldLayer)].align, "bottom");
|
|
,
|
|
txtadd(layer[get(tooltipCurrentTextfieldLayer)].align, "bottom");
|
|
);
|
|
set(tooltipPositionY, get(usedHeight));
|
|
,
|
|
div(tooltipPositionY, get(tooltipstageheight), 2);
|
|
sub(tooltipPositionY, get(mouse.y), get(tooltipPositionY));
|
|
add(tooltipPositionY, get(layer[get(tooltipCurrentTextfieldLayer)].yoffset));
|
|
);
|
|
);
|
|
|
|
set(layer[get(tooltipCurrentTextfieldLayer)].y, get(tooltipPositionY));
|
|
);
|
|
);
|
|
</action>
|
|
|
|
<action name="tooltipTextSettingsUpdate">
|
|
if(get(tooltipCurrentTextfieldLayer) != "",
|
|
|
|
set(layer[get(tooltipCurrentTextfieldLayer)].align, "center");
|
|
if (%2 == null,
|
|
set(layer[get(tooltipCurrentTextfieldLayer)].edge, "bottom");
|
|
,
|
|
set(layer[get(tooltipCurrentTextfieldLayer)].edge, %2);
|
|
);
|
|
if (%3 != null,
|
|
set(layer[get(tooltipCurrentTextfieldLayer)].wordwrap, true);
|
|
set(layer[get(tooltipCurrentTextfieldLayer)].width, %3);
|
|
);
|
|
if (%4 != null,
|
|
set(layer[get(tooltipCurrentTextfieldLayer)].xoffset, %4);
|
|
);
|
|
if (%5 != null,
|
|
set(layer[get(tooltipCurrentTextfieldLayer)].yoffset, %5);
|
|
);
|
|
set(layer[get(tooltipCurrentTextfieldLayer)].zorder, 99);
|
|
);
|
|
</action>
|
|
|
|
<action name="hideTooltip">
|
|
set(layer[get(tooltipCurrentTextfieldLayer)].visible, false);
|
|
set(layer[get(tooltipCurrentTextfieldLayer)].html, '');
|
|
</action>
|
|
|
|
<action name="showPermanentTooltip">
|
|
if (tooltip !== null,
|
|
getmessage(currentTooltipText, get(tooltip));
|
|
ifnot (currentTooltipText == "",
|
|
txtadd(permanentTooltipForSpot, get(tooltip), '_permanent');
|
|
set(activateUsePermanentTooltip, false);
|
|
if(%1 == "std",
|
|
if(device.desktop,
|
|
set(activateUsePermanentTooltip, true);
|
|
);
|
|
,
|
|
if(%1 == "touch",
|
|
if(device.tablet OR device.mobile,
|
|
set(activateUsePermanentTooltip, true);
|
|
);
|
|
,
|
|
set(activateUsePermanentTooltip, true);
|
|
);
|
|
);
|
|
if(activateUsePermanentTooltip,
|
|
addlayer(get(permanentTooltipForSpot));
|
|
txtadd(layer[get(permanentTooltipForSpot)].parent, 'hotspot[', get(name), ']');
|
|
if(rotate,
|
|
sub(newRotate, 0, get(rotate));
|
|
if(rotate GE 0 AND rotate LT 45 OR rotate GE 315 AND rotate LT 360,
|
|
set(layer[get(permanentTooltipForSpot)].rotate,get(newRotate));
|
|
if (%2 == null,
|
|
set(layer[get(permanentTooltipForSpot)].align,bottom);
|
|
,
|
|
set(layer[get(permanentTooltipForSpot)].align,top);
|
|
);
|
|
,
|
|
if(rotate GE 45 AND rotate LT 135,
|
|
set(layer[get(permanentTooltipForSpot)].rotate,get(newRotate));
|
|
if (%2 == null,
|
|
set(layer[get(permanentTooltipForSpot)].align,right);
|
|
,
|
|
set(layer[get(permanentTooltipForSpot)].align,left);
|
|
);
|
|
,
|
|
if(rotate GE 135 AND rotate LT 225,
|
|
set(layer[get(permanentTooltipForSpot)].rotate,get(newRotate));
|
|
if (%2 == null,
|
|
set(layer[get(permanentTooltipForSpot)].align,top);
|
|
,
|
|
set(layer[get(permanentTooltipForSpot)].align,bottom);
|
|
);
|
|
,
|
|
set(layer[get(permanentTooltipForSpot)].rotate,get(newRotate));
|
|
if (%2 == null,
|
|
set(layer[get(permanentTooltipForSpot)].align,left);
|
|
,
|
|
set(layer[get(permanentTooltipForSpot)].align,right);
|
|
);
|
|
);
|
|
);
|
|
);
|
|
,
|
|
if (%2 == null,
|
|
set(layer[get(permanentTooltipForSpot)].align,bottom);
|
|
,
|
|
set(layer[get(permanentTooltipForSpot)].align,top);
|
|
);
|
|
);
|
|
if (%2 == null,
|
|
set(layer[get(permanentTooltipForSpot)].edge,top);
|
|
,
|
|
set(layer[get(permanentTooltipForSpot)].edge,bottom);
|
|
);
|
|
set(layer[get(permanentTooltipForSpot)].enabled,false);
|
|
set(layer[get(permanentTooltipForSpot)].capture,false);
|
|
set(layer[get(permanentTooltipForSpot)].visible, true);
|
|
set(layer[get(permanentTooltipForSpot)].tag,"tooltip");
|
|
|
|
set(layer[get(permanentTooltipForSpot)].type,text);
|
|
set(layer[get(permanentTooltipForSpot)].bg,false);
|
|
set(layer[get(permanentTooltipForSpot)].bgborder,0);
|
|
set(layer[get(permanentTooltipForSpot)].css,'color:#ffffff;font-family:조선일보명조;font-weight:bold;font-size:14px;text-align:center;');
|
|
set(layer[get(permanentTooltipForSpot)].interactivecontent, false);
|
|
set(layer[get(permanentTooltipForSpot)].zorder,3);
|
|
set(layer[get(permanentTooltipForSpot)].padding,2);
|
|
|
|
set(tooltipHtmlText, get(currentTooltipText));
|
|
escape(tooltipHtmlText);
|
|
set(layer[get(permanentTooltipForSpot)].html, get(tooltipHtmlText));
|
|
);
|
|
);
|
|
);
|
|
</action>
|
|
|
|
<action name="updatePermanentTooltip">
|
|
for(set(hsi, 0), hsi LT hotspot.count, inc(hsi),
|
|
if(hotspot[get(hsi)].tooltip !== NULL AND hotspot[get(hsi)].tooltip != "",
|
|
txtadd(permTooltipName, get(hotspot[get(hsi)].tooltip), '_permanent');
|
|
if(permTooltipName,
|
|
getmessage(changeTooltipTxt, get(hotspot[get(hsi)].tooltip));
|
|
escape(changeTooltipTxt);
|
|
set(layer[get(permTooltipName)].html, get(changeTooltipTxt));
|
|
);
|
|
);
|
|
);
|
|
</action>
|
|
|
|
<events name="permanentTooltipEvents" keep="true" changetourlanguage="updatePermanentTooltip()" />
|
|
|
|
|
|
|
|
<!-- Default HTML5 tooltip style -->
|
|
|
|
<layer name="panotourTooltipDefaultText"
|
|
keep="true"
|
|
enabled="false"
|
|
capture="false"
|
|
type="text"
|
|
align="center"
|
|
bg="false"
|
|
bgborder="0"
|
|
css="color:#ffffff;font-family:조선일보명조;font-weight:bold;font-size:14px;text-align:left;"
|
|
edge="bottom"
|
|
zorder="0"
|
|
xoffset="0"
|
|
yoffset="0"
|
|
interactivecontent="false"
|
|
wordwrap="true"
|
|
padding="2"
|
|
visible="false"
|
|
html=""
|
|
/>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- Keyboard management
|
|
* use the keyboard +/- keys to zoom in/out
|
|
* use the keyboard CTRL+0 keys to reset the default panorama view
|
|
-->
|
|
<control keycodesin="107,187" keycodesout="109,189" />
|
|
<krpano tour_ctrlPressed="false"/>
|
|
<events name="keycontrolZoomEvents" onkeydown="onKDZ" onkeyup="onKUZ" keep="true"/>
|
|
<action name="onKDZ">if(keycode==17,set(tour_ctrlPressed,true);,if(tour_ctrlPressed==true,if(keycode==96,hideTooltip();lookto(get(panoview.h),get(panoview.v),get(panoview.fov)););););</action>
|
|
<action name="onKUZ">if(keycode==17,set(tour_ctrlPressed,false););</action>
|
|
|
|
<!-- Indicate if a scene is seen or not - dispatch an event if the state is changed -->
|
|
<events name="sceneSeenEvents" onnewpano="changeSeenState" keep="true"/>
|
|
<krpano tour_nbseenscenes="0"/>
|
|
<action name="changeSeenState">
|
|
ifnot (scene[get(xml.scene)].seen,
|
|
set(scene[get(xml.scene)].seen, true);
|
|
events.dispatch(onSeenStateChanged);
|
|
|
|
if (scene[get(xml.scene)].group,
|
|
copy(currentgroup, scene[get(xml.scene)].group);
|
|
ifnot (panoramagroup[get(currentgroup)].seen,
|
|
set(groupseen, true);
|
|
for( copy(sceneindex, scene[get(panoramagroup[get(currentgroup)].mainscene)].index),
|
|
(scene[get(sceneindex)].group == currentgroup) AND groupseen,
|
|
inc(sceneindex),
|
|
ifnot (scene[get(sceneindex)].seen,
|
|
set(groupseen, false);
|
|
);
|
|
);
|
|
if (groupseen,
|
|
set(panoramagroup[get(currentgroup)].seen, true);
|
|
events.dispatch(ongroupseenstatechanged);
|
|
);
|
|
);
|
|
);
|
|
|
|
inc(tour_nbseenscenes);
|
|
if (tour_nbseenscenes == scene.count,
|
|
events.dispatch(onallsceneseen);
|
|
);
|
|
);
|
|
</action>
|
|
|
|
|
|
<!-- Cursors management -->
|
|
<cursors standard="" dragging="" moving="" />
|
|
<events name="cursorsEvents" onnewpano="setCursor" oncontrolmodechanged="setCursor" keep="true" devices="desktop" />
|
|
<action name="setCursor">
|
|
if (tour_controlmodemousetype == moveto,
|
|
setarrowcursors();
|
|
,
|
|
sethandcursors();
|
|
);
|
|
</action>
|
|
<!-- Change Cursors Appearance -->
|
|
|
|
<action name="setarrowcursors">
|
|
if (device.flash,
|
|
ifnot(device.mac,
|
|
set(cursors.url , %FIRSTXML%/graphics/cursors_move.png);
|
|
set(cursors.type , 8way);
|
|
set(cursors.move , 0|0|16|16);
|
|
set(cursors.drag , 16|0|16|16);
|
|
set(cursors.arrow_u , 32|0|16|16);
|
|
set(cursors.arrow_d , 48|0|16|16);
|
|
set(cursors.arrow_l , 64|0|16|16);
|
|
set(cursors.arrow_r , 80|0|16|16);
|
|
set(cursors.arrow_lu, 96|0|16|16);
|
|
set(cursors.arrow_ru, 112|0|16|16);
|
|
set(cursors.arrow_rd, 128|0|16|16);
|
|
set(cursors.arrow_ld, 144|0|16|16);
|
|
);
|
|
,
|
|
js(kpanotour.Cursors.setMoveCursor());
|
|
);
|
|
</action>
|
|
<action name="sethandcursors">
|
|
if (device.flash,
|
|
ifnot(device.mac,
|
|
set(cursors.url , %FIRSTXML%/graphics/cursors_drag.png);
|
|
set(cursors.type, 2way);
|
|
set(cursors.move, 0|0|32|32);
|
|
set(cursors.drag, 32|0|32|32);
|
|
);
|
|
,
|
|
js(kpanotour.Cursors.setDragCursor());
|
|
);
|
|
</action>
|
|
|
|
|
|
|
|
</krpano>
|