Project: bml_lib License: BSD Dependencies: Used by: |
bml_lib/src/edu/wpi/hri/bml/behavior/LipsBehavior.javaGo to the documentation of this file.00001 /* 00002 * Software License Agreement (BSD License) 00003 * 00004 * Copyright (c) 2010, Worcester Polytechnic Institute 00005 * All rights reserved. 00006 * 00007 * Redistribution and use in source and binary forms, with or without 00008 * modification, are permitted provided that the following conditions 00009 * are met: 00010 * 00011 * * Redistributions of source code must retain the above copyright 00012 * notice, this list of conditions and the following disclaimer. 00013 * * Redistributions in binary form must reproduce the above 00014 * copyright notice, this list of conditions and the following 00015 * disclaimer in the documentation and/or other materials provided 00016 * with the distribution. 00017 * * Neither the name of Worcester Polytechnic Institute. nor the names 00018 * of its contributors may be used to endorse or promote products 00019 * derived from this software without specific prior written permission. 00020 * 00021 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 00022 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 00023 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 00024 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 00025 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 00026 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 00027 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 00028 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 00029 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 00030 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 00031 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 00032 * POSSIBILITY OF SUCH DAMAGE. 00033 */ 00034 package edu.wpi.hri.bml.behavior; 00035 00036 import org.w3c.dom.Document; 00037 import org.w3c.dom.Element; 00038 00039 import edu.wpi.hri.bml.behavior.BehaviorEnums.BehaviorType; 00040 import edu.wpi.hri.log.Logger; 00041 import edu.wpi.hri.log.Logger.LoggerLevel; 00042 00049 public class LipsBehavior extends Behavior { 00050 00051 private static final String VISEME_ATTR = "viseme"; 00052 private static final String ARTIC_ATTR = "articulation"; 00053 private static final String FLAP_ATTR = "flapping"; 00054 00055 private final String viseme; 00056 private final float articulation; 00057 private final boolean flapping; 00058 00067 public LipsBehavior(Logger logger, Element elem) { 00068 super(logger, elem); 00069 00070 // ensure that the viseme is present 00071 if (elem.hasAttribute(VISEME_ATTR)) 00072 this.viseme = elem.getAttribute(VISEME_ATTR); 00073 else 00074 throw new IllegalArgumentException("Lips requires a viseme"); 00075 00076 // then check for articulation 00077 if (elem.hasAttribute(ARTIC_ATTR)) 00078 this.articulation = Float.parseFloat(elem.getAttribute(ARTIC_ATTR)); 00079 else 00080 this.articulation = 0.0f; 00081 00082 // finally check for flapping 00083 if (elem.hasAttribute(FLAP_ATTR)) 00084 this.flapping = Boolean.parseBoolean(elem.getAttribute(FLAP_ATTR)); 00085 else 00086 this.flapping = false; 00087 00088 this.logger.debug(LoggerLevel.BEHAVIOR, "Created ..."); 00089 } 00090 00107 public LipsBehavior(Logger logger, String id, String viseme, float artic, 00108 boolean flap, boolean required) { 00109 super(logger, id, required); 00110 if (viseme == null || viseme.isEmpty()) 00111 throw new IllegalArgumentException("Lips requires a viseme"); 00112 this.viseme = viseme; 00113 this.articulation = artic; 00114 this.flapping = flap; 00115 this.logger.debug(LoggerLevel.BEHAVIOR, "Created ..."); 00116 } 00117 00121 public String getViseme() { 00122 return viseme; 00123 } 00124 00128 public float getArticulation() { 00129 return articulation; 00130 } 00131 00135 public boolean isFlapping() { 00136 return flapping; 00137 } 00138 00139 @Override 00140 protected void appendAttributes(Document doc, Element elem) { 00141 // first always add in the viseme 00142 elem.setAttribute(VISEME_ATTR, this.viseme); 00143 00144 // then possibly the articulation 00145 if (this.articulation != 0.0f) 00146 elem.setAttribute(ARTIC_ATTR, String.valueOf(this.articulation)); 00147 00148 // and finally the flapping 00149 elem.setAttribute(FLAP_ATTR, String.valueOf(this.flapping)); 00150 } 00151 00152 @Override 00153 protected String getElementName() { 00154 return BehaviorType.LIPS.elementName; 00155 } 00156 } |