Java源码示例:com.badlogic.gdx.utils.FloatArray

示例1
public static GrooveGauge create(BMSModel model, int type, PlayerResource resource) {
	int coursetype = 0;
	GaugeProperty gauges = null;
	if(resource.getCourseBMSModels() != null){
		coursetype = 1;
		for (CourseData.CourseDataConstraint i : resource.getConstraint()) {
			switch(i) {
			case GAUGE_5KEYS:
				gauges = GaugeProperty.FIVEKEYS;
				break;
			case GAUGE_7KEYS:
				gauges = GaugeProperty.SEVENKEYS;
				break;
			case GAUGE_9KEYS:
				gauges = GaugeProperty.PMS;
				break;
			case GAUGE_24KEYS:
				gauges = GaugeProperty.KEYBOARD;
				break;
			case GAUGE_LR2:
				gauges = GaugeProperty.LR2;
				break;
			default:
				break;
			}
		}
	}
	GrooveGauge gauge = create(model, type, coursetype, gauges);
	FloatArray[] f = resource.getGauge();
	if (f != null) {
		for(int i = 0; i < f.length; i++) {
			gauge.setValue(i, f[i].get(f[i].size - 1));
		}
	}
	return gauge;
}
 
示例2
/**
 * Creates chain light from specified vertices
 * 
 * @param rayHandler
 *            not {@code null} instance of RayHandler
 * @param rays
 *            number of rays - more rays make light to look more realistic
 *            but will decrease performance, can't be less than MIN_RAYS
 * @param color
 *            color, set to {@code null} to use the default color
 * @param distance
 *            distance of light
 * @param rayDirection
 *            direction of rays
 *            <ul>
 *            <li>1 = left</li>
 *            <li>-1 = right</li>
 *            </ul>
 * @param chain
 *            float array of (x, y) vertices from which rays will be
 *            evenly distributed
 */
public ChainLight(RayHandler rayHandler, int rays, Color color,
		float distance, int rayDirection, float[] chain) {
	
	super(rayHandler, rays, color, distance, 0f);
	rayStartOffset = ChainLight.defaultRayStartOffset;
	this.rayDirection = rayDirection;
	vertexNum = (vertexNum - 1) * 2;
	endX = new float[rays];
	endY = new float[rays];
	startX = new float[rays];
	startY = new float[rays];
	this.chain = (chain != null) ?
				 new FloatArray(chain) : new FloatArray();
	
	lightMesh = new Mesh(
			VertexDataType.VertexArray, false, vertexNum, 0,
			new VertexAttribute(Usage.Position, 2, "vertex_positions"),
			new VertexAttribute(Usage.ColorPacked, 4, "quad_colors"),
			new VertexAttribute(Usage.Generic, 1, "s"));
	softShadowMesh = new Mesh(
			VertexDataType.VertexArray, false, vertexNum * 2,
			0, new VertexAttribute(Usage.Position, 2, "vertex_positions"),
			new VertexAttribute(Usage.ColorPacked, 4, "quad_colors"),
			new VertexAttribute(Usage.Generic, 1, "s"));
	setMesh();
}
 
示例3
/**
 * Draws a polygon, using ray start and end points as vertices
 */
public void debugRender(ShapeRenderer shapeRenderer) {
	shapeRenderer.setColor(Color.YELLOW);
	FloatArray vertices = Pools.obtain(FloatArray.class);
	vertices.clear();
	for (int i = 0; i < rayNum; i++) {
		vertices.addAll(mx[i], my[i]);
	}
	for (int i = rayNum - 1; i > -1; i--) {
		vertices.addAll(startX[i], startY[i]);
	}
	shapeRenderer.polygon(vertices.shrink());
	Pools.free(vertices);
}
 
示例4
@Override
public boolean contains(float x, float y) {
	// fast fail
	if (!this.chainLightBounds.contains(x, y))
		return false;
	// actual check
	FloatArray vertices = Pools.obtain(FloatArray.class);
	vertices.clear();
	
	for (int i = 0; i < rayNum; i++) {
		vertices.addAll(mx[i], my[i]);
	}
	for (int i = rayNum - 1; i > -1; i--) {
		vertices.addAll(startX[i], startY[i]);
	}
	
	int intersects = 0;
	for (int i = 0; i < vertices.size; i += 2) {
		float x1 = vertices.items[i];
		float y1 = vertices.items[i + 1];
		float x2 = vertices.items[(i + 2) % vertices.size];
		float y2 = vertices.items[(i + 3) % vertices.size];
		if (((y1 <= y && y < y2) || (y2 <= y && y < y1)) &&
				x < ((x2 - x1) / (y2 - y1) * (y - y1) + x1))
			intersects++;
	}
	boolean result = (intersects & 1) == 1;

	Pools.free(vertices);
	return result;
}
 
