package com.akjava.gwt.bvh.client.poseframe;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import com.akjava.gwt.three.client.gwt.boneanimation.AngleAndPosition;
import com.akjava.gwt.three.client.gwt.boneanimation.AnimationBonesData;
import com.akjava.gwt.three.client.js.math.Vector3;
public class PoseFrameData {
List<AngleAndPosition> matrixs;//for current bone
private List<Vector3> positions;//relate-pos,+bonePos & multiply angles -> matrixs
public List<Vector3> getPositions() {
return positions;
}
public void setPositions(List<Vector3> positions) {
this.positions = positions;
}
public List<Vector3> getAngles() {
return angles;
}
public void setAngles(List<Vector3> angles) {
this.angles = angles;
}
private List<Vector3> angles;
/*
List<Vector3> ikTargetPositions;
List<String> ikTargetNames;
*/
public List<AngleAndPosition> getAngleAndMatrixs() {
return matrixs;
}
public void setAngleAndMatrixs(List<AngleAndPosition> matrixs) {
this.matrixs = matrixs;
}
private Map<String,Vector3> ikTargetPositionMap=new LinkedHashMap<String,Vector3>();
/**
* stop store ik pos anymore because usually on select initilize ikpos
* @deprecated
* @param name
* @param pos
*/
public Map<String, Vector3> getIkTargetPositionMap() {
return ikTargetPositionMap;
}
/**
* @deprecated
* @param name
* @param pos
*/
public void setIkTargetPositionMap(Map<String, Vector3> ikTargetPositionMap) {
this.ikTargetPositionMap = ikTargetPositionMap;
}
/**
* @deprecated
* @param name
* @param pos
*/
public Vector3 getIkTargetPosition(String name){
return ikTargetPositionMap.get(name);
}
/**
* @deprecated
* @param name
* @param pos
*/
public void setIkTargetPosition(String name,Vector3 pos){
ikTargetPositionMap.put(name,pos);
}
public PoseFrameData(List<AngleAndPosition> matrixs,Map<String, Vector3> ikTargetPositionMap){
this.matrixs=matrixs;
this.ikTargetPositionMap=ikTargetPositionMap;
}
/*
public List<String> getIkTargetNames() {
return ikTargetNames;
}
public void setIkTargetNames(List<String> ikTargetNames) {
this.ikTargetNames = ikTargetNames;
}
*/
public PoseFrameData(){}
public PoseFrameData clone(){
List<AngleAndPosition> matrixs=AnimationBonesData.cloneAngleAndMatrix(this.matrixs);
List<Vector3> ags=new ArrayList<Vector3>();
for(Vector3 vec:angles){
ags.add(vec.clone());
}
List<Vector3> pos=new ArrayList<Vector3>();
for(Vector3 vec:positions){
pos.add(vec.clone());
}
Map<String,Vector3> ikData=new LinkedHashMap<String,Vector3>();
for(String key:ikTargetPositionMap.keySet()){
ikData.put(key, ikTargetPositionMap.get(key));
}
PoseFrameData pdata= new PoseFrameData(matrixs,ikData);
pdata.setAngles(ags);
pdata.setPositions(pos);
return pdata;
}
}