a
    V$c                     @   s   d dl mZmZmZmZmZ d dlZd dlZG dd deZ	G dd deZ
G dd deZG d	d
 d
eZG dd deZG dd deZdS )    )divisionabsolute_importwith_statementprint_functionunicode_literalsNc                   @   s$   e Zd Zdd Zdd Zdd ZdS )Linearc                 C   s   || | _ || _|| _d S Ndurationy0y1selfx0r   x1r    r   renpy/gl2\live2dmotion.py__init__   s    
zLinear.__init__c                 C   s    || j  }| j| j| j |  S r   r	   )r   tdoner   r   r   get$   s    
z
Linear.getc                 C   s   dS Nr   r   r   r   r   r   r   wait(   s    zLinear.waitN__name__
__module____qualname__r   r   r   r   r   r   r   r      s   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )Stepc                 C   s   || | _ || _|| _d S r   r	   r   r   r   r   r   .   s    
zStep.__init__c                 C   s   | j S r   )r   r   r   r   r   r   4   s    zStep.getc                 C   s   t | j| dS N        maxr
   r   r   r   r   r   7   s    z	Step.waitNr   r   r   r   r   r   ,   s   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )InvStepc                 C   s   || | _ || _|| _d S r   r	   r   r   r   r   r   =   s    
zInvStep.__init__c                 C   s   | j S r   )r   r   r   r   r   r   C   s    zInvStep.getc                 C   s   t | j| dS r   r!   r   r   r   r   r   F   s    zInvStep.waitNr   r   r   r   r   r#   ;   s   r#   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )Bezierc	           	      C   sJ   || | _ d| _|| | _|| | _|| | _|| _|| _|| _|| _d S r   )	r
   r   r   x2x3r   r   y2y3)	r   r   r   r   r   r%   r'   r&   r(   r   r   r   r   L   s    



zBezier.__init__c                    s^   || j    fdd}|| j| j}|| j| j}|| j| j}|||}|||}|||S )Nc                    s   | ||     S r   r   )abr   r   r   lerp\   s    zBezier.get.<locals>.lerp)r
   r   r   r'   r(   )r   r   r,   p01p12p23p012p123r   r+   r   r   Y   s    


z
Bezier.getc                 C   s   dS r   r   r   r   r   r   r   h   s    zBezier.waitNr   r   r   r   r   r$   J   s   r$   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )Motionc                 C   s"  || _ tj|}t|}W d    n1 s20    Y  |d d | _i | _i | _d}|d D ]}|d }|d }	|d }
|
d}|
d}g }d}|
r|
d}|dkr|
d}|
d}|	t
|||| n|d	krB|
d}|
d}|
d}|
d}|
d}|
d}|	t|||||||| np|d
krv|
d}|
d}|	t|||| n<|dkr|
d}|
d}|	t|||| ntd|}|}||d j7 }q|| jk r|	t||| j| || j||	f< |d||d|f| j||	f< qbd S )NMetaDurationr   CurvesTargetIdSegmentsr             zUnknown kind.
FadeInTimeFadeOutTime)filenamerenpyloaderloadjsonr
   curvesfadespopappendr   r$   r   r#   	Exceptionr   )r   r?   fadeinfadeoutfjycurvetargetnamesr   r   segmentscurve_durationkindxr   r   r%   r'   r   r   r   r   n   s^    (



















zMotion.__init__c                 C   s(  || j kr| j }n
|| j  }i }| j D ]\}}| j| \}}	|sHd}|sPd}	d}
||k rjt|
|| }
|| j |	 krt|
d|| j |	  |	  }
|dur|	dkrt|
d||	  }
nd}
t|
d}
|}d}|D ].}||j kr|
||f||<  q*||j 8 }q|dur*|j }|
||f||< q*|S )z
        Returns a dictionary where the keys are the type of parameter and the
        parameter name, and the values are the blend factor and value.
        r          ?Nr   )r
   rD   itemsrE   minr"   r   )r   stfade_st
do_fade_indo_fade_outrvkrR   rI   rJ   factorr   ir   r   r   r      s>    



z
Motion.getc                 C   s   || j  }d}| j D ]\}}| j| d }|s6d}d}	|| j | krdt|	d|| j |  |  }	|dur|dkrt|	d||  }	nd}	t|	d}	|	dkrq|}
|D ],}|
|j krt|||
} q|
|j 8 }
qq|dkrd}|S )zg
        Returns how much time should pass until this displayable needs to be
        redrawn.
        g     @r9   r   rV   Nr    )r
   rD   rW   rE   rX   r"   r   )r   rY   rZ   r[   r\   r]   r^   rR   rJ   r_   r   r`   r   r   r   r      s2    


zMotion.waitNr   r   r   r   r   r2   l   s   J9r2   c                   @   s$   e Zd ZdZdZdd Zdd ZdS )
NullMotionz,
    A motion that is added by default,
    rV   c                 C   s   i S r   r   r   rY   rZ   r[   r\   r   r   r   r   (  s    zNullMotion.getc                 C   s   t d| dS )NrV   r   )r"   rb   r   r   r   r   +  s    zNullMotion.waitN)r   r   r   __doc__r
   r   r   r   r   r   r   ra   !  s   ra   )
__future__r   r   r   r   r   rC   r@   objectr   r   r#   r$   r2   ra   r   r   r   r   <module>   s   " 6