package com.lfk.justweengine.drawable.Bone; import com.lfk.justweengine.engine.Engine; import java.util.HashMap; import java.util.Map; /** * 骨骼精灵组 * Created by Administrator on 2016/4/30. */ public class BoneGroupSprite { private Map<String, BoneSprite> spriteMap; private Map<String, BoneBuilder.BoneAnimGroup> boneAnimGroup; private BoneBuilder.BoneBuilderConfig config; public Map<String, BoneSprite> getSpriteMap() { return spriteMap; } public BoneSprite getBoneSprite(String name) { return spriteMap.get(name); } public void runFixedAnimation(String groupName) { BoneBuilder.BoneAnimGroup group = boneAnimGroup.get(groupName); for (int i = 0; i < group.group.length; i++) { BoneBuilder.BoneAnimItem item = group.group[i]; item.boneSprite.fixedAnimation(item.animName); } } /** * 骨骼构建内部类 */ public static class BoneBuilder { public class BoneBuilderConfig { float positionX, positionY; } public class BoneAnimGroup { BoneAnimItem[] group; String groupName; public BoneAnimGroup(String groupName, BoneAnimItem... items) { this.groupName = groupName; this.group = new BoneAnimItem[items.length]; for (int i = 0; i < group.length; i++) { this.group[i] = items[i]; } } } public class BoneAnimItem { BoneSprite boneSprite; String animName; public BoneAnimItem(BoneSprite boneSprite, String animName) { this.boneSprite = boneSprite; this.animName = animName; } } public final Engine engine; private int currentNum; private BoneBuilderConfig config; private Map<String, BoneSprite> boneSprites; private Map<String, BoneAnimGroup> boneAnimGroup; public BoneBuilder(Engine engine) { this.engine = engine; this.currentNum = 0; this.boneSprites = new HashMap<>(); this.boneAnimGroup = new HashMap<>(); this.config = new BoneBuilderConfig(); } public BoneBuilder setPosition(float x, float y) { this.config.positionX = x; this.config.positionY = y; return this; } public BoneBuilder addBone(String name, BoneSprite sprite) { sprite.s_position.x += config.positionX; sprite.s_position.y += config.positionY; this.boneSprites.put(name, sprite); this.currentNum++; return this; } public BoneBuilder deleteBone(String name) { this.boneSprites.remove(name); this.currentNum--; return this; } public BoneBuilder addBoneAnimGroup(String name, BoneAnimGroup group) { this.boneAnimGroup.put(name, group); return this; } public BoneGroupSprite create() { BoneGroupSprite sprite = new BoneGroupSprite(); for (String name : boneSprites.keySet()) { boneSprites.get(name).setParentGroup(sprite); } sprite.spriteMap = new HashMap<>(boneSprites); sprite.boneAnimGroup = new HashMap<>(boneAnimGroup); sprite.config = config; return sprite; } } }