using System;
using System.Collections.Generic;
using System.IO;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;
using TDCG;
//css_reference Microsoft.DirectX.dll;
//css_reference Microsoft.DirectX.Direct3D.dll;
//css_reference Microsoft.DirectX.Direct3DX.dll;

namespace TDCG.Proportion
{
    public class CsA_DivB : IProportion
    {
        Dictionary<string, TPONode> nodes;
        public Dictionary<string, TPONode> Nodes { set { nodes = value; }}

        public void Execute()
        {
            TPONode node;

            node = nodes["W_Hips"];
            node.RotateX(Geometry.DegreeToRadian(3.00F));

            node = nodes["W_LeftUpLeg"];
            node.Scale(1.00F, 1.04F, 1.00F);
            node.Move(0.04F, 0.00F, 0.20F);

            node = nodes["W_LeftUpLegRoll"];
            node.Scale1(0.92F, 1.04F, 0.92F);
            node.Move(0.08F, 0.00F, 0.20F);

            node = nodes["W_LeftLeg"];
            node.Scale(1.04F, 1.24F, 1.04F);
            node.RotateX(Geometry.DegreeToRadian(4.00F));
            node.Move(0.00F, 0.24F, 0.04F);

            node = nodes["W_LeftLegRoll"];
            node.Scale1(0.88F, 1.24F, 0.88F);
            node.Move(0.04F, 0.00F, 0.04F);

            node = nodes["W_LeftFoot"];
            node.Scale(0.76F, 0.76F, 0.76F);
            node.RotateY(Geometry.DegreeToRadian(6.00F));

            node = nodes["W_RightUpLeg"];
            node.Scale(1.00F, 1.03F, 1.00F);
            node.Move(-0.04F, 0.00F, 0.20F);

            node = nodes["W_RightUpLegRoll"];
            node.Scale1(0.92F, 1.03F, 0.92F);
            node.Move(0.08F, 0.00F, 0.20F);

            node = nodes["W_RightLeg"];
            node.Scale(1.04F, 1.27F, 1.04F);
            node.RotateX(Geometry.DegreeToRadian(4.00F));
            node.Move(0.00F, 0.24F, 0.04F);

            node = nodes["W_RightLegRoll"];
            node.Scale1(0.88F, 1.27F, 0.88F);
            node.Move(-0.04F, 0.00F, 0.04F);

            node = nodes["W_RightFoot"];
            node.Scale(0.76F, 0.76F, 0.76F);
            node.RotateY(Geometry.DegreeToRadian(-6.00F));

            node = nodes["W_Spine_Dummy"];
            node.Scale1(1.04F, 1.00F, 1.04F);

            node = nodes["W_Spine1"];
            node.Scale1(0.96F, 0.80F, 1.00F);

            node = nodes["W_Spine2"];
            node.Scale1(0.80F, 0.80F, 0.84F);

            node = nodes["W_Spine3"];
            node.Scale1(0.88F, 1.00F, 0.88F);

            node = nodes["W_RightShoulder"];
            node.Scale1(0.40F, 1.00F, 0.64F);
            node.RotateZ(Geometry.DegreeToRadian(25.00F));

            node = nodes["W_RightArm"];
            node.Scale(1.08F, 0.96F, 0.96F);
            node.RotateZ(Geometry.DegreeToRadian(14.00F));
            node.Move(0.00F, 0.36F, 0.00F);

            node = nodes["W_RightHand"];
            node.Scale(0.80F, 0.80F, 0.80F);

            node = nodes["W_LeftShoulder"];
            node.Scale1(0.40F, 1.00F, 0.64F);
            node.RotateZ(Geometry.DegreeToRadian(-25.00F));

            node = nodes["W_LeftArm"];
            node.Scale(1.08F, 0.96F, 0.96F);
            node.RotateZ(Geometry.DegreeToRadian(-14.00F));
            node.Move(0.00F, 0.36F, 0.00F);

            node = nodes["W_LeftHand"];
            node.Scale(0.80F, 0.80F, 0.80F);

            node = nodes["W_Neck"];
            node.Scale1(0.88F, 0.88F, 0.88F);
            node.RotateX(Geometry.DegreeToRadian(-5.50F));
            node.Move(0.00F, 0.20F, 0.00F);

            node = nodes["Head"];
            node.Scale(0.98F, 0.98F, 0.98F);
            node.RotateX(Geometry.DegreeToRadian(5.50F));

            node = nodes["Chichi_Right1"];
            node.Scale(0.98F, 0.96F, 1.00F);
            node.RotateX(Geometry.DegreeToRadian(-4.00F));
            node.Move(0.00F, 0.40F, -0.32F);

            node = nodes["Chichi_Right3"];
            node.Scale(1.00F, 1.00F, 0.96F);

            node = nodes["Chichi_Left1"];
            node.Scale(0.98F, 0.96F, 1.00F);
            node.RotateX(Geometry.DegreeToRadian(-4.00F));
            node.Move(0.00F, 0.40F, -0.32F);

            node = nodes["Chichi_Left3"];
            node.Scale(1.00F, 1.00F, 0.96F);

            node = nodes["skirt_LeftB01"];
            node.Scale(1.12F, 1.08F, 1.12F);

            node = nodes["skirt_RightB01"];
            node.Scale(1.12F, 1.08F, 1.12F);

            node = nodes["skirt_RightS01"];
            node.Scale(1.12F, 1.08F, 1.12F);

            node = nodes["skirt_RightF01"];
            node.Scale(1.12F, 1.08F, 1.12F);

            node = nodes["skirt_LeftF01"];
            node.Scale(1.12F, 1.08F, 1.12F);

            node = nodes["skirt_LeftS01"];
            node.Scale(1.12F, 1.08F, 1.12F);
        }
    }
}
