Added multichannel support to entity rendering system
This commit is contained in:
		
							parent
							
								
									9fb15e572d
								
							
						
					
					
						commit
						f441b6c164
					
				| @ -1,6 +1,8 @@ | ||||
| package com.saltosion.gladiator.components; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| import java.util.HashMap; | ||||
| import java.util.Set; | ||||
| 
 | ||||
| import com.badlogic.ashley.core.Component; | ||||
| import com.badlogic.gdx.graphics.g2d.Sprite; | ||||
| @ -8,10 +10,13 @@ import com.saltosion.gladiator.util.SpriteSequence; | ||||
| 
 | ||||
| public class CRenderedObject extends Component { | ||||
| 	private HashMap<String, SpriteSequence> spritesequences = new HashMap<String, SpriteSequence>(); | ||||
| 	private String currentSequence = ""; | ||||
| 	private float currentframe = 0; | ||||
| 	private ArrayList<String> channels = new ArrayList<String>(); | ||||
| 	private HashMap<String, String> currentSequences = new HashMap<String, String>(); | ||||
| 	private HashMap<String, Float> currentFrames = new HashMap<String, Float>(); | ||||
| 	 | ||||
| 	public CRenderedObject() {} | ||||
| 	public CRenderedObject() { | ||||
| 		addChannel("default"); | ||||
| 	} | ||||
| 	 | ||||
| 	/** | ||||
| 	 * Can be used if the Rendered Object is a single static image always. | ||||
| @ -19,46 +24,145 @@ public class CRenderedObject extends Component { | ||||
| 	 */ | ||||
| 	public CRenderedObject(Sprite sprite) { | ||||
| 		spritesequences.put("Idle", new SpriteSequence(sprite)); | ||||
| 		currentSequence = "Idle"; | ||||
| 		addChannel("default"); | ||||
| 	} | ||||
| 	 | ||||
| 	public void addSequence(String key, SpriteSequence sequence) { | ||||
| 		spritesequences.put(key, sequence); | ||||
| 	} | ||||
| 	 | ||||
| 	public void setCurrentSequence(String sequence) { | ||||
| 		this.currentSequence = sequence; | ||||
| 	/** | ||||
| 	 * Sets sequence for channelName | ||||
| 	 * @param channelName | ||||
| 	 * @param sequence | ||||
| 	 */ | ||||
| 	public void setCurrentSequence(String channelName, String sequence) { | ||||
| 		this.currentSequences.put(channelName, sequence); | ||||
| 	} | ||||
| 	 | ||||
| 	/** | ||||
| 	 * Sets sequence for "default" channel. | ||||
| 	 * @param sequence  | ||||
| 	 */ | ||||
| 	public void setCurrentSequence(String sequence) { | ||||
| 		setCurrentSequence("default", sequence); | ||||
| 	} | ||||
| 	 | ||||
| 	/** | ||||
| 	 * Sets frame for channelName | ||||
| 	 * @param channelName | ||||
| 	 * @param frame | ||||
| 	 */ | ||||
| 	public void setCurrentFrame(String channelName, float frame) { | ||||
| 		this.currentFrames.put(channelName, frame); | ||||
| 	} | ||||
| 	 | ||||
| 	/** | ||||
| 	 * Sets frame for "default" channel. | ||||
| 	 * @param frame | ||||
| 	 */ | ||||
| 	public void setCurrentFrame(float frame) { | ||||
| 		this.currentframe = frame; | ||||
| 		setCurrentFrame("default", frame); | ||||
| 	} | ||||
| 	 | ||||
| 	public SpriteSequence getSequence(String key) { | ||||
| 		return spritesequences.get(key); | ||||
| 	} | ||||
| 	 | ||||
| 	/** | ||||
| 	 * Plays animation on the "default" channel, starting in frame 0 | ||||
| 	 * @param key | ||||
| 	 */ | ||||
| 	public void playAnimation(String key) { | ||||
| 		playAnimation(key, 0); | ||||
| 	} | ||||
| 	 | ||||
| 	public void playAnimation(String key, int startingframe) { | ||||
| 		if (spritesequences.containsKey(key)) { | ||||
| 			currentSequence = key; | ||||
| 			currentframe = startingframe; | ||||
| 	/** | ||||
| 	 * Plays animation on channelName | ||||
| 	 * @param channelName | ||||
| 	 * @param key animation name | ||||
| 	 * @param startingframe | ||||
| 	 */ | ||||
| 	public void playAnimation(String channelName, String key, int startingframe) { | ||||
| 		if (spritesequences.containsKey(key) && channels.contains(channelName)) { | ||||
| 			setCurrentSequence(channelName, key); | ||||
| 			setCurrentFrame(channelName, startingframe); | ||||
| 			return; | ||||
| 		} | ||||
| 		String[] s = (String[]) spritesequences.keySet().toArray(); | ||||
| 		currentSequence = s[0]; | ||||
| 		currentframe = 0; | ||||
| 		setCurrentSequence(channels.get(0), s[0]); | ||||
| 		setCurrentFrame(channels.get(0), 0f); | ||||
| 	} | ||||
| 	 | ||||
| 	/** | ||||
| 	 * Plays animation on the "default" channel. | ||||
| 	 * @param key animation name | ||||
| 	 * @param startingFrame | ||||
| 	 */ | ||||
| 	public void playAnimation(String key, int startingframe) { | ||||
| 		playAnimation("default", key, startingframe); | ||||
| 	} | ||||
| 	 | ||||
| 	public void addChannel(String channelName) { | ||||
| 		Set<String> sequences = spritesequences.keySet();	 | ||||
| 		String sequence = ""; | ||||
| 		if (sequences.size() > 0) { | ||||
| 			sequence = (String) sequences.toArray()[0]; | ||||
| 		} | ||||
| 		this.channels.add(channelName); | ||||
| 		this.currentSequences.put(channelName, sequence); | ||||
| 		this.currentFrames.put(channelName, 0f); | ||||
| 	} | ||||
| 	 | ||||
| 	/** | ||||
| 	 * Sets channel name | ||||
| 	 * @param oldName Old name of the channel | ||||
| 	 * @param newName New name of the channel to be set | ||||
| 	 * @return <b>boolean</b>, false if channel with oldName doesn't exist or a channel with newName already exists. | ||||
| 	 */ | ||||
| 	public boolean setChannelName(String oldName, String newName) { | ||||
| 		if ( !this.channels.contains(oldName) || this.channels.contains(newName) ) { | ||||
| 			return false; | ||||
| 		} | ||||
| 		this.channels.remove(oldName); | ||||
| 		this.channels.add(newName); | ||||
| 		this.currentFrames.put(newName, this.currentFrames.remove(oldName)); | ||||
| 		this.currentSequences.put(newName, this.currentSequences.remove(oldName)); | ||||
| 		return true; | ||||
| 	} | ||||
| 	 | ||||
| 	public ArrayList<String> getChannels() { | ||||
| 		return channels; | ||||
| 	} | ||||
| 	 | ||||
| 	/** | ||||
| 	 * Returns the current frame on "default" channel. | ||||
| 	 * @return | ||||
| 	 */ | ||||
| 	public float getCurrentFrame() { | ||||
| 		return currentframe; | ||||
| 		return currentFrames.get("default"); | ||||
| 	} | ||||
| 	 | ||||
| 	/** | ||||
| 	 * Returns the frame on "channel". | ||||
| 	 * @param channel | ||||
| 	 * @return | ||||
| 	 */ | ||||
| 	public float getCurrentFrame(String channel) { | ||||
| 		return currentFrames.get(channel); | ||||
| 	} | ||||
| 	 | ||||
| 	public String getCurrentSequence() { | ||||
| 		return currentSequence; | ||||
| 		return currentSequences.get("default"); | ||||
| 	} | ||||
| 	 | ||||
| 	/** | ||||
| 	 * Returns the current sequence on "channel" | ||||
| 	 * @param channel | ||||
| 	 * @return | ||||
| 	 */ | ||||
| 	public String getCurrentSequence(String channel) { | ||||
| 		return currentSequences.get(channel); | ||||
| 	} | ||||
| 	 | ||||
| } | ||||
| @ -99,8 +99,9 @@ public class RenderingSystem extends EntitySystem { | ||||
| 		batch.begin(); | ||||
| 		for (int i = 0; i < entities.size(); i++) { | ||||
| 			CRenderedObject renderedObject = rom.get(entities.get(i)); | ||||
| 			SpriteSequence currSequence = renderedObject.getSequence(renderedObject.getCurrentSequence()); | ||||
| 			int currFrame = (int) Math.floor(renderedObject.getCurrentFrame()); | ||||
| 			for (String channel : renderedObject.getChannels()) { | ||||
| 				SpriteSequence currSequence = renderedObject.getSequence(renderedObject.getCurrentSequence(channel)); | ||||
| 				int currFrame = (int) Math.floor(renderedObject.getCurrentFrame(channel)); | ||||
| 				Sprite currSprite = currSequence.getSprite(currFrame); | ||||
| 	 | ||||
| 				CPhysics physics = pm.get(entities.get(i)); | ||||
| @ -115,6 +116,7 @@ public class RenderingSystem extends EntitySystem { | ||||
| 				float nextFrame = renderedObject.getCurrentFrame() + deltaTime * currSequence.getPlayspeed(); | ||||
| 				renderedObject.setCurrentFrame(nextFrame % currSequence.frameCount()); | ||||
| 			} | ||||
| 		} | ||||
| 		batch.end(); | ||||
| 	} | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Allexit
						Allexit