示例5
void path (FloatArray userPath, float lineWidth, JoinType joinType, boolean open) {
    path (userPath.items, 0, userPath.size, lineWidth, joinType, open);
}
 
示例6
@Override
public void prepare(long time, MainState state) {
	super.prepare(time, state);
	GrooveGauge gauge = null;
	if(state instanceof BMSPlayer) {
		gauge = ((BMSPlayer) state).getGauge();
	} else if(state instanceof AbstractResult) {
		gauge = ((AbstractResult) state).main.getPlayerResource().getGrooveGauge();
	}
	if (gauge == null) {
		draw = false;
		return;
	}

	switch(animationType) {
	case ANIMATION_RANDOM:
		if (atime < time) {
			animation = (int) (Math.random() * (animationRange + 1));
			atime = time + duration;
		}
		break;
	case ANIMATION_INCLEASE:
		if (atime < time) {
			animation = (animation + animationRange) % (animationRange + 1);
			atime = time + duration;
		}
		break;
	case ANIMATION_DECLEASE:
		if (atime < time) {
			animation = (animation + 1) % (animationRange + 1);
			atime = time + duration;
		}
		break;
	case ANIMATION_FLICKERING:
		animation = (int) (time % duration);
		break;
	}

	// TODO 9key固有実装の汎用化
	if(!isCheckedSevenToNine) {
		if(state.main.getPlayerResource().getOriginalMode() == Mode.BEAT_7K 
				&& state.main.getPlayerResource().getBMSModel().getMode() == Mode.POPN_9K) {
			//7to9 ボーダーが丁度割り切れるゲージ粒数に変更
			int setParts = parts;
			for(int type = 0; type < gauge.getGaugeTypeLength(); type++) {
				final GaugeElementProperty element = gauge.getGauge(type).getProperty();
				for(int i = parts; i <= element.max; i++) {
					if(element.border % (element.max / i) == 0) {
						setParts = Math.max(setParts, i);
						break;
					}
				}
			}
			parts = setParts;
		}
		isCheckedSevenToNine = true;			
	}
	
	value = gauge.getValue();
	type = state instanceof AbstractResult ? ((AbstractResult) state).getGaugeType() : gauge.getType();
	max = gauge.getGauge(type).getProperty().max;
	border = gauge.getGauge(type).getProperty().border;
	
	if(state instanceof AbstractResult) {
		PlayerResource resource = ((AbstractResult) state).main.getPlayerResource();
		FloatArray gaugeTransition;
		if(state instanceof MusicResult) {
			gaugeTransition = resource.getGauge()[type];
		} else {
			gaugeTransition = resource.getCourseGauge().get(resource.getCourseGauge().size - 1)[type];
		}
		value = gaugeTransition.get(gaugeTransition.size - 1);
		if(time < starttime) {
			value = gauge.getGauge(type).getProperty().min;
		} else if(time >= starttime && time < endtime) {
			value = Math.min(value, Math.max(max * (time - starttime) / (endtime - starttime), gauge.getGauge(type).getProperty().min));
		}
	}
	
	images = image.getImages(time, state);
}
 
