/* ----------------------------------------------------------------------------- This source file is part of OpenSpace3D For the latest info, see http://www.openspace3d.com Copyright (c) 2012 I-maginer This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA, or go to http://www.gnu.org/copyleft/lesser.txt ----------------------------------------------------------------------------- */ fun deleteOb(inst, p)= let p -> [state trm] in if (trm == nil) then nil else _deltimer trm; 0;; fun cbTrmFirstUser(trm, u)= _deltimer trm; //todo set a room item to know if there is a current first user let u -> [inst netstr p] in let p -> [state _] in if (((netGetNbUsers netstr) > 1) || state) then ( mutate p <- [_ nil]; 0; ) else ( mutate p <- [1 nil]; SendPluginEvent inst "Become first" nil nil; 0; ); 0;; fun cbRoomChanged(inst, netstr, room, p)= let p -> [state trm] in if (trm != nil) then nil else mutate p <- [_ (_rfltimer _starttimer _channel 250 @cbTrmFirstUser [inst netstr p])]; 0;; fun cbNbUsers(inst, netstr, nb, p)= let p -> [state trm] in if (trm != nil) then nil else mutate p <- [_ (_rfltimer _starttimer _channel 250 @cbTrmFirstUser [inst netstr p])]; 0;; fun cbIsFirst(inst, from, action, param, rep, p)= let p -> [state _] in if state then SendPluginEvent inst "is first" nil nil else SendPluginEvent inst "is not first" nil nil; 0;; fun newOb(inst)= let [0 nil] -> p in ( setPluginInstanceCbNetNbUsers inst mkfun4 @cbNbUsers p; setPluginInstanceCbNetRoomChanged inst mkfun4 @cbRoomChanged p; PluginRegisterAction inst "Is first ?" mkfun6 @cbIsFirst p; setPluginInstanceCbDel inst mkfun2 @deleteOb p; ); 0;; fun IniPlug(file)= PlugRegister @newOb nil; setPluginEditor @dynamicedit; 0;;