/*void OnDrawGizmosSelected() {
            Gizmos.color = Color.yellow;
            if(_transforms.Count>0)
                Gizmos.DrawWireCube(_center, _extents*2);
        }
    */
    public void DoAction()
    {
        Transform jupe = transform.Find("jupe");
        if (jupe!=null)
        {
            //Bounds b = getMeshBounds(jupe);
            Bounds b = jupe.GetComponent<Renderer>().bounds;//getMeshBounds(child);
            _zUpValue = b.extents.y*2;
            _extents = b.extents;
            _center = b.center;
        }
        else
        {
            Transform paroi = transform.Find("paroi");
            if (paroi!=null)
            {
                Bounds b = paroi.GetComponent<Renderer>().bounds;
                _zUpValue = b.extents.y*2;
                _extents = b.extents;
                _center = b.center;
            }

        }

        Vector3 vectDelta = new Vector3();
        switch (_lastPosition)
        {
            case PositionSpa.AboveGround :
                for (int i=0; i<_transforms.Count;i++) {
                    Transform child = (Transform)_transforms[i];
                    vectDelta.y = /*child.localPosition.z*/ - _zUpValue/2;
                    child.Translate(vectDelta);
                }
                _lastPosition=PositionSpa.HalfBurried;

            for (int i=0; i<_transformsNoPos.Count;i++) {
                ((Transform)_transformsNoPos[i]).gameObject.layer = 2;
            }
            break;
                case PositionSpa.HalfBurried :
                    for (int i=0; i<_transforms.Count;i++) {
                        Transform child = (Transform)_transforms[i];
                        vectDelta.y = /*child.localPosition.z*/ - _zUpValue/2;
                        child.Translate(vectDelta);
                    }
                    _lastPosition=PositionSpa.Burried;
            for (int i=0; i<_transformsNoPos.Count;i++) {
                ((Transform)_transformsNoPos[i]).gameObject.layer = 2;
            }
                break;
            case PositionSpa.Burried :
                for (int i=0; i<_transforms.Count;i++) {
                        Transform child = (Transform)_transforms[i];
                        vectDelta.y = /*child.localPosition.z*/ + _zUpValue;
                        child.Translate(vectDelta);
                    }
                    _lastPosition=PositionSpa.AboveGround;
            for (int i=0; i<_transformsNoPos.Count;i++) {
                ((Transform)_transformsNoPos[i]).gameObject.layer = 0;
            }
                break;
            default :
                break;
        }
        _position = _lastPosition;
    }
    public void load(BinaryReader buf)
    {
        //start
        _transforms = new ArrayList();
        _zInits = new ArrayList();
        foreach (Transform child in transform)
        {
            if(child.name.CompareTo(_maskName)==0)
                continue;
            if(child.name.CompareTo(_plageName)==0)
                continue;
            if(child.name.CompareTo(_occlusionName)==0)
                continue;
            if(child.name.CompareTo(_skirtName)==0)
            {
                //Bounds b = getMeshBounds(child);
                Bounds b = child.GetComponent<Renderer>().bounds;//getMeshBounds(child);
                _zUpValue = b.extents.y*2;
                _extents = b.extents;
            }
            if(child.name.CompareTo(_paroisName)==0)
            {
                //Bounds b = getMeshBounds(child);
                Bounds b = child.GetComponent<Renderer>().bounds;//getMeshBounds(child);
                _zUpValue = b.extents.y*2;
                _extents = b.extents;
            }
            _transforms.Add(child);
            _zInits.Add(child.localPosition.y);
            //Debug.Log ("child : "+child.name);
        }

        //load
        _lastPosition = PositionSpa.HalfBurried;
        _position = (PositionSpa)buf.ReadInt32();
        //	Debug.Log("LastPosition "+_lastPosition);
        Init (true);
        //DoAction();
    }
 public void setConfig(ArrayList config)
 {
     _position = (PositionSpa)config[0];
     _lastPosition = PositionSpa.HalfBurried;
     Init (true);
 }
    public void Init(bool fromload)
    {
        Vector3 vectDelta = new Vector3 ();
        if (_lastPosition != _position) {
            Transform jupe = transform.Find ("jupe");
            bool copy = false;
            if (jupe != null) {
            //	Bounds b = getMeshBounds (jupe);
                Bounds b = jupe.GetComponent<Renderer>().bounds;//getMeshBounds(child);
                _zUpValue = b.extents.y * 2 ;// 2;
                _extents = b.extents;
                _center = b.center;
                if(jupe.position.y<-_zUpValue/3.0f)
                    copy=true;
            }
            else
            {
                Transform paroi = transform.Find ("paroi");
                if (paroi != null) {
                    Bounds b = paroi.GetComponent<Renderer>().bounds;
                    _zUpValue = b.extents.y * 2 ;
                    _extents = b.extents;
                    _center = b.center;
                    if(paroi.position.y<-_zUpValue/3.0f)
                        copy=true;
                }
            }

            if((copy==false)|| (fromload==true))
            {
                switch (_position) {
                case PositionSpa.AboveGround:
                    switch (_lastPosition) {
                    case PositionSpa.HalfBurried:
                        for (int i = 0; i < _transforms.Count; i++) {
                            Transform child = (Transform)_transforms[i];
                            vectDelta.y = +_zUpValue / 2;
                            child.Translate (vectDelta);
                        }
                        _lastPosition = PositionSpa.AboveGround;
                        break;
                    case PositionSpa.Burried:
                        for (int i = 0; i < _transforms.Count; i++) {
                            Transform child = (Transform)_transforms[i];
                            vectDelta.y = +_zUpValue;
                            child.Translate (vectDelta);
                        }
                        _lastPosition = PositionSpa.AboveGround;
                        break;
                    default:
                        break;
                    }

                for (int i=0; i<_transformsNoPos.Count;i++) {
                    ((Transform)_transformsNoPos[i]).gameObject.layer = 0;
                }
                    break;
                case PositionSpa.HalfBurried:
                    switch (_lastPosition) {
                    case PositionSpa.AboveGround:
                        for (int i = 0; i < _transforms.Count; i++) {
                            Transform child = (Transform)_transforms[i];
                            vectDelta.y = -_zUpValue / 2;
                            child.Translate (vectDelta);
                        }
                        _lastPosition = PositionSpa.HalfBurried;
                        break;
                    case PositionSpa.Burried:
                        for (int i = 0; i < _transforms.Count; i++) {
                            Transform child = (Transform)_transforms[i];
                            vectDelta.y = +_zUpValue/2;
                            child.Translate (vectDelta);
                        }
                        _lastPosition = PositionSpa.HalfBurried;
                        break;
                    default:
                        break;
                    }
                for (int i=0; i<_transformsNoPos.Count;i++) {
                    ((Transform)_transformsNoPos[i]).gameObject.layer = 2;
                }
                    break;
                case PositionSpa.Burried:
                    switch (_lastPosition)
                    {
                    case PositionSpa.HalfBurried:
                        for (int i = 0; i < _transforms.Count; i++) {
                            Transform child = (Transform)_transforms[i];
                            vectDelta.y = -_zUpValue / 2;
                            child.Translate (vectDelta);
                        }
                        _lastPosition = PositionSpa.Burried;
                        break;
                    case PositionSpa.AboveGround:
                        for (int i = 0; i < _transforms.Count; i++) {
                            Transform child = (Transform)_transforms[i];
                            vectDelta.y = -_zUpValue;
                            child.Translate (vectDelta);
                        }
                        _lastPosition = PositionSpa.Burried;
                        break;
                    default:
                        break;
                    }
                for (int i=0; i<_transformsNoPos.Count;i++) {
                    ((Transform)_transformsNoPos[i]).gameObject.layer = 2;
                }
                    break;
                default:
                    break;
                }
            }
        }
        _lastPosition = _position;
    }