OnlyAgentPrecedenceConstraint(const vd::DynamicsInit& mdl,
                                  const vd::InitEventList& evts)
        : vmd::Agent(mdl, evts), mStart(false)
    {
        vmd::Activity& a = addActivity("A", 0, devs::infinity);
        a.addOutputFunction(
            boost::bind(&OnlyAgentPrecedenceConstraint::aout, this, _1, _2,
                        _3));

        vmd::Activity& b = addActivity("B", devs::negativeInfinity,
                                       devs::infinity);
        b.addOutputFunction(
            boost::bind(&OnlyAgentPrecedenceConstraint::aout, this, _1, _2,
                        _3));

        vmd::Activity& c = addActivity("C", devs::negativeInfinity,
                                       devs::infinity);
        c.addOutputFunction(
            boost::bind(&OnlyAgentPrecedenceConstraint::aout, this, _1, _2,
                        _3));

        vmd::Activity& d = addActivity("D", devs::negativeInfinity,
                                       devs::infinity);
        d.addOutputFunction(
            boost::bind(&OnlyAgentPrecedenceConstraint::aout, this, _1, _2,
                        _3));

        addStartToStartConstraint("A", "B", 1.0, devs::infinity);
        addStartToStartConstraint("B", "C", 1.0, devs::infinity);
        addStartToStartConstraint("C", "D", 8.0, devs::infinity);
    }
예제 #2
0
        StartsFailed()
        {
            addActivity("A", 1.0, 2.0);
            addActivity("B");

            // A and B need to start at the same time.
            addStartToStartConstraint("A", "B", 0.0, 0.0);
        }
예제 #3
0
        Finishes()
        {
            addActivity("A");
            addActivity("B");

            // A and B need to finish at the same time.
            addFinishToFinishConstraint("A", "B", 0.0);
        }
예제 #4
0
        Before()
        {
            addActivity("A", 0.0, 2.0);
            addActivity("B", 3.0, 5.0);

            // B needs to start at time 3.0.
            addFinishToStartConstraint("A", "B", 0.0, 2.0);
        }
예제 #5
0
        Meets()
        {
            addActivity("A");
            addActivity("B");

            // B needs to start when A finishes.
            addFinishToStartConstraint("A", "B", 0.0, 0.0);
        }
예제 #6
0
        Overlaps()
        {
            addActivity("A");
            addActivity("B");

            // B needs to start at begin time of A + 1.0.
            addStartToStartConstraint("A", "B", 1.0, 2.0);
        }
예제 #7
0
        Equal()
        {
            addActivity("A");
            addActivity("B");

            // A and B need to start and finish a the same time.
            addStartToStartConstraint("A", "B", 0.0, 0.0);
            addFinishToFinishConstraint("A", "B", 0.0, 0.0);
        }
예제 #8
0
        During()
        {
            addActivity("A");
            addActivity("B");

            // B needs to start at begin time of A + 1.0.
            // A needs to finished at end time of B + 1.0.
            addStartToStartConstraint("A", "B", 1.0, 1.0);
            addFinishToFinishConstraint("B", "A", 1.0);
        }
예제 #9
0
파일: activity.cpp 프로젝트: GG31/packages
    KnowledgeBaseGraph()
    {
        addActivity("act1");
        addActivity("act2");
        addActivity("act3");
        addActivity("act4");
        addActivity("act5");

        addFinishToStartConstraint("act1", "act2", 0.0, 1.0);
        addFinishToStartConstraint("act2", "act3", 0.0, 1.0);
        addFinishToStartConstraint("act2", "act4", 0.0, 1.0);
    }