示例7
public void render() {
	long time = main.getNowTime();
	main.switchTimer(TIMER_RESULTGRAPH_BEGIN, true);
	main.switchTimer(TIMER_RESULTGRAPH_END, true);

	if (((MusicResultSkin) getSkin()).getRankTime() == 0) {
		main.switchTimer(TIMER_RESULT_UPDATESCORE, true);
	}
	if (time > getSkin().getInput()) {
		main.switchTimer(TIMER_STARTINPUT, true);
	}

	final PlayerResource resource = main.getPlayerResource();

	if (main.isTimerOn(TIMER_FADEOUT)) {
		if (main.getNowTime(TIMER_FADEOUT) > getSkin().getFadeout()) {
			stop(SOUND_CLEAR);
			stop(SOUND_FAIL);
			stop(SOUND_CLOSE);
			main.getAudioProcessor().stop((Note) null);

			boolean[] keystate = main.getInputProcessor().getKeystate();
			//				System.out.println(Arrays.toString(keystate));
			long[] keytime = main.getInputProcessor().getTime();
			Arrays.fill(keytime, 0);

			if (resource.getCourseBMSModels() != null) {
				if (resource.getGauge()[resource.getGrooveGauge().getType()]
						.get(resource.getGauge()[resource.getGrooveGauge().getType()].size - 1) <= 0) {
					if (resource.getCourseScoreData() != null) {
						// 未達曲のノーツをPOORとして加算
						final Array<FloatArray[]> coursegauge = resource.getCourseGauge();
						final int cg = resource.getCourseBMSModels().length;
						for (int i = 0; i < cg; i++) {
							if (coursegauge.size <= i) {
								resource.getCourseScoreData().setMinbp(resource.getCourseScoreData().getMinbp()
										+ resource.getCourseBMSModels()[i].getTotalNotes());
							}
						}
						// 不合格リザルト
						main.changeState(MainStateType.COURSERESULT);
					} else {
						// コーススコアがない場合は選曲画面へ
						main.changeState(MainStateType.MUSICSELECT);
					}
				} else if (resource.nextCourse()) {
					main.changeState(MainStateType.PLAY);
				} else {
					// 合格リザルト
					main.changeState(MainStateType.COURSERESULT);
				}
			} else {
				main.getPlayerResource().getPlayerConfig().setGauge(main.getPlayerResource().getOrgGaugeOption());
				ResultKeyProperty.ResultKey key = null;
				for (int i = 0; i < property.getAssignLength(); i++) {
					if (property.getAssign(i) == ResultKeyProperty.ResultKey.REPLAY_DIFFERENT && keystate[i]) {
						key = ResultKeyProperty.ResultKey.REPLAY_DIFFERENT;
						break;
					}
					if (property.getAssign(i) == ResultKeyProperty.ResultKey.REPLAY_SAME && keystate[i]) {
						key = ResultKeyProperty.ResultKey.REPLAY_SAME;
						break;
					}
				}
				if (resource.getPlayMode() == PlayMode.PLAY
						&& key == ResultKeyProperty.ResultKey.REPLAY_DIFFERENT) {
					Logger.getGlobal().info("オプションを変更せずリプレイ");
					// オプションを変更せず同じ譜面でリプレイ
					resource.getReplayData().pattern = null;
					resource.reloadBMSFile();
					main.changeState(MainStateType.PLAY);
				} else if (resource.getPlayMode() == PlayMode.PLAY
						&& key == ResultKeyProperty.ResultKey.REPLAY_SAME) {
					// 同じ譜面でリプレイ
					if(resource.isUpdateScore()) {
						Logger.getGlobal().info("同じ譜面でリプレイ");							
					} else {
						Logger.getGlobal().info("アシストモード時は同じ譜面でリプレイできません");
						resource.getReplayData().pattern = null;
					}
					resource.reloadBMSFile();
					main.changeState(MainStateType.PLAY);
				} else {
					main.changeState(MainStateType.MUSICSELECT);
				}
			}
		}
	} else {
		if (time > getSkin().getScene()) {
			main.switchTimer(TIMER_FADEOUT, true);
			if (getSound(SOUND_CLOSE) != null) {
				stop(SOUND_CLEAR);
				stop(SOUND_FAIL);
				play(SOUND_CLOSE);
			}
		}
	}

}
 
示例8
public void create() {
	final PlayerResource resource = main.getPlayerResource();

	for(int i = 0;i < REPLAY_SIZE;i++) {
		saveReplay[i] = main.getPlayDataAccessor().existsReplayData(resource.getCourseBMSModels(),
				resource.getPlayerConfig().getLnmode(), i ,resource.getConstraint()) ? ReplayStatus.EXIST : ReplayStatus.NOT_EXIST ;
	}

	setSound(SOUND_CLEAR, "course_clear.wav", SoundType.SOUND,false);
	setSound(SOUND_FAIL, "course_fail.wav", SoundType.SOUND, false);
	setSound(SOUND_CLOSE, "course_close.wav", SoundType.SOUND, false);

	loadSkin(SkinType.COURSE_RESULT);

	for(int i = resource.getCourseGauge().size;i < resource.getCourseBMSModels().length;i++) {
		FloatArray[] list = new FloatArray[resource.getGrooveGauge().getGaugeTypeLength()];
		for(int type = 0; type < list.length; type++) {
			list[type] = new FloatArray();
			for(int l = 0;l < (resource.getCourseBMSModels()[i].getLastNoteTime() + 500) / 500;l++) {
				list[type].add(0f);
			}
		}
		resource.getCourseGauge().add(list);
	}

	property = ResultKeyProperty.get(resource.getBMSModel().getMode());
	if(property == null) {
		property = ResultKeyProperty.BEAT_7K;
	}

	updateScoreDatabase();

	// リプレイの自動保存
	if(resource.getPlayMode() == PlayMode.PLAY){
		for(int i=0;i<REPLAY_SIZE;i++){
			if(MusicResult.ReplayAutoSaveConstraint.get(resource.getConfig().getAutoSaveReplay()[i]).isQualified(oldscore ,getNewScore())) {
				saveReplayData(i);
			}
		}
	}

	gaugeType = resource.getGrooveGauge().getType();
}