com.bladecoder.engine.model.Transition Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of blade-engine Show documentation
Show all versions of blade-engine Show documentation
Classic point and click adventure game engine
/*******************************************************************************
* Copyright 2014 Rafael Garcia Moreno.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
package com.bladecoder.engine.model;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.Interpolation;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.utils.Json;
import com.badlogic.gdx.utils.Json.Serializable;
import com.badlogic.gdx.utils.JsonValue;
import com.bladecoder.engine.actions.ActionCallback;
import com.bladecoder.engine.actions.ActionCallbackQueue;
import com.bladecoder.engine.util.ActionCallbackSerialization;
import com.bladecoder.engine.util.RectangleRenderer;
/**
* A transition is used to fadein/fadeout the screen.
*
* @author rgarcia
*/
public class Transition implements Serializable {
public static enum Type {
NONE, FADE_IN, FADE_OUT
};
private float time;
private float currentTime;
private ActionCallback cb;
private Color c;
private Type type = Type.NONE;
public void update(float delta) {
if (isFinish()) {
if (cb != null) {
ActionCallbackQueue.add(cb);
cb = null;
}
// reset the transition when finish. Only in fade in case, fade out
// must stay in screen even when finished
if (type == Type.FADE_IN)
reset();
} else {
currentTime += delta;
}
}
public void reset() {
type = Type.NONE;
}
public void draw(SpriteBatch batch, float width, float height) {
if (type == Type.NONE)
return;
switch (type) {
case FADE_IN:
c.a = MathUtils.clamp(Interpolation.fade.apply(1 - currentTime / time), 0, 1);
break;
case FADE_OUT:
c.a = MathUtils.clamp(Interpolation.fade.apply(currentTime / time), 0, 1);
break;
default:
break;
}
RectangleRenderer.draw(batch, 0, 0, width, height, c);
}
public void create(float time, Color color, Type type, ActionCallback cb) {
this.currentTime = 0f;
this.c = color.cpy();
this.type = type;
this.time = time;
this.cb = cb;
}
public boolean isFinish() {
return (currentTime > time || type == Type.NONE);
}
@Override
public void write(Json json) {
json.writeValue("currentTime", currentTime);
json.writeValue("time", time);
json.writeValue("color", c);
json.writeValue("type", type);
json.writeValue("cb", ActionCallbackSerialization.find(cb), cb == null ? null : String.class);
}
@Override
public void read(Json json, JsonValue jsonData) {
currentTime = json.readValue("currentTime", Float.class, jsonData);
time = json.readValue("time", Float.class, jsonData);
c = json.readValue("color", Color.class, jsonData);
type = json.readValue("type", Type.class, jsonData);
String cbSer = json.readValue("cb", String.class, jsonData);
if (cbSer != null)
cb = ActionCallbackSerialization.find(cbSer);
}
}