예제 #10
0
void StateWidget::slotMenuSelection(int sel) {
    bool done = false;
    bool ok = false;
    QString name = getName();

    switch( sel ) {
    case ListPopupMenu::mt_Rename:
        name = KInputDialog::getText( i18n("Enter State Name"), i18n("Enter the name of the new state:"), getName(), &ok );
        if( ok && name.length() > 0 )
            setName( name );
        done = true;
        break;

    case ListPopupMenu::mt_Properties:
        showProperties();
        done = true;
        break;
    case ListPopupMenu::mt_New_Activity:
        name = KInputDialog::getText( i18n("Enter Activity"), i18n("Enter the name of the new activity:"), i18n("new activity"), &ok );
        if( ok && name.length() > 0 )
            addActivity( name );
        done = true;
        break;
    }

    if( !done )
        UMLWidget::slotMenuSelection( sel );
}
예제 #11
0
파일: kb.cpp 프로젝트: GG31/packages
        KnowledgeBase()
            : vmd::KnowledgeBase(), today(0), yesterday(0)
        {
            addFact("today", boost::bind(&vmd::ex::KnowledgeBase::date, this, _1));

            vmd::Rule& r1 = addRule("Rule 1");
            r1.add(boost::bind(&vmd::ex::KnowledgeBase::haveGoodTemp, this));
            r1.add(boost::bind(&vmd::ex::KnowledgeBase::isAlwaysTrue, this));

            vmd::Rule& r2 = addRule("Rule 2");
            r2.add(boost::bind(&vmd::ex::KnowledgeBase::haveGoodTemp, this));

            vmd::Activity& act1 = addActivity("act1");
            act1.addRule("Rule 1", r1);

            vmd::Activity& act2 = addActivity("act2");
            act2.addRule("Rule 2", r2);
        }
예제 #12
0
파일: activity.cpp 프로젝트: GG31/packages
    KB5() :
        vmd::KnowledgeBase(), mNbUpdate(0), mNbAck(0), mNbOut(0)
    {
        std::cout << fmt("KB5 start\n");
        vmd::Activity& a = addActivity("A", 0.0, vd::infinity);
        vmd::Activity& b = addActivity("B", 1.0, vd::infinity);
        vmd::Activity& c = addActivity("C", 1.0, vd::infinity);
        vmd::Activity& d = addActivity("D", 2.0, vd::infinity);
        vmd::Activity& e = addActivity("E", 3.0, vd::infinity);
        vmd::Activity& f = addActivity("F", 4.0, vd::infinity);

        addOutputFunctions(this) += O("out", &KB5::out);
        addUpdateFunctions(this) += U("update", &KB5::update);

        a.addOutputFunction(outputFunctions()["out"]);
        b.addOutputFunction(outputFunctions()["out"]);
        c.addOutputFunction(outputFunctions()["out"]);
        d.addOutputFunction(outputFunctions()["out"]);
        e.addOutputFunction(outputFunctions()["out"]);
        f.addOutputFunction(outputFunctions()["out"]);

        a.addUpdateFunction(updateFunctions()["update"]);
        b.addUpdateFunction(updateFunctions()["update"]);
        c.addUpdateFunction(updateFunctions()["update"]);
        d.addUpdateFunction(updateFunctions()["update"]);
        e.addUpdateFunction(updateFunctions()["update"]);
        f.addUpdateFunction(updateFunctions()["update"]);
    }
예제 #13
0
파일: activity.cpp 프로젝트: GG31/packages
 KB4()
 {
     addActivity("A", 0.0, vd::infinity);
     addActivity("B", 1.0, vd::infinity);
     addActivity("C", 1.0, vd::infinity);
     addActivity("D", 2.0, vd::infinity);
     addActivity("E", 3.0, vd::infinity);
     addActivity("F", 4.0, vd::infinity);
 }
