⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 behaviorstructure.java

📁 JAVA3D矩陈的相关类
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
	if (triggeredVP != null) {	    boundsEntryList.add(w);	}	// we always trigger bound is inside during initialize	if (needTrigger && (triggeredVP != null)) {	    w.triggeredVP = triggeredVP;	    w.setTriggered();	}    }    void removeVPExitCondition(WakeupOnViewPlatformExit w) {	wakeupOnViewPlatformExit.remove(w);	// don't remove boundsExitList, it is use next time	// when addVPEntryCondition invoke to determine whether to	// trigger an event or not.    }    void addVPExitCondition(WakeupOnViewPlatformExit w) {	// Cleanup, since collideEntryList did not remove	// its condition in removeVPEntryCondition	boolean needTrigger = true;	WakeupOnViewPlatformExit boundsExitArr[] = 	    (WakeupOnViewPlatformExit []) boundsExitList.toArray(false);	WakeupOnViewPlatformExit wexit;	for (int i=boundsExitList.arraySize()-1; i>=0; i--) {	    wexit = boundsExitArr[i];	    if ((wexit.behav == w.behav) &&		(wexit.region.equals(w.region))) {		boundsExitList.remove(i);		needTrigger = false;		break;	    }	}		ViewPlatformRetained triggeredVP = intersectVPCenter(w.transformedRegion);	wakeupOnViewPlatformExit.add(w);	if (triggeredVP != null) {	    w.triggeredVP = triggeredVP;	    boundsExitList.add(w);	} 	if (!needTrigger) {	    return;	}	// see if the matching wakeupOnViewPlatformEntry	// condition exists	WakeupOnViewPlatformEntry boundsEntryArr[] = 	    (WakeupOnViewPlatformEntry []) boundsEntryList.toArray(false);	WakeupOnViewPlatformEntry wentry;		for (int i=boundsEntryList.arraySize()-1; i>=0; i--) {	    wentry = boundsEntryArr[i];	    if ((wentry.behav == w.behav) &&		(wentry.region.equals(w.region))) {		// Don't remove this since if user wakeupOr() 		// Entry and Exit condition together we may have trouble		//		boundsEntryList.remove(i);		if (triggeredVP == null) {		    w.setTriggered();		}		break;	    }	}    }    void removeSensorEntryCondition(WakeupOnSensorEntry w) {	wakeupOnSensorEntry.remove(w);	// don't remove currentSensorEntryList, it is use next time	// when addSensorExitCondition invoke to determine whether to	// trigger an event or not.    }    void addSensorEntryCondition(WakeupOnSensorEntry w) {	boolean needTrigger = true;	// see if the matching wakeupOnSensorEntry	// condition exists	WakeupOnSensorEntry sensorEntryArr[] = 	    (WakeupOnSensorEntry []) currentSensorEntryList.toArray(false);	WakeupOnSensorEntry wentry;		for (int i=currentSensorEntryList.arraySize()-1; i>=0; i--) {	    wentry = sensorEntryArr[i];	    if ((wentry.behav == w.behav) &&		(wentry.region.equals(w.region))) {		currentSensorEntryList.remove(i);		needTrigger = false;		break;	    }	}	wakeupOnSensorEntry.add(w);	w.updateTransformRegion();	Sensor target = sensorIntersect(w.transformedRegion);	if (target != null) {	    w.setTarget(target);	    currentSensorEntryList.add(w);	}		if (needTrigger && (target != null)) {	    w.setTriggered();	}	VirtualUniverse.mc.sendRunMessage(universe,					  J3dThread.UPDATE_BEHAVIOR);    }    void removeSensorExitCondition(WakeupOnSensorExit w) {	wakeupOnSensorExit.remove(w);	// don't remove currentSensorExitList, it is use next time	// when addSensorEntryCondition invoke to determine whether to	// trigger an event or not    }    void addSensorExitCondition(WakeupOnSensorExit w) {	// Cleanup	boolean needTrigger = true;	WakeupOnSensorExit currentSensorExitArr[] = 	    (WakeupOnSensorExit []) currentSensorExitList.toArray(false);	WakeupOnSensorExit wexit;	for (int i=currentSensorExitList.arraySize()-1; i>=0; i--) {	    wexit = currentSensorExitArr[i];	    if ((wexit.behav == w.behav) &&		(wexit.region.equals(w.region))) {		currentSensorExitList.remove(i);		needTrigger = false;		break;	    }	}	w.updateTransformRegion();	Sensor target = sensorIntersect(w.transformedRegion);	wakeupOnSensorExit.add(w);	if (target != null) {	    w.setTarget(target);	    currentSensorExitList.add(w);	} 	if (!needTrigger) {	    return;	}	// see if the matching wakeupOnSensorEntry	// condition exists	WakeupOnSensorEntry sensorEntryArr[] = 	    (WakeupOnSensorEntry []) currentSensorEntryList.toArray(false);	WakeupOnSensorEntry wentry;		for (int i=currentSensorEntryList.arraySize()-1; i>=0; i--) {	    wentry = sensorEntryArr[i];	    if ((wentry.behav == w.behav) &&		(wentry.region.equals(w.region))) {		// No need to invoke currentSensorEntryList.remove(i);		if (target == null) {		    w.setTriggered();		}		break;	    }	}	VirtualUniverse.mc.sendRunMessage(universe,					  J3dThread.UPDATE_BEHAVIOR);    }    void processConditionMet(BehaviorRetained behav,  			     Boolean checkSchedulingRegion) {	// Since we reuse wakeup condition, the old wakeupCondition	// will not reactivate again while processStimulus is running	// which may set another wakeupCondition. 	// Previously we don't reuse wakeupCondition and cleanTree()	// everytime before calling processStimulus() so the flag	// inCallback is not necessary to check.	if (!behav.inCallback && 	    ((checkSchedulingRegion == Boolean.FALSE) || 	     behav.active))  {	    processList[behav.schedulingInterval].add(behav);	} else {	    if (((behav.wakeupMask &		  BehaviorRetained.WAKEUP_TIME) !=  0) &&		(behav.source != null) &&		(behav.source.isLive()) &&		(behav.wakeupCondition != null)) {		// need to add back wakeupOnElapsedTime condition		// to TimerThread		behav.wakeupCondition.reInsertElapseTimeCond();	    }	}    }    final void processBehXformChanged(UnorderList arrList) {	BehaviorRetained beh;	Object[] nodes, nodesArr;	int size = arrList.size();        nodesArr = arrList.toArray(false);	for (int i = 0; i < size; i++) {            nodes = (Object[])nodesArr[i];	    for (int j=0; j<nodes.length; j++) {	        beh = (BehaviorRetained)nodes[j];                beh.updateTransformRegion();                processBehaviorTransform(beh);	    }	}    }    final void processVpfXformChanged(UnorderList arrList) {	ViewPlatformRetained vpf;	Object[] nodes, nodesArr;	int size = arrList.size();        nodesArr = arrList.toArray(false);	for (int i = 0; i < size; i++) {            nodes = (Object[])nodesArr[i];	    for (int j=0; j<nodes.length; j++) {                processViewPlatformTransform((ViewPlatformRetained)nodes[j]);	    }	}    }    final void processTransformChanged(Object leaf[]) {	Object node;	int i;	// We have to process them in group rather then one by one,	// otherwise we may have both activation/deactivation 	// conditions wakeup at the same time when both ViewPlatform	// and Behavior transform under a branch.	// Update transformRegion first	for (i=0; i < leaf.length; i++) {	    node = leaf[i];	    if (node instanceof BehaviorRetained) {		((BehaviorRetained) node).updateTransformRegion();		processBehaviorTransform((BehaviorRetained) node);	    } else if (node instanceof ViewPlatformRetained) {		((ViewPlatformRetained) node).updateTransformRegion();		transformViewPlatformList.add(node);	    } 	}	// finally handle ViewPlatformRetained Transform change	if (transformViewPlatformList.size() > 0) {	    ViewPlatformRetained vpArr[] = (ViewPlatformRetained [])		                     transformViewPlatformList.toArray(false);	    int size = transformViewPlatformList.arraySize();	    for (i=0; i < size; i++) {		processViewPlatformTransform((ViewPlatformRetained) 					     vpArr[i]);	    }	    transformViewPlatformList.clear();	}    }    // assume behav.updateTransformRegion() invoke before    final void processBehaviorTransform(BehaviorRetained behav) {	if ((behav.wakeupMask & BehaviorRetained.WAKEUP_VP_ENTRY) != 0) {	    updateVPEntryTransformRegion(behav);	} 	if ((behav.wakeupMask & BehaviorRetained.WAKEUP_VP_EXIT) != 0) {	    updateVPExitTransformRegion(behav);	    	}	if (behav.active) {	    if (!intersectVPRegion(behav.transformedRegion)) {		removeFromScheduleList(behav);	    }	} else {	    addToScheduleList(behav);	}    }    void processViewPlatformTransform(ViewPlatformRetained vp) {	int i;	BehaviorRetained behav;	vp.updateTransformRegion();	if (!vp.isActiveViewPlatform()) {	    return;	}		BehaviorRetained behavArr[] = (BehaviorRetained []) behaviors.toArray(false);	// re-evaulate all behaviors affected by this vp	for (i=behaviors.arraySize()-1; i>=0; i--) {	    behav = behavArr[i];	    if (behav.active) {		if (!intersectVPRegion(behav.transformedRegion)) {		    removeFromScheduleList(behav);		}	    } else {		addToScheduleList(behav);	    }	}	// handle wakeupOnViewPlatformEntry	WakeupOnViewPlatformEntry wakeupOnViewPlatformEntryArr[] =	    (WakeupOnViewPlatformEntry []) wakeupOnViewPlatformEntry.toArray(false);	WakeupOnViewPlatformEntry wentry;	int idx;	ViewPlatformRetained triggeredVP;	for (i=wakeupOnViewPlatformEntry.arraySize()-1; i >=0; i--) {	    wentry = wakeupOnViewPlatformEntryArr[i];	    idx = boundsEntryList.indexOf(wentry);	    if (idx < 0) {		if (wentry.transformedRegion.intersect(vp.center)) {		    boundsEntryList.add(wentry);		    wentry.triggeredVP = vp;		    wentry.setTriggered();		}	    } else {		triggeredVP = intersectVPCenter(wentry.transformedRegion);		if (triggeredVP == null) {		    boundsEntryList.remove(idx);		}	    }	}	// handle wakeupOnViewPlatformExit;	WakeupOnViewPlatformExit wakeupOnViewPlatformExitArr[] =	    (WakeupOnViewPlatformExit []) wakeupOnViewPlatformExit.toArray(false);	WakeupOnViewPlatformExit wexit;	for (i=wakeupOnViewPlatformExit.arraySize()-1; i >=0; i--) {	    wexit = wakeupOnViewPlatformExitArr[i];	    idx = boundsExitList.indexOf(wexit);	    if (idx < 0) {		if (wexit.transformedRegion.intersect(vp.center)) {		    wexit.triggeredVP = vp;		    boundsExitList.add(wexit);		}	    } else {		triggeredVP = intersectVPCenter(wexit.transformedRegion);		if (triggeredVP == null) {		    boundsExitList.remove(idx);		    wexit.setTriggered();		} 	    }	}    }    void updateVPEntryTransformRegion(BehaviorRetained behav) {	WakeupOnViewPlatformEntry wakeupOnViewPlatformEntryArr[] =	    (WakeupOnViewPlatformEntry []) wakeupOnViewPlatformEntry.toArray(false);	WakeupOnViewPlatformEntry wentry;	ViewPlatformRetained triggeredVP;	for (int i=wakeupOnViewPlatformEntry.arraySize()-1; i >=0; i--) {	    wentry = wakeupOnViewPlatformEntryArr[i];	    if (wentry.behav == behav) {		wentry.updateTransformRegion(behav);		int idx = boundsEntryList.indexOf(wentry);				triggeredVP = intersectVPCenter(wentry.transformedRegion);		if (triggeredVP != null) {		    if (idx < 0) {			boundsEntryList.add(wentry);			wentry.triggeredVP = triggeredVP;			wentry.setTriggered();		    }		} else {		    if (idx >=0) {			boundsEntryList.remove(idx);		    }		}	    }	}    }    void updateVPExitTransformRegion(BehaviorRetained behav) {	WakeupOnViewPlatformExit wakeupOnViewPlatformExitArr[] =	    (WakeupOnViewPlatformExit []) wakeupOnViewPlatformExit.toArray(false);	WakeupOnViewPlatformExit wexit;	ViewPlatformRetained triggeredVP;	for (int i=wakeupOnViewPlatformExit.arraySize()-1; i >=0; i--) {	    wexit = wakeupOnViewPlatformExitArr[i];	    if (wexit.behav == behav) {		wexit.updateTransformRegion(behav);		wexit = wakeupOnViewPlatformExitArr[i];		int idx = boundsExitList.indexOf(wexit);		triggeredVP = intersectVPCenter(wexit.transformedRegion);		if (triggeredVP != null) {		    if (idx < 0) {			wexit.triggeredVP = triggeredVP;			boundsExitList.add(wexit);		    }		} else {		    if (idx >= 0) {			boundsExitList.remove(idx);			wexit.setTriggered();		    }		}	    }	}    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -