OSDN Git Service

core.jsの整理
authorhikarupsp <hikarupsp@users.sourceforge.jp>
Tue, 20 Aug 2013 14:42:59 +0000 (23:42 +0900)
committerhikarupsp <hikarupsp@users.sourceforge.jp>
Tue, 20 Aug 2013 14:42:59 +0000 (23:42 +0900)
ネットワークプレイの際に相手のユーザー名が表示されるようになった。
ユーザー名に日本語が利用できるようになった。

www/corelib/classes/GameStageClass.js
www/corelib/classes/StageObjectClass.js
www/corelib/core.js
www/corelib/coredraw.js
www/corelib/coresubc.js
www/header.php
www/stage/login.js
www/stage/pcdsltest.js
www/update.php

index 0148d25..1843660 100644 (file)
@@ -94,7 +94,7 @@ GameStage.prototype = {
                for(var sp in this.stageObjectList)
                {
                        //\8ae\8eíStageObject\82Ìdraw\82ð\8eÀ\8ds
-                       for(i = 0, li = this.stageObjectList[sp].length; i < li; i++){
+                       for(var i = 0, li = this.stageObjectList[sp].length; i < li; i++){
                                var stgobj = this.stageObjectList[sp][i];
                                var px = stgobj.origin.x - x, py = stgobj.origin.y - y;
                                
@@ -167,7 +167,7 @@ GameStage.prototype = {
                //\8aÖ\90\94f\82ªfalse\82ð\95Ô\82µ\82½\8fê\8d\87\81A\82»\82±\82Å\8eÀ\8ds\82ð\92\86\92f\82µ\82Äfalse\82ð\95Ô\82·\81B
                for(var sp in this.stageObjectList)
                {
-                       for(i = 0; i < this.stageObjectList[sp].length; i++){
+                       for(var i = 0; i < this.stageObjectList[sp].length; i++){
                                
                                var stgobj = this.stageObjectList[sp][i];
                                if(!f(stgobj)) return false;
@@ -279,7 +279,7 @@ GameStage.prototype = {
                //\8e©\95ª\8e©\90g\82ª\8f\8a\97L\82·\82é\83I\83u\83W\83F\83N\83g\82·\82×\82Ä\82É\91Î\82µ\82Ä\8aÖ\90\94f\82ð\93K\97p\82·\82é
                for(var sp in this.stageObjectList)
                {
-                       for(i = 0; i < this.stageObjectList[sp].length; i++){
+                       for(var i = 0; i < this.stageObjectList[sp].length; i++){
                                var stgobj = this.stageObjectList[sp][i];
                                if(stgobj.ownerUID == this.manager.userID){
                                        f(stgobj);
@@ -288,12 +288,26 @@ GameStage.prototype = {
                }
        },
        getGlobalStageObject: function(objid){
-               for(i = 0; i < this.globalStageObjectList.length; i++){
+               for(var i = 0; i < this.globalStageObjectList.length; i++){
                        if(objid == this.globalStageObjectList[i].objectID){
                                return this.globalStageObjectList[i];
                        }
                }
                return null;
        },
+       appendSyncDataTo: function(data){
+               for(var i = 0; i < this.globalStageObjectList.length; i++){
+                       var anObj = this.globalStageObjectList[i];
+                       if(anObj.ownerUID == this.manager.userID){
+                               data.append(i, anObj.objectID + "|" + anObj.origin.x + "|" + anObj.origin.y + "|" + anObj.movingSpeed.x + "|" +  anObj.movingSpeed.y+ "|" + anObj.attribute);
+                       }
+               }
+       },
+       appendInitialSyncDataTo: function(data){
+               for(var i = 0; i < this.globalStageObjectList.length; i++){
+                       anObj = this.globalStageObjectList[i];
+                       data.append(i, anObj.origin.x.toString() + "|" + anObj.origin.y.toString() + "|" + anObj.movingSpeed.x.toString() + "|" +  anObj.movingSpeed.y.toString() + "|" + anObj.className + "|" + parseArrayToStringSource(anObj.attribute) + "|" + parseArrayToStringSource(anObj.constructorArgs));
+               }
+       },
 };
 
index c8837dd..e26c7d9 100644 (file)
@@ -11,14 +11,6 @@ function StageObject(ownerStage, args){
        this.attribute = new Array();
        this.constructorArgs = args;
        this.opacity = 1.0;             // \93§\96¾\93x\81@(\93§\96¾) 0.0 \81` 1.0 (\95s\93§\96¾)
-       /*
-               //\8fã\82Ì\8bL\8fq\82ð\88È\89º\82Ì\82æ\82¤\82É\82·\82ê\82Î\83R\83\93\83X\83g\83\89\83N\83^\82Ì\88ø\90\94\82ð\93ñ\82Â\82Ü\82Å\82É\8cÀ\82é\95K\97v\82ª\82È\82­\82È\82é
-               // \8fC\90³\8d\80\96Ú:    core.js
-               //              StageObjectClass.js
-               
-               this.constructorArgs = arguments.slice(1);      //arguments\82Ì\82¤\82¿ownerStage\82Í\82¢\82ç\82È\82¢\82Ì\82Å\8dí\82é
-       
-       */
        this.ownerUID = 0;
        this.objectID = 0;
        //\8eÀ\91Ì\82ð\8e\9d\82½\82È\82¢\81A\82Â\82Ü\82è\8fÕ\93Ë\94»\92è\82ª\95K\97v\82È\82¢\8fê\8d\87\82Ítrue.
@@ -37,7 +29,14 @@ StageObject.prototype = {
        },
        draw: function(x, y){
                //\8eÀ\8dÛ\82Ì\95`\89æ\82Ì\82Ý\82ð\8ds\82¤\81B\8cv\8eZ\82Ítick\82Å\8ds\82¤\81B
-               
+               //\83\86\81[\83U\81[\96¼\82ð\95\\8e¦
+               if(this.ownerUID != 0){
+                       this.ownerStage.mainContext.save();
+                       this.ownerStage.mainContext.fillStyle = "rgba(255,255,255,0.5)";
+                       this.ownerStage.mainContext.strokeStyle = "rgba(0, 0, 0, 0.5)";
+                       drawText(this.ownerStage.mainContext, this.ownerStage.manager.userManager.getUserNameByUID(this.ownerUID), x, y - 20);
+                       this.ownerStage.mainContext.restore();
+               }
                //\8fÕ\93Ë\83}\83b\83v\82É\95`\89æ
                if(this.ownerStage.className == "HorizonalScrollStageClass"){
                        strokeRect(this.ownerStage.collisionMapContext, x, y, this.size.x, this.size.y);
index 4078253..55e6286 100644 (file)
@@ -26,9 +26,9 @@ mainManager = new GameManager();
 //定数
 //
 
-var URL_PCD_Root = "http://localhost/pcd2013dev/www/";
+//var URL_PCD_Root = "http://localhost/pcd2013dev/www/";
 //var URL_PCD_Root = "http://192.168.6.242/pcd2013dev/www/";
-//var URL_PCD_Root = "http://192.168.0.3/PCD2013GSCL/www/";
+var URL_PCD_Root = "http://192.168.0.3/PCD2013GSCL/www/";
 //var URL_PCD_Root = "http://192.168.6.242/pcd2013hikarupsp/pcd2013dev/www/";
 var URL_PCD_Auth = URL_PCD_Root + "auth.php";
 var URL_PCD_Audio = URL_PCD_Root + "audio/";
@@ -39,11 +39,11 @@ var URL_PCD_Stage = URL_PCD_Root + "stage/";
 //
 
 function GameManager(){
-       //ユーザーID
        this.userID = 0;
        //サブマネージャーの設定
-       this.networkManager = new NetworkManager();
-       this.UIManager = new UIManager();
+       this.networkManager = new NetworkManager(this);
+       this.UIManager = new UIManager(this);
+       this.userManager = new UserManager(this);
        //必要最低限のCanvasとコンテキストの設定
        this.mainCanvas = createCanvas("MainCanvas", 640, 480, 0, 0, 1, "MainArea");
        this.mainCanvas.style.border = "solid 1px";
@@ -64,10 +64,8 @@ function GameManager(){
        this.runningWidghets = [];
        //タイマーカウントを初期化
        this.tickCount = 0;
-       this.timeStamp = 0;
        //タイマーカウントの秒あたりの回数を設定
        this.tickPerSecond = 60;
-       this.updateIntervalMs = 128;
        // pauseStage()が呼ばれたときにnullじゃなくなる
        this.stagePausedFunction = null;
        
@@ -78,8 +76,6 @@ function GameManager(){
        //timerTick
        timerTickEventListener.manager = this;
        window.setInterval(timerTickEventListener, 1000/this.tickPerSecond);
-       timeStampTimerTickEventListener.manager = this;
-       window.setInterval(timeStampTimerTickEventListener, this.updateIntervalMs);
 }
 GameManager.prototype = {
        timerTick: function(){
@@ -120,78 +116,6 @@ GameManager.prototype = {
                        w.draw();
                }
        },
-       timeStampTimerTick: function(){
-               //ネットワーク同期を司る
-               //サーバーとの同期カウンタ・タイマー
-               this.timeStamp += this.updateIntervalMs;
-               //サーバーに更新情報をアップロード
-               if(this.userID != 0){
-                       //ユーザーIDが設定されている=オンライン状態
-                       request = this.networkManager.CreateRequestObject();
-                       //同期モード
-                       request.open('POST', URL_PCD_Root + "update.php?uid=" + this.userID + "&action=refresh", false);
-                       request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
-                       //送信データを準備
-                       aData = new RequestData();
-                       for(i = 0; i < this.runningStage.globalStageObjectList.length; i++){
-                               anObj = this.runningStage.globalStageObjectList[i];
-                               if(anObj.ownerUID == this.userID){
-                                       aData.append(i, anObj.objectID + "|" + anObj.origin.x + "|" + anObj.origin.y + "|" + anObj.movingSpeed.x + "|" +  anObj.movingSpeed.y+ "|" + anObj.attribute);
-                               }
-                       }
-                       //送信
-                       this.networkManager.RequestObjectDisableCache(request);
-                       request.send(aData.data);
-                       //レスポンス確認
-                       if(request.status == 0){
-                               alert("ネットワークにアクセスできません。" + this.status + ":" + this.statusText);
-                       }else if((200 <= request.status && request.status < 300) || (request.status == 304)){
-                               var res = request.responseText;
-                               if(isValidResponseText(res)){
-                                       var retArray = eval(res);
-                                       this.timeStamp = retArray[0];
-                                       //削除処理
-                                       for(var i = 0; i < retArray[3].length; i++){
-                                               this.debugOut("Network:removeObject:ObjectID=" + retArray[3][i] + "\n");
-                                               var anObject = this.runningStage.getGlobalStageObject(retArray[3][i]);
-                                               if(anObject){
-                                                       this.runningStage.removeStageObject(anObject);
-                                               }
-                                       }
-                                       //更新処理
-                                       for(var i = 0; i < retArray[1].length; i++){
-                                               //this.debugOut("Network:refreshObject:ObjectID=" + retArray[1][i] + "\n");
-                                               anArray = retArray[1][i];
-                                               var anObject = this.runningStage.getGlobalStageObject(anArray[0]);
-                                               if(anObject){
-                                                       anObject.origin.x = anArray[1];
-                                                       anObject.origin.y = anArray[2];
-                                                       anObject.movingSpeed.x = anArray[3];
-                                                       anObject.movingSpeed.y = anArray[4];
-                                               }
-                                       }
-                                       //追加処理
-                                       for(var i = 0; i < retArray[2].length; i++){
-                                               anArray = retArray[2][i];
-                                               var args = eval(anArray[7]);
-                                               var anObject = eval("new " + anArray[5] + "(this.runningStage, args);");
-                                               if(anObject){
-                                                       this.debugOut("Network:addObject:ObjectID=" + anArray[0] + "\n");
-                                                       anObject.objectID = anArray[0];
-                                                       anObject.origin.x = anArray[1];
-                                                       anObject.origin.y = anArray[2];
-                                                       anObject.movingSpeed.x = anArray[3];
-                                                       anObject.movingSpeed.y = anArray[4];
-                                                       this.runningStage.addStageObject(anObject, true);
-                                               }
-                                       }
-                               }
-                       }else{
-                               alert("サーバーがエラーを返しました。" + this.status + ":" + this.statusText);
-                       }
-                       
-               }
-       },
        addWidghet: function(w){
                this.runningWidghets.push(w);
        },
@@ -210,57 +134,10 @@ GameManager.prototype = {
                stage.debugContext = this.debugContext
                //GameStage側の初期化処理を行わせる。
                stage.runStage();
-               //サーバーに追加オブジェクトの情報をアップロード
-               if(this.userID != 0){
-                       request = this.networkManager.CreateRequestObject();
-                       //同期モード
-                       request.open('POST', URL_PCD_Root + "update.php?uid=" + this.userID + "&action=add", false);
-                       request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
-                       //送信データを準備
-                       aData = new RequestData();
-                       for(i = 0; i < stage.globalStageObjectList.length; i++){
-                               anObj = stage.globalStageObjectList[i];
-                               aData.append(i, anObj.origin.x.toString() + "|" + anObj.origin.y.toString() + "|" + anObj.movingSpeed.x.toString() + "|" +  anObj.movingSpeed.y.toString() + "|" + anObj.className + "|" + parseArrayToStringSource(anObj.attribute) + "|" + parseArrayToStringSource(anObj.constructorArgs));
-                       }
-                       //送信
-                       this.networkManager.RequestObjectDisableCache(request);
-                       request.send(aData.data);
-                       //レスポンス確認
-                       if(request.status == 0){
-                               alert("ネットワークにアクセスできません。" + this.status + ":" + this.statusText);
-                       }else if((200 <= request.status && request.status < 300) || (request.status == 304)){
-                               var res = request.responseText;
-                               if(isValidResponseText(res)){
-                                       var retArray = eval(res);
-                                       this.timeStamp = retArray[0];
-                                       //割り当てられたobjectIDを設定する
-                                       for(var i = 0; i < stage.globalStageObjectList.length; i++){
-                                               stage.globalStageObjectList[i].objectID = retArray[1][i];
-                                       }
-                                       //すでにステージ上にある他のユーザーのオブジェクトを追加する
-                                       for(var i = 0; i < retArray[2].length; i++){
-                                               var anArray = retArray[2][i];
-                                               var args = eval(anArray[7]);
-                                               var anObject = eval("new " + anArray[5] + "(stage, args);");
-                                               if(anObject){
-                                                       this.debugOut("Network:addObject:ObjectID=" + anArray[0] + "\n");
-                                                       anObject.objectID = anArray[0];
-                                                       anObject.origin.x = anArray[1];
-                                                       anObject.origin.y = anArray[2];
-                                                       anObject.movingSpeed.x = anArray[3];
-                                                       anObject.movingSpeed.y = anArray[4];
-                                                       anObject.attribute = eval(anArray[6]);
-                                                       stage.addStageObject(anObject, true);
-                                               }
-                                       }
-                               }
-                       }else{
-                               alert("サーバーがエラーを返しました。" + this.status + ":" + this.statusText);
-                       }
-                       
-               }
+               //ネットワーク同期初期化
+               this.networkManager.joinStage(stage);
                //runningStageに登録することで、イベントの通知が開始され、GameStageは実行状態に入る。
-               mainManager.runningStage = stage;
+               this.runningStage = stage;
        },
        pauseStage: function(func){
                //ステージの実行を一時停止する。一時停止中、funcに指定された関数が毎tick毎に呼ばれる
@@ -299,10 +176,12 @@ GameManager.prototype = {
                }
        },
        loadStageFromLocal: function(code){
+               //各種パスをローカル用に変更
                URL_PCD_Root = "./";
                URL_PCD_Auth = URL_PCD_Root + "auth.php";
                URL_PCD_Audio = URL_PCD_Root + "audio/";
                URL_PCD_Stage = URL_PCD_Root + "stage/";
+               
                var stage = eval(code);
                mainManager.runStage(stage);
        },
@@ -372,7 +251,6 @@ GameManager.prototype = {
                        //unknown
                        this.debugOut("Browser:Unknown\n");
                }
-               //this.debugOut(userAgent + "::" + appVersion + "\n");
                //描画コンテキストからHTML5対応チェック
                        if(!this.mainCanvas || !this.mainCanvas.getContext){
                                //HTML5未対応の場合
@@ -382,7 +260,6 @@ GameManager.prototype = {
                return true;
        },
        setBackgroundMusic: function(name){
-               //nameは拡張子を含まない
                if(this.backgroundMusic){
                        //再生していたら止める
                        this.backgroundMusic.pause();
@@ -409,8 +286,3 @@ function timerTickEventListener(event)
 {
        timerTickEventListener.manager.timerTick(event);
 }
-
-function timeStampTimerTickEventListener(event)
-{
-       timerTickEventListener.manager.timeStampTimerTick(event);
-}
index 703ef9a..f106b2a 100644 (file)
@@ -14,11 +14,12 @@ function drawText(gcontext, text, x, y)
        //背景をfillStyle
        //前景をstrokeStyleで塗りつぶした文字列を描画する
        //塗りつぶし高さは20px固定
-       //fillTextの座標は文字列の左下!
+       //座標は文字列の左上の座標となる
        textsize = gcontext.measureText(text);
        gcontext.fillRect(x, y, textsize.width, 20);
        gcontext.save();
        gcontext.fillStyle = gcontext.strokeStyle;
+       //fillTextの座標は文字列の左下!
        gcontext.fillText(text, x, y + 20 - 1);
        gcontext.restore();
 }
index 9e0e89e..a6c751a 100644 (file)
@@ -4,8 +4,11 @@
 //
 //これらのクラスとメインマネージャーは直接プロパティを参照し合うので注意
 
-function NetworkManager(){
-
+function NetworkManager(mManager){
+       this.timeStamp = 0;
+       this.syncIntervalMs = 128;
+       
+       window.setInterval(this.syncTimerTickEventListener, this.syncIntervalMs);
 }
 NetworkManager.prototype = {
        //from http://hakuhin.jp/js/xmlhttprequest.html
@@ -40,9 +43,131 @@ NetworkManager.prototype = {
                rq.setRequestHeader('If-Modified-Since', 'Thu, 01 Jun 1970 00:00:00 GMT');
                
        },
+       sync: function(){
+               //ネットワーク同期
+               //サーバーに更新情報をアップロード
+               if(mainManager.userID != 0){
+                       //ユーザーIDが設定されている=オンライン状態
+                       request = this.CreateRequestObject();
+                       //同期モード
+                       request.open('POST', URL_PCD_Root + "update.php?uid=" + mainManager.userID + "&action=refresh", false);
+                       request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
+                       //送信データを準備
+                       aData = new RequestData();
+                       if(mainManager.runningStage){
+                               mainManager.runningStage.appendSyncDataTo(aData);
+                       }
+                       //送信
+                       this.RequestObjectDisableCache(request);
+                       request.send(aData.data);
+                       //レスポンス確認
+                       if(request.status == 0){
+                               alert("ネットワークにアクセスできません。" + this.status + ":" + this.statusText);
+                       } else if((200 <= request.status && request.status < 300) || (request.status == 304)){
+                               var res = request.responseText;
+                               if(isValidResponseText(res)){
+                                       var retArray = eval(res);
+                                       this.timeStamp = retArray[0];
+                                       //削除処理
+                                       for(var i = 0; i < retArray[3].length; i++){
+                                               mainManager.debugOut("Network:removeObject:ObjectID=" + retArray[3][i] + "\n");
+                                               var anObject = mainManager.runningStage.getGlobalStageObject(retArray[3][i]);
+                                               if(anObject){
+                                                       mainManager.runningStage.removeStageObject(anObject);
+                                               }
+                                       }
+                                       //更新処理
+                                       for(var i = 0; i < retArray[1].length; i++){
+                                               //mainManager.debugOut("Network:refreshObject:ObjectID=" + retArray[1][i] + "\n");
+                                               var anArray = retArray[1][i];
+                                               var anObject = mainManager.runningStage.getGlobalStageObject(anArray[0]);
+                                               if(anObject){
+                                                       anObject.origin.x = anArray[1];
+                                                       anObject.origin.y = anArray[2];
+                                                       anObject.movingSpeed.x = anArray[3];
+                                                       anObject.movingSpeed.y = anArray[4];
+                                               }
+                                       }
+                                       //追加処理
+                                       for(var i = 0; i < retArray[2].length; i++){
+                                               var anArray = retArray[2][i];
+                                               var args = eval(anArray[7]);
+                                               var anObject = eval("new " + anArray[5] + "(mainManager.runningStage, args);");
+                                               if(anObject){
+                                                       mainManager.debugOut("Network:addObject:ObjectID=" + anArray[0] + "\n");
+                                                       anObject.objectID = anArray[0];
+                                                       anObject.ownerUID = anArray[8];
+                                                       anObject.origin.x = anArray[1];
+                                                       anObject.origin.y = anArray[2];
+                                                       anObject.movingSpeed.x = anArray[3];
+                                                       anObject.movingSpeed.y = anArray[4];
+                                                       mainManager.runningStage.addStageObject(anObject, true);
+                                               }
+                                       }
+                                       //ユーザーリスト
+                                       mainManager.userManager.userList = retArray[4];
+                                       return;
+                               }
+                       } else{
+                               alert("サーバーがエラーを返しました。" + request.status + ":" + request.statusText);
+                       }
+               }
+       },
+       joinStage: function(stage){
+                       //サーバーに追加オブジェクトの情報をアップロード
+               if(mainManager.userID != 0){
+                       request = this.CreateRequestObject();
+                       //同期モード
+                       request.open('POST', URL_PCD_Root + "update.php?uid=" + mainManager.userID + "&action=add", false);
+                       request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
+                       //送信データを準備
+                       aData = new RequestData();
+                       stage.appendInitialSyncDataTo(aData);
+                       //送信
+                       this.RequestObjectDisableCache(request);
+                       request.send(aData.data);
+                       //レスポンス確認
+                       if(request.status == 0){
+                               alert("ネットワークにアクセスできません。" + this.status + ":" + this.statusText);
+                       }else if((200 <= request.status && request.status < 300) || (request.status == 304)){
+                               var res = request.responseText;
+                               if(isValidResponseText(res)){
+                                       var retArray = eval(res);
+                                       this.timeStamp = retArray[0];
+                                       //割り当てられたobjectIDを設定する
+                                       for(var i = 0; i < stage.globalStageObjectList.length; i++){
+                                               stage.globalStageObjectList[i].objectID = retArray[1][i];
+                                       }
+                                       //すでにステージ上にある他のユーザーのオブジェクトを追加する
+                                       for(var i = 0; i < retArray[2].length; i++){
+                                               var anArray = retArray[2][i];
+                                               var args = eval(anArray[7]);
+                                               var anObject = eval("new " + anArray[5] + "(stage, args);");
+                                               if(anObject){
+                                                       mainManager.debugOut("Network:addObject:ObjectID=" + anArray[0] + "\n");
+                                                       anObject.objectID = anArray[0];
+                                                       anObject.ownerUID = anArray[8];
+                                                       anObject.origin.x = anArray[1];
+                                                       anObject.origin.y = anArray[2];
+                                                       anObject.movingSpeed.x = anArray[3];
+                                                       anObject.movingSpeed.y = anArray[4];
+                                                       anObject.attribute = eval(anArray[6]);
+                                                       stage.addStageObject(anObject, true);
+                                               }
+                                       }
+                               }
+                       }else{
+                               alert("サーバーがエラーを返しました。" + this.status + ":" + this.statusText);
+                       }
+                       
+               }
+       },
+       syncTimerTickEventListener: function(event){
+               mainManager.networkManager.sync();
+       },
 }
 
-function UIManager(){
+function UIManager(mManager){
        //ユーザー入出力関連
        //キーボード状態を格納するプロパティの設定
        this.keyState = new Object();
@@ -120,15 +245,55 @@ UIManager.prototype = {
        
 }
 
-function UserDataManager(){
-       //Not implemented.
-       //ユーザーID
-       this.userID = 0;
-       
+function UserManager(mManager){
+       this.userList = {};
 }
-
-UserDataManager.prototype = {
-
+UserManager.prototype = {
+       loginAs: function(userNameStr){
+               request = mainManager.networkManager.CreateRequestObject();
+               
+               var i = userNameStr.indexOf("@");
+               if(i != -1){
+                       //任意ステージの実行
+                       var userName = userNameStr.substring(0, i);
+                       var stageName = userNameStr.substring(i + 1);
+                       request.open('GET', URL_PCD_Auth + "?action=devjoin&name=" + encodeURIComponent(userName) + "&stage=" + encodeURIComponent(stageName), false);
+               } else{
+                       //通常モード
+                       request.open('GET', URL_PCD_Auth + "?action=join&name=" + encodeURIComponent(mainManager.runningStage.authform.userName.value), false);
+               }
+               mainManager.networkManager.RequestObjectDisableCache(request);
+                       request.send(null);
+               
+               if(request.status == 0){
+                       alert("ネットワークへのアクセスに失敗しました。");
+               }else if((200 <= request.status && request.status < 300) || (request.status == 304)){
+                       if(isValidResponseText(request.responseText)){
+                               result = eval(request.responseText);
+                               if(result[3] == 0){
+                                       alert("ログインできません。データベース通信エラーです。");
+                                       return;
+                               } else if(result[3] == 11){
+                                       alert("すでにその名前は使われています。他の名前を試してください。");
+                                       return;
+                               } else if(result[3] == 10){
+                                       alert("ID:" + result[0] + " でログインしました。");
+                                       mainManager.userID = result[0];
+                                       mainManager.timeStamp = result[1];
+                                       mainManager.loadStageFromNetwork(result[2]);
+                                       return;
+                               }
+                       }
+               } else{
+                       alert("サーバーがエラーを返しました。" + request.status + ":" + request.statusText);
+               }
+       },
+       getUserNameByUID: function(uid){
+               if(uid in this.userList){
+                       return this.userList[uid];
+               }
+               return "";
+       },
 }
 
 //
@@ -151,10 +316,6 @@ Rectangle.prototype = {
        
 }
 
-function NetworkManager(){
-
-}
-
 function RequestData(){
        //FormDataがIEで動かないので代替
        this.data = "";
index a89deb4..79bf731 100644 (file)
@@ -30,7 +30,7 @@ define("QUERY_ADD_OBJECT", "insert into stageObjectTable (locationX, locationY,
 define("QUERY_ADD_OBJECT_TYPES", "ddddssssiii");
 define("QUERY_DELETE_USER_OBJECT_ALL", "delete from stageObjectTable where ownerUserID=?");
 define("QUERY_DELETE_USER_OBJECT_ALL_TYPES", "i");
-define("QUERY_SELECT_ADDED_OBJECT", "SELECT id, locationX, locationY, velocityX, velocityY, className, objectAttribute, constructorArgs FROM stageObjectTable WHERE stageName=? AND ownerUserID<>? AND addedTimestamp>? AND objectAttribute<>'Deleted'");
+define("QUERY_SELECT_ADDED_OBJECT", "SELECT id, locationX, locationY, velocityX, velocityY, className, objectAttribute, constructorArgs, ownerUserID FROM stageObjectTable WHERE stageName=? AND ownerUserID<>? AND addedTimestamp>? AND objectAttribute<>'Deleted'");
 define("QUERY_SELECT_ADDED_OBJECT_TYPES", "sii");
 define("QUERY_SELECT_UPDATED_OBJECT", "SELECT id, locationX, locationY, velocityX, velocityY, className, objectAttribute FROM stageObjectTable WHERE stageName=? AND ownerUserID<>? AND modifiedTimestamp>=? AND addedTimestamp<? AND objectAttribute<>'Deleted'");
 define("QUERY_SELECT_UPDATED_OBJECT_TYPES", "siii");
@@ -38,7 +38,7 @@ define("QUERY_SELECT_DELETED_OBJECT", "SELECT id, locationX, locationY, velocity
 define("QUERY_SELECT_DELETED_OBJECT_TYPES", "sii");
 define("QUERY_UPDATE_STAGE_OBJECT", "UPDATE stageObjectTable SET locationX=?, locationY=?, velocityX=?, velocityY=?, objectAttribute=?, modifiedTimestamp=? WHERE stageName=? AND id=? AND objectAttribute<>'Deleted'");
 define("QUERY_UPDATE_STAGE_OBJECT_TYPES", "ddddsisi");
-define("QUERY_SELECT_ALL_OTHER_USER_OBJECT", "SELECT id, locationX, locationY, velocityX, velocityY, className, objectAttribute, constructorArgs FROM stageObjectTable WHERE stageName=? AND ownerUserID<>? AND modifiedTimestamp>? AND objectAttribute<>'Deleted'");
+define("QUERY_SELECT_ALL_OTHER_USER_OBJECT", "SELECT id, locationX, locationY, velocityX, velocityY, className, objectAttribute, constructorArgs, ownerUserID FROM stageObjectTable WHERE stageName=? AND ownerUserID<>? AND modifiedTimestamp>? AND objectAttribute<>'Deleted'");
 define("QUERY_SELECT_ALL_OTHER_USER_OBJECT_TYPES", "sii");
 define("QUERY_CHECK_AND_SET_DELETED_OBJECT", "UPDATE stageObjectTable SET objectAttribute='Deleted', modifiedTimestamp=? WHERE modifiedTimestamp<=? AND objectAttribute<>'Deleted'");
 define("QUERY_CHECK_AND_SET_DELETED_OBJECT_TYPES", "ii");
index 177df86..4af566d 100644 (file)
@@ -20,47 +20,7 @@ stage.runStage = function(){
        this.authSubmitButton.onclick = this.submitAuth;
 };
 stage.submitAuth = function(){
-       request = mainManager.networkManager.CreateRequestObject();
-       
-       var i = mainManager.runningStage.authform.userName.value.indexOf("@");
-       if(i != -1){
-               //任意ステージの実行
-               var userName = mainManager.runningStage.authform.userName.value.substring(0, i);
-               var stageName = mainManager.runningStage.authform.userName.value.substring(i + 1);
-               request.open('GET', URL_PCD_Auth + "?action=devjoin&name=" + encodeURIComponent(userName) + "&stage=" + encodeURIComponent(stageName), false);
-       } else{
-               //通常モード
-               request.open('GET', URL_PCD_Auth + "?action=join&name=" + encodeURIComponent(mainManager.runningStage.authform.userName.value), false);
-       }
-       mainManager.networkManager.RequestObjectDisableCache(request);
-               request.send(null);
-               console.log("submit");
-       
-       if(request.status == 0){
-               alert("ネットワークへのアクセスに失敗しました。");
-       }else if((200 <= request.status && request.status < 300) || (request.status == 304)){
-               //alert(this.responseText);
-               if(request.responseText.charAt(0) != "["){
-                       alert(request.responseText);
-               } else{
-                       result = eval(request.responseText);
-                       if(result[3] == 0){
-                               alert("ログインできません。データベース通信エラーです。");
-                       } else if(result[3] == 11){
-                               alert("すでにその名前は使われています。他の名前を試してください。");
-                       } else if(result[3] == 10){
-                               alert("ID:" + result[0] + " でログインしました。");
-                               mainManager.userID = result[0];
-                               mainManager.timeStamp = result[1];
-                               mainManager.loadStageFromNetwork(result[2]);
-                       } else{
-                               alert("不明なエラーです。");
-                       }
-               }
-       }else{
-               alert("サーバーがエラーを返しました。");
-               //console.log("NAK");
-       }
+       mainManager.userManager.loginAs(mainManager.runningStage.authform.userName.value);
        return false; //常に送信しない。
 };
 
@@ -69,8 +29,5 @@ stage.stopStage = function(){
        //元々定義されていた、疑似スーパークラス(prototype)の関数を呼び出す。
        GameStage.prototype.stopStage.apply();
 };
-stage.timerTick = function(){
-
-};
 
 stage;
index 49626be..8a03b1b 100644 (file)
@@ -43,8 +43,6 @@ var stage = new PCDSLStageClass(stgInfo, tbl);
 stage.runStage = function(){
        PCDSLStageClass.prototype.runStage.apply(this, []);
        var main = new MainCharacterClass(stage, [["kuma1.png","kuma2.png","kuma3.png", "kuma4.png", "kuma3.png", "kuma2.png"], ["kumaready.png"]]);
-       main.size.x = 64;
-       main.size.y=64;
        main.origin.x = 50;
        main.origin.y =0;
        main.ownerUID = stage.manager.userID;
index 73e7953..0915ae4 100644 (file)
@@ -95,7 +95,7 @@ if(isset($_GET['uid']) && isset($_GET['action'])){
                $result = $stmt->get_result();
                for($i = 0; $i < $result->num_rows; $i++){
                        $tmpAry = $result->fetch_array(MYSQLI_NUM);
-                       array_push($retv2, "[" . $tmpAry[0] . "," . $tmpAry[1] . "," . $tmpAry[2] . "," . $tmpAry[3] . "," . $tmpAry[4] . ",\"" . $tmpAry[5] . "\",\"" . $tmpAry[6] . "\",\"" . $tmpAry[7] . "\"]");
+                       array_push($retv2, "[" . $tmpAry[0] . "," . $tmpAry[1] . "," . $tmpAry[2] . "," . $tmpAry[3] . "," . $tmpAry[4] . ",\"" . $tmpAry[5] . "\",\"" . $tmpAry[6] . "\",\"" . $tmpAry[7] . "\"," . $tmpAry[8] . "]");
                }
                $stmt->close();
                //retv[1]:更新リスト
@@ -132,6 +132,20 @@ if(isset($_GET['uid']) && isset($_GET['action'])){
                        array_push($retv3, $tmpAry[0]);
                }
                $stmt->close();
+               //retv[4]:ユーザーリスト
+               //userID, userName
+               $retv4 = array();
+               $stmt = $db->prepare("select id, name from authUserTable");
+               $stmt->execute();
+               if($stmt->errno != 0){
+                       exit("error5673");
+               }
+               $result = $stmt->get_result();
+               for($i = 0; $i < $result->num_rows; $i++){
+                       $tmpAry = $result->fetch_array(MYSQLI_NUM);
+                       array_push($retv4, $tmpAry[0] . ":\"" . $tmpAry[1] . "\"");
+               }
+               $stmt->close();
                //出力
                echo("[");
                echo(getTimeStampMs());
@@ -147,7 +161,11 @@ if(isset($_GET['uid']) && isset($_GET['action'])){
                foreach($retv3 as $v){
                        echo($v . ",");
                }
-               echo("]]");
+               echo("],{");
+               foreach($retv4 as $v){
+                       echo($v . ",");
+               }
+               echo("}]");
        }
        updateUserTimestamp($db, $uid);
        exit();
@@ -166,7 +184,7 @@ function getAllOtherUserObjectArrayString($db, $userID, $stageName)
        $result = $stmt->get_result();
        for($i = 0; $i < $result->num_rows; $i++){
                $tmpAry = $result->fetch_array(MYSQLI_NUM);
-               array_push($retary, "[" . $tmpAry[0] . "," . $tmpAry[1] . "," . $tmpAry[2] . "," . $tmpAry[3] . "," . $tmpAry[4] . ",\"" . $tmpAry[5] . "\",\"" . $tmpAry[6] . "\",\"" . $tmpAry[7] . "\"]");
+               array_push($retary, "[" . $tmpAry[0] . "," . $tmpAry[1] . "," . $tmpAry[2] . "," . $tmpAry[3] . "," . $tmpAry[4] . ",\"" . $tmpAry[5] . "\",\"" . $tmpAry[6] . "\",\"" . $tmpAry[7] . "\"," . $tmpAry[8] . "]");
        }
        $stmt->close();
        $retstr = "[";