예제 #14
0
    SimpleAgent(const vle::devs::DynamicsInit& mdl,
                const vle::devs::InitEventList& evts)
        : vmd::Agent(mdl, evts), today(0), yesterday(0)
    {
        addFact("today", boost::bind(&SimpleAgent::date, this, _1));

        vmd::Rule& r1 = addRule("Rule 1");
        r1.add(boost::bind(&vmd::ex::SimpleAgent::haveGoodTemp, this));
        r1.add(boost::bind(&vmd::ex::SimpleAgent::isAlwaysTrue, this));

        vmd::Rule& r2 = addRule("Rule 2");
        r2.add(boost::bind(&vmd::ex::SimpleAgent::haveGoodTemp, this));

        vmd::Activity& act1 = addActivity("act1");
        act1.addRule("Rule 1", r1);

        vmd::Activity& act2 = addActivity("act2");
        act2.addRule("Rule 2", r2);
        act2.initStartTimeFinishTime(1.5, 2.5);

        vmd::Activity& act3 = addActivity("act3");
        act3.addRule("Rule 2", r2);
        act3.initStartTimeFinishTime(3.5, 4.5);
    }
예제 #15
0
    KnowledgeBase()
        : vmd::KnowledgeBase(), today(0), yesterday(0)
    {
        addFact("today", std::bind(&vmd::ex::KnowledgeBase::date,
                                     this, std::placeholders::_1));

        vmd::Rule& r1 = addRule("Rule 1");
        r1.add(std::bind(&vmd::ex::KnowledgeBase::haveGoodTemp, this));
        r1.add(std::bind(&vmd::ex::KnowledgeBase::isAlwaysTrue, this));

        vmd::Rule& r2 = addRule("Rule 2");
        r2.add(std::bind(&vmd::ex::KnowledgeBase::haveGoodTemp, this));

        vmd::Activity& act1 = addActivity("act1");
        act1.addRule("Rule 1", r1);

        vmd::Activity& act2 = addActivity("act2");
        act2.addRule("Rule 2", r2);
        act2.initStartTimeFinishTime(1.5, 2.5);

        vmd::Activity& act3 = addActivity("act3");
        act3.addRule("Rule 2", r2);
        act3.initStartTimeFinishTime(3.5, 4.5);
    }
예제 #16
0
파일: gui.cpp 프로젝트: biwin/ktorrent
    GUI::GUI() : core(0), pref_dlg(0)
    {
        //Marker markk("GUI::GUI()");
        part_manager = new KParts::PartManager(this);
        connect(part_manager, &KParts::PartManager::activePartChanged, this, &GUI::activePartChanged);
        core = new Core(this);
        core->loadTorrents();

        tray_icon = new TrayIcon(core, this);

        central = new CentralWidget(this);
        setCentralWidget(central);
        connect(central, &CentralWidget::changeActivity, this, &GUI::setCurrentActivity);
        torrent_activity = new TorrentActivity(core, this, 0);

        status_bar = new kt::StatusBar(this);
        setStatusBar(status_bar);

        setupActions();
        setupGUI(Default, QStringLiteral("ktorrentui.rc"));

        addActivity(torrent_activity);

        //mark.update();
        connect(&timer, &QTimer::timeout, this, &GUI::update);
        timer.start(Settings::guiUpdateInterval());

        applySettings();
        connect(core, &Core::settingsChanged, this, &GUI::applySettings);

        if (Settings::showSystemTrayIcon())
        {
            tray_icon->updateMaxRateMenus();
            tray_icon->show();
        }
        else
            tray_icon->hide();

        dbus_iface = new DBus(this, core, this);
        core->loadPlugins();
        loadState(KSharedConfig::openConfig());

        IPFilterWidget::registerFilterList();

        //markk.update();
        updateActions();
        core->startUpdateTimer();
    }
예제 #17
0
파일: gui.cpp 프로젝트: dreamsxin/ktorrent
    GUI::GUI() : core(0), pref_dlg(0)
    {
        //Marker markk("GUI::GUI()");
        part_manager = new KParts::PartManager(this);
        connect(part_manager, SIGNAL(activePartChanged(KParts::Part*)), this, SLOT(activePartChanged(KParts::Part*)));
        core = new Core(this);
        core->loadTorrents();

        tray_icon = new TrayIcon(core, this);

        central = new CentralWidget(this);
        setCentralWidget(central);
        connect(central, SIGNAL(changeActivity(Activity*)), this, SLOT(setCurrentActivity(Activity*)));
        torrent_activity = new TorrentActivity(core, this, 0);

        status_bar = new kt::StatusBar(this);
        setStatusBar(status_bar);

        setupActions();
        setupGUI(Default, "ktorrentui.rc");

        addActivity(torrent_activity);

        //mark.update();
        connect(&timer, SIGNAL(timeout()), this, SLOT(update()));
        timer.start(Settings::guiUpdateInterval());

        applySettings();
        connect(core, SIGNAL(settingsChanged()), this, SLOT(applySettings()));

        if (Settings::showSystemTrayIcon())
        {
            tray_icon->updateMaxRateMenus();
            tray_icon->show();
        }
        else
            tray_icon->hide();

        dbus_iface = new DBus(this, core, this);
        core->loadPlugins();
        loadState(KGlobal::config());

        IPFilterWidget::registerFilterList();

        //markk.update();
        updateActions();
        core->startUpdateTimer();
    }
예제 #18
0
void ActivityManager::activityAdded(QString id) {
  // skip the Status source
  if (id == "Status")
    return;
  // create a new activity object
  ActivityWidget *activity = new ActivityWidget(extender()->item("Activities"), id);
  // add activity to the list
  m_activities.insert(id, activity);
  // connect activity update signal
  dataEngine("org.kde.activities")->connectSource(id, this);
  // connect activity start/stop signals
  connect(activity, SIGNAL(setCurrent(QString)), this, SLOT(setCurrent(QString)));
  connect(activity, SIGNAL(startActivity(QString)), this, SLOT(start(QString)));
  connect(activity, SIGNAL(stopActivity(QString)), this, SLOT(stop(QString)));
  connect(activity, SIGNAL(addActivity(QString)), this, SLOT(add(QString)));
  connect(activity, SIGNAL(removeActivity(QString)), this, SLOT(remove(QString)));
  connect(activity, SIGNAL(renameActivity(QString,QString)), this, SLOT(setName(QString,QString)));
}
예제 #19
0
/**
 * Captures any popup menu signals for menus it created.
 */
void StateWidget::slotMenuSelection(QAction* action)
{
    bool ok = false;
    QString nameNew = name();

    ListPopupMenu::MenuType sel = ListPopupMenu::typeFromAction(action);
    switch(sel) {
    case ListPopupMenu::mt_Rename:
        nameNew = name();
        ok = Dialog_Utils::askName(i18n("Enter State Name"),
                                   i18n("Enter the name of the new state:"),
                                   nameNew);
        if (ok && nameNew.length() > 0) {
            setName(nameNew);
        }
        break;

    case ListPopupMenu::mt_Properties:
        showPropertiesDialog();
        break;

    case ListPopupMenu::mt_New_Activity:
        nameNew = i18n("new activity");
        ok = Dialog_Utils::askName(i18n("Enter Activity"),
                                   i18n("Enter the name of the new activity:"),
                                   nameNew);
        if (ok && nameNew.length() > 0) {
            addActivity(nameNew);
        }
        break;

    case ListPopupMenu::mt_Flip:
        setDrawVertical(!m_drawVertical);
        break;

    default:
        UMLWidget::slotMenuSelection(action);
        break;
    }
}
예제 #20
0
파일: activity.cpp 프로젝트: GG31/packages
    KnowledgeBaseGraph3()
    {
        addActivity("A");
        addActivity("B");
        addActivity("C");
        addActivity("D");
        addActivity("E");
        addActivity("F");

        addFinishToStartConstraint("A", "B", 0.0, 1.0);
        addFinishToStartConstraint("A", "C", 0.0, 1.0);
        addFinishToStartConstraint("A", "D", 0.0, 1.0);
        addFinishToStartConstraint("B", "F", 0.0, 1.0);
        addFinishToStartConstraint("C", "E", 0.0, 1.0);
        addFinishToStartConstraint("D", "E", 0.0, 1.0);
        addFinishToStartConstraint("E", "F", 0.0, 1.0);
    }
