/*
* Copyright (C) 2016 Google Inc. All Rights Reserved.
*
* 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.google.android.apps.santatracker.doodles.shared;
import android.content.res.Resources;
import android.util.Log;
import java.util.HashMap;
import java.util.Map;
/**
* An actor which has multiple sprites which it can switch between.
*/
public class MultiSpriteActor extends SpriteActor {
private static final String TAG = MultiSpriteActor.class.getSimpleName();
public Map<String, AnimatedSprite> sprites;
public MultiSpriteActor(Map<String, AnimatedSprite> sprites, String selectedSpriteKey,
Vector2D position, Vector2D velocity) {
super(sprites.get(selectedSpriteKey), position, velocity);
this.sprites = sprites;
}
public void setSprite(String key) {
if (sprites.containsKey(key)) {
sprite = sprites.get(key);
} else {
Log.w(TAG, "Couldn't set sprite, unrecognized key: " + key);
}
}
/**
* A class which makes it easier to re-construct MultiSpriteActors.
*/
public static class Data {
public String key;
public int[] idList;
public int numFrames;
public Data(String key, int[] idList) {
this.key = key;
this.idList = idList;
this.numFrames = idList.length;
}
public AnimatedSprite getSprite(Resources resources) {
if (idList != null) {
return AnimatedSprite.fromFrames(resources, idList);
}
return null;
}
}
public static MultiSpriteActor create(
Data[] data, String selectedSprite, Vector2D position, Resources resources) {
Map<String, AnimatedSprite> sprites = new HashMap<>();
for (int i = 0; i < data.length; i++) {
sprites.put(data[i].key, data[i].getSprite(resources));
}
return new MultiSpriteActor(sprites, selectedSprite, position, Vector2D.get());
}
}