Chamilo is a learning management system focused on ease of use and accessibility
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
chamilo-lms/main/plugin/hotspot/hotspot_solution.fla.as

350 lines
11 KiB

// javascript Proxy
import com.macromedia.javascript.JavaScriptProxy;
var JS_proxy:JavaScriptProxy = new JavaScriptProxy();
System.useCodepage = true;
// get id from querystring
myURL = this._url;
//myURL = "http://localhost/dokeosSVN/main/plugin/hotspot/hotspot_solution.swf?modifyAnswers=1&exe_id=2&from_db=3";
tmpAr = myURL.split("?");
tmpAr = tmpAr[1].split("&");
id = tmpAr[0].split("=");
id = id[1];
exe_id = tmpAr[1].split("=");
exe_id = exe_id[1];
from_db = tmpAr[2].split("=");
from_db = from_db[1];
// get URL to load lang and hotspot variables
//myURL = this._url;
myPos = myURL.lastIndexOf("/");
myURL = myURL.substring(0, myPos);
myPos = myURL.lastIndexOf("/");
myURL = myURL.substring(0, myPos);
myPos = myURL.lastIndexOf("/");
myURL = myURL.substring(0, myPos);
// movie properties
var movieWidth:Number = 380;
var movieHeight:Number = 400;
// hotspot properties
var startWidth:Number = 0; // \__ if these values are set, shape will be drawn right and down from the mouse;
var startHeight:Number = 0; // /
var pType:String = ""; // possible values: circle, square, poly;
// other settings
var i:Number = 1;
var isDrawing:Boolean = false;
var hotspots_c:Array = new Array('0x4271B5','0xFE8E16','0x45C7F0','0xBCD631','0xD63173','0xD7D7D7','0x90AFDD','0xAF8640','0x4F9242','0xF4EB24','0xED2024','0x3B3B3B');
// make array with all elements
var hotspots:Array = new Array();
// get data from database
this.createEmptyMovieClip("target_mc", 2000);
//_answers
loadVariables(myURL + "/exercice/hotspot_answers.as.php?modifyAnswers="+id+"&exe_id="+exe_id+"&from_db="+from_db, target_mc);
var param_interval:Number = setInterval(checkParamsLoaded, 100);
// language variables
var str_choose:String = "";
var lang_interval:Number
// counter for language (if language can't be loaded after 2 sec,
// english will be loaded
var counter:Number = 0;
// booleans for loading
var langLoaded:Boolean = false;
var varsLoaded:Boolean = false;
var imageLoaded:Boolean = false;
// image preloader
var loadListener:Object = new Object();
loadListener.onLoadComplete = function(){
_root.imageLoaded = true;
_root.showInterface();
}
var mcLoader:MovieClipLoader = new MovieClipLoader();
mcLoader.addListener(loadListener);
var mc:MovieClip = _root.image_mc;
/////////////////////////////////////////////////////////////////////////////////
// FUNCTIONS
/////////////////////////////////////////////////////////////////////////////////
// show hotspots, user can't click anymore
function showHotspots(num){
for(j=1;j<=_root.hotspots.length;j++){
_root.map_mc["hotspot"+j]._alpha = num;
}
}
function showUserpoints(num){
for(j=1;j<=_root.hotspots.length;j++){
_root["hotspot_answer"+j]._alpha = num;
if(num==0){
_root["hotspot_answer"+j].hotspot_mc._visible = false;
}else{
_root["hotspot_answer"+j].hotspot_mc._visible = true;
}
}
}
function showInterface(){
if((_root.langLoaded == true) and (_root.varsLoaded == true) and (_root.imageLoaded == true)){
_root.showUserpoints(100);
_root.showHotspots(100);
_root.loading_mc._visible = false;
}
}
// get language file
function getLang(){
counter++;
if (_root.lang_mc.done != undefined) {
_root.show_userPoints_btn.label = _root.lang_mc.showUserPoints;
_root.show_hotspots_btn.label = _root.lang_mc.showHotspots;
// check if interface can be showed (if everything else is loaded)
_root.langLoaded = true;
_root.showInterface();
// clear interval
clearInterval(_root.lang_interval);
}else if(counter==20){
// clear interval
clearInterval(_root.lang_interval);
// set counter to zero
_root.counter = 0;
// set new interval (get english version)
loadVariables(myURL + "/lang/english/hotspot.inc.php", _root.lang_mc);
_root.lang_interval = setInterval(getLang, 100);
}
}
function checkParamsLoaded() {
if (target_mc.done != undefined) {
// once we know the language, get language-variables from language file
language = target_mc["hotspot_lang"];
_root.createEmptyMovieClip("lang_mc", 2001);
//loadVariables(myURL + "/lang/" + language + "/hotspot.inc.php", _root.lang_mc);
loadVariables(myURL + "/exercice/hotspot.inc.php", _root.lang_mc);
_root.lang_interval = setInterval(getLang, 100);
// start loading external image
_root.mcLoader.loadClip("../../courses/" + target_mc["courseCode"] + "/document/images/" + target_mc["hotspot_image"], mc);
// make needed array's: filled if hotspot exists, empty if not
for(m = 1; m <= 12; m++){
// make seperate lists
if(target_mc["hotspot_" + m]=="true"){
// add to general list
tmpAr = Array();
tmpAr.push(m);
tmpAr.push(target_mc["hotspot_" + m + "_type"]);
_root.hotspots.push(tmpAr);
if (target_mc["hotspot_" + m + "_type"] != 'poly' && target_mc["hotspot_" + m + "_type"] != 'delineation'){
// x;y|height|width
_root["p_hotspot_" + m] = new Array;
$coordinates = target_mc["hotspot_" + m + "_coord"].split("|");
$tmp_xy = $coordinates[0].split(";");
$x = $tmp_xy[0];
$y = $tmp_xy[1];
$height = $coordinates[1];
$widht = $coordinates[2];
_root["p_hotspot_" + m].push($x);
_root["p_hotspot_" + m].push($y);
_root["p_hotspot_" + m].push($height);
_root["p_hotspot_" + m].push($widht);
}else{
// p1_x;p1_y|p2_x;p2_y|...
_root["p_hotspot_" + m] = new Array();
$coordinates = target_mc["hotspot_" + m + "_coord"].split("|");
for(k=0;k<$coordinates.length;k++){
$tmp_xy = $coordinates[k].split(";");
tempArray = Array();
tempArray.push($tmp_xy[0]);
tempArray.push($tmp_xy[1]);
_root["p_hotspot_" + m].push(tempArray);
}
}
}else{
_root["p_hotspot_" + m] = Array();
}
}
// set border around image
_root.map_mc._width = int(target_mc.hotspot_image_width) + 1;
_root.map_mc._height = int(target_mc.hotspot_image_height) + 1;
// draw the hotspots
drawShapes();
// check if interface can be showed (if everything else is loaded)
_root.varsLoaded = true;
_root.showInterface();
// clear interval
clearInterval(param_interval);
}
}
// draw the shapes that are given from the database
function drawShapes(){
// draw points where user clicked
_root.drawPoints();
// draw hotspots
for (var j:String in hotspots) {
if(j <> ""){
// +1 because array names starts from 1
_root.i = int(j) + 1;
// -1 because array values starts from 0
_root.pType = _root.hotspots[_root.i - 1][1];
if(_root.pType=="poly" || _root.pType=="delineation"){
drawPoly();
}
else{
drawShape(true);
}
_root.map_mc["hotspot" + _root.i]._alpha = 0;
}
}
}
function drawPoints(){
answers = _root.target_mc.p_hotspot_answers.split("|");
if(answers[0]!=''){
j = 1;
k = 500;
for(var z:String in answers){
if(target_mc["hotspot_"+j+"_type"]=="delineation")
{
// trace poly
delineation_coords = answers[j-1].split("/");
drawDelineation(j, delineation_coords);
}
else
{
xy = answers[j-1].split(";");
$x = xy[0];
$y = xy[1];
// create new hotspot
_root.createEmptyMovieClip("hotspot_answer" + j, k);
// attach correct type of hotspot
_root["hotspot_answer" + j].attachMovie("numbers", "hotspot_mc", _root["hotspot_answer" + j].getNextHighestDepth());
_root["hotspot_answer" + j].hotspot_mc._width = 33;
_root["hotspot_answer" + j].hotspot_mc._height = 22;
_root["hotspot_answer" + j].hotspot_mc._x = int($x) + _root.map_mc._x;
_root["hotspot_answer" + j].hotspot_mc._y = int($y) + _root.map_mc._y;
_root["hotspot_answer" + j].hotspot_mc.order_txt.text = int(j);
_root["hotspot_answer" + j].hotspot_mc._visible = false;
_root["hotspot_answer" + j]._alpha = 0;
}
j++;
k++;
}
}
}
function drawShape(userDrawing){
// create new hotspot
_root.map_mc.createEmptyMovieClip("hotspot" + _root.i, _root.i);
// attach correct type of hotspot
_root.map_mc["hotspot" + _root.i].attachMovie(_root.pType, "hotspot_mc", _root.map_mc["hotspot" + _root.i].getNextHighestDepth());
_root.map_mc["hotspot" + _root.i].hotspot_mc._visible = true;
_root.map_mc["hotspot" + _root.i].hotspot_mc.center_mc._alpha = 60;
_root.map_mc["hotspot" + _root.i].hotspot_mc._x = _root["p_hotspot_"+ _root.i][0];
_root.map_mc["hotspot" + _root.i].hotspot_mc._y = _root["p_hotspot_"+ _root.i][1];
_root.map_mc["hotspot" + _root.i].hotspot_mc._width = _root["p_hotspot_"+ _root.i][2];
_root.map_mc["hotspot" + _root.i].hotspot_mc._height = _root["p_hotspot_"+ _root.i][3];
colorchange = new Color(_root.map_mc["hotspot" + _root.i].hotspot_mc);
colorchange.setRGB(_root.hotspots_c[_root.i - 1]);
}
// when black lines of hotspots are deleted, draw the exact same poly with coordinates
// that are saved in the array
function drawPoly(){
// create empty movieclip
_root.map_mc.createEmptyMovieClip("hotspot" + _root.i, _root.i);
// begin filling the movieclip
_root.map_mc["hotspot" + _root.i].beginFill(_root.hotspots_c[_root.i - 1], 60);
// set linestyle
_root.map_mc["hotspot" + _root.i].lineStyle(1, _root.hotspots_c[_root.i - 1], 100);
// move mouse to first coordinate
_root.map_mc["hotspot" + _root.i].moveTo(_root["p_hotspot_"+_root.i][0][0],_root["p_hotspot_"+_root.i][0][1]);
// draw lines to all coordinates
v = _root["p_hotspot_"+_root.i].length;
for (k=1;k<v;k++){
_root.map_mc["hotspot" + _root.i].lineTo(_root["p_hotspot_"+_root.i][k][0],_root["p_hotspot_"+_root.i][k][1]);
}
// attach first and last coordinates
_root.map_mc["hotspot" + _root.i].lineTo(_root["p_hotspot_"+_root.i][0][0],_root["p_hotspot_"+_root.i][0][1]);
// stop filling the movieclip
_root.map_mc["hotspot" + _root.i].endFill();
}
function drawDelineation(level, coords){
// create empty movieclip
_root.map_mc.createEmptyMovieClip("hotspot_delineation" + level, 2000+level);
// begin filling the movieclip
_root.map_mc["hotspot_delineation" + level].beginFill(0xFFFFFF, 60);
// set linestyle
_root.map_mc["hotspot_delineation" + level].lineStyle(1,0x000000, 100);
// move mouse to first coordinate
xy_origin = coords[0].split(";");
_root.map_mc["hotspot_delineation" + level].moveTo(xy_origin[0],xy_origin[1]);
// draw lines to all coordinates
v = coords.length;
for (k=1;k<v;k++){
xy = coords[k].split(";");
_root.map_mc["hotspot_delineation" + level].lineTo(xy[0],xy[1]);
}
// attach first and last coordinates
_root.map_mc["hotspot_delineation" + level].lineTo(xy_origin[0],xy_origin[1]);
// stop filling the movieclip
_root.map_mc["hotspot_delineation" + level].endFill();
}
function jsdebug(debug_string){
_root.JS_proxy.jsdebug(debug_string);
}