예제 #21
0
AddActivityForm::AddActivityForm(QWidget* parent, const QString& teacherName, const QString& studentsSetName, const QString& subjectName, const QString& activityTagName): QDialog(parent)
{
	setupUi(this);
	
	allTeachersListWidget->setSelectionMode(QAbstractItemView::SingleSelection);
	selectedTeachersListWidget->setSelectionMode(QAbstractItemView::SingleSelection);
	allStudentsListWidget->setSelectionMode(QAbstractItemView::SingleSelection);
	selectedStudentsListWidget->setSelectionMode(QAbstractItemView::SingleSelection);
	allActivityTagsListWidget->setSelectionMode(QAbstractItemView::SingleSelection);
	selectedActivityTagsListWidget->setSelectionMode(QAbstractItemView::SingleSelection);

	splitSpinBox->setMaximum(MAX_SPLIT_OF_AN_ACTIVITY);

	durList.clear();
	durList.append(duration1SpinBox);
	durList.append(duration2SpinBox);
	durList.append(duration3SpinBox);
	durList.append(duration4SpinBox);
	durList.append(duration5SpinBox);
	durList.append(duration6SpinBox);
	durList.append(duration7SpinBox);
	durList.append(duration8SpinBox);
	durList.append(duration9SpinBox);
	durList.append(duration10SpinBox);
	durList.append(duration11SpinBox);
	durList.append(duration12SpinBox);
	durList.append(duration13SpinBox);
	durList.append(duration14SpinBox);
	durList.append(duration15SpinBox);
	durList.append(duration16SpinBox);
	durList.append(duration17SpinBox);
	durList.append(duration18SpinBox);
	durList.append(duration19SpinBox);
	durList.append(duration20SpinBox);
	durList.append(duration21SpinBox);
	durList.append(duration22SpinBox);
	durList.append(duration23SpinBox);
	durList.append(duration24SpinBox);
	durList.append(duration25SpinBox);
	durList.append(duration26SpinBox);
	durList.append(duration27SpinBox);
	durList.append(duration28SpinBox);
	durList.append(duration29SpinBox);
	durList.append(duration30SpinBox);
	durList.append(duration31SpinBox);
	durList.append(duration32SpinBox);
	durList.append(duration33SpinBox);
	durList.append(duration34SpinBox);
	durList.append(duration35SpinBox);
	
	for(int i=0; i<MAX_SPLIT_OF_AN_ACTIVITY; i++)
		dur(i)->setMaximum(gt.rules.nHoursPerDay);

	activList.clear();
	activList.append(active1CheckBox);
	activList.append(active2CheckBox);
	activList.append(active3CheckBox);
	activList.append(active4CheckBox);
	activList.append(active5CheckBox);
	activList.append(active6CheckBox);
	activList.append(active7CheckBox);
	activList.append(active8CheckBox);
	activList.append(active9CheckBox);
	activList.append(active10CheckBox);
	activList.append(active11CheckBox);
	activList.append(active12CheckBox);
	activList.append(active13CheckBox);
	activList.append(active14CheckBox);
	activList.append(active15CheckBox);
	activList.append(active16CheckBox);
	activList.append(active17CheckBox);
	activList.append(active18CheckBox);
	activList.append(active19CheckBox);
	activList.append(active20CheckBox);
	activList.append(active21CheckBox);
	activList.append(active22CheckBox);
	activList.append(active23CheckBox);
	activList.append(active24CheckBox);
	activList.append(active25CheckBox);
	activList.append(active26CheckBox);
	activList.append(active27CheckBox);
	activList.append(active28CheckBox);
	activList.append(active29CheckBox);
	activList.append(active30CheckBox);
	activList.append(active31CheckBox);
	activList.append(active32CheckBox);
	activList.append(active33CheckBox);
	activList.append(active34CheckBox);
	activList.append(active35CheckBox);

	connect(subgroupsCheckBox, SIGNAL(toggled(bool)), this, SLOT(showSubgroupsChanged()));
	connect(groupsCheckBox, SIGNAL(toggled(bool)), this, SLOT(showGroupsChanged()));
	connect(yearsCheckBox, SIGNAL(toggled(bool)), this, SLOT(showYearsChanged()));

	connect(splitSpinBox, SIGNAL(valueChanged(int)), this, SLOT(splitChanged()));

	connect(closePushButton, SIGNAL(clicked()), this, SLOT(close()));
	connect(addActivityPushButton, SIGNAL(clicked()), this, SLOT(addActivity()));
	connect(helpPushButton, SIGNAL(clicked()), this, SLOT(help()));

	connect(allTeachersListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(addTeacher()));
	connect(selectedTeachersListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(removeTeacher()));
	connect(allStudentsListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(addStudents()));
	connect(selectedStudentsListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(removeStudents()));
	connect(allActivityTagsListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(addActivityTag()));
	connect(selectedActivityTagsListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(removeActivityTag()));

	connect(clearActivityTagPushButton, SIGNAL(clicked()), this, SLOT(clearActivityTags()));
	connect(clearStudentsPushButton, SIGNAL(clicked()), this, SLOT(clearStudents()));
	connect(clearTeacherPushButton, SIGNAL(clicked()), this, SLOT(clearTeachers()));

	connect(minDayDistanceSpinBox, SIGNAL(valueChanged(int)), this, SLOT(minDaysChanged()));

	centerWidgetOnScreen(this);
	restoreFETDialogGeometry(this);
	
	QSize tmp3=subjectsComboBox->minimumSizeHint();
	Q_UNUSED(tmp3);
	
	selectedStudentsListWidget->clear();
	updateStudentsListWidget();
	updateTeachersListWidget();
	updateSubjectsComboBox();
	updateActivityTagsListWidget();

	minDayDistanceSpinBox->setMaximum(gt.rules.nDaysPerWeek);
	minDayDistanceSpinBox->setMinimum(0);
	minDayDistanceSpinBox->setValue(1);
	
	int nSplit=splitSpinBox->value();
	for(int i=0; i<MAX_SPLIT_OF_AN_ACTIVITY; i++){
		if(i<nSplit)
			subactivitiesTabWidget->setTabEnabled(i, true);
		else
			subactivitiesTabWidget->setTabEnabled(i, false);
	}
	
	minDayDistanceTextLabel->setEnabled(nSplit>=2);
	minDayDistanceSpinBox->setEnabled(nSplit>=2);
	percentageTextLabel->setEnabled(nSplit>=2 && minDayDistanceSpinBox->value()>0);
	percentageLineEdit->setEnabled(nSplit>=2 && minDayDistanceSpinBox->value()>0);
	forceConsecutiveCheckBox->setEnabled(nSplit>=2 && minDayDistanceSpinBox->value()>0);
	
	subactivitiesTabWidget->setCurrentIndex(0);
	
	nStudentsSpinBox->setMinimum(-1);
	nStudentsSpinBox->setMaximum(MAX_ROOM_CAPACITY);
	nStudentsSpinBox->setValue(-1);

	addActivityPushButton->setDefault(true);
	addActivityPushButton->setFocus();
	
	if(teacherName!="")
		selectedTeachersListWidget->addItem(teacherName);
	if(studentsSetName!="")
		selectedStudentsListWidget->addItem(studentsSetName);
	if(subjectName!=""){
		int pos=-1;
		for(int i=0; i<subjectsComboBox->count(); i++){
			if(subjectsComboBox->itemText(i)==subjectName){
				pos=i;
				break;
			}
		}
		assert(pos>=0);
		subjectsComboBox->setCurrentIndex(pos);
	}
	else{
		//begin trick to pass a Qt 4.6.0 bug: the first entry is not highlighted with mouse until you move to second entry and then back up
		if(subjectsComboBox->view()){
			subjectsComboBox->view()->setCurrentIndex(QModelIndex());
		}
		//end trick
		subjectsComboBox->setCurrentIndex(-1);
	}
	if(activityTagName!="")
		selectedActivityTagsListWidget->addItem(activityTagName);
}
예제 #22
0
void movePlayer(int whichPlayer, int direction)
{
	/* 	Function: movePlayer
		Purpose:  Move a Player to a certain direction
	*/
	
	int targetBlock, targetX, targetY, targetX2, targetY2;
	switch ( direction )
	{
		case UP:   
			targetX = player[whichPlayer].coord_x;
			targetY = player[whichPlayer].coord_y - 1; 
			targetX2 = player[whichPlayer].coord_x;
			targetY2 = player[whichPlayer].coord_y - 2;
			break;
		case DOWN: 
			targetX = player[whichPlayer].coord_x;
			targetY = player[whichPlayer].coord_y + 1; 
			targetX2 = player[whichPlayer].coord_x;
			targetY2 = player[whichPlayer].coord_y + 2;
			break;
		case LEFT: 
			targetX = player[whichPlayer].coord_x - 1;
			targetY = player[whichPlayer].coord_y;
			targetX2 = player[whichPlayer].coord_x - 2;
			targetY2 = player[whichPlayer].coord_y;
			break;
		case RIGHT:
			targetX = player[whichPlayer].coord_x + 1;
			targetY = player[whichPlayer].coord_y;
			targetX2 = player[whichPlayer].coord_x + 2;
			targetY2 = player[whichPlayer].coord_y;
			break;
	}
	
	targetBlock = level.data[targetX][targetY];
	
	// item
	if ( hasBlockBit(targetX, targetY, ISFETCHABLE) ) {
		takeItem(targetX, targetY);
	}
	
	// movable block
	if ( hasBlockBit(targetX, targetY, ISMOVABLE) ) {
		// water or hole
		if ( hasBlockBit(targetX2, targetY2, ISBLOCKDESTROYER) ) {
			removeBlock(targetX2, targetY2);	
			removeBlock(targetX, targetY);
		// other block container
		} else if ( hasBlockBit(targetX2, targetY2, ISBLOCKCONTAINER) ) {
			level.data[targetX2][targetY2] = level.data[targetX][targetY];
			removeBlock(targetX, targetY);
			addActivity(targetX, targetY, BLOCKMOVE);
		}
	}
	
	// arrow fields
	if ( (level.data[targetX][targetY] == B_UPARROW) ||
		 (level.data[targetX][targetY] == B_DOWNARROW) ||
		 (level.data[targetX][targetY] == B_RIGHTARROW) ||
		 (level.data[targetX][targetY] == B_LEFTARROW)) {
		addActivity(targetX, targetY, PLAYERMOVE);
	}

	// doors	
	if (targetBlock == B_REDDOOR) {
		inventory.redKeys--;
		removeBlock(targetX, targetY);
	}
	if (targetBlock == B_GREENDOOR) {
		inventory.greenKeys--;
		removeBlock(targetX, targetY);
	}
	if (targetBlock == B_BLUEDOOR) {
		inventory.blueKeys--;
		removeBlock(targetX, targetY);
	}
	if (targetBlock == B_YELLOWDOOR) {
		inventory.yellowKeys--;
		removeBlock(targetX, targetY);
	}
	
	// toggle button
	if (targetBlock == B_BUTTON) {
		toggleBlocks = !toggleBlocks;	
	}

	// general player movement	
	if ( hasBlockBit(targetX, targetY, ISWALKABLE) ) {
		player[whichPlayer].coord_x = targetX;
		player[whichPlayer].coord_y = targetY;		
	}
	// TODO
	// broken floor
	// finish
	// fake wall (air)
	// water w/ flippers
	// fire w/ fireshoes
	
	return;
	
}