using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using _2DGAMELIB;

namespace SlaveMatrix
{
    public struct sep
    {
        public Ele Sta;

        public Ele Ele;

        public ShapePart ShapePart;

        public List<int> Path;

        public Vector2D Pos;
    }

    //three subclasses: one for bukkake, kiss marks, and whip marks
    public class Stamp
    {
    	public ModeEventDispatcher Med;

    	public RenderArea Are;

    	public Character Cha;

    	public Body Bod;

    	protected EleD EleD;

    	protected List<sep> sta = new List<sep>();

    	protected const int Max = 33;

    	protected ShapePart p;

    	protected Color2 c2;

    	protected Ele he;

    	protected sep sep;

    	public virtual void Draw(RenderArea Are)
    	{
    	}

    	public virtual void Add(Vector2D cp, Color hc)
    	{
    	}

    	public Stamp()
    	{
    	}

    	public Stamp(ModeEventDispatcher Med, RenderArea Are, Character Cha, Body Bod, EleD EleD)
    	{
    		this.Med = Med;
    		this.Are = Are;
    		this.Cha = Cha;
    		this.Bod = Bod;
    		this.EleD = EleD;
    	}

    	public virtual void Dispose()
    	{
    		foreach (sep stum in sta)
    		{
    			stum.Sta.Dispose();
    		}
    	}

    	public void Clear()
    	{
    		foreach (sep stum in sta)
    		{
    			stum.Sta.Dispose();
    		}
    		sta.Clear();
    	}

    	public void LegClear()
    	{
    		sep[] array = sta.Where((sep e) => e.Ele is 腿_人 || e.Ele is Leg_人 || e.Ele is 足_人).ToArray();
    		for (int i = 0; i < array.Length; i++)
    		{
    			sep item = array[i];
    			item.Sta.Dispose();
    			sta.Remove(item);
    		}
    	}

    	public bool チェック1(Ele e)
    	{
    		if (e != null && !(e is 性器) && !(e is 肛門))
    		{
    			return !(e is Neck);
    		}
    		return false;
    	}

    	public bool チェック2(Ele e)
    	{
    		if (e != null && !(e is 手_人) && !(e is 性器) && !(e is 肛門))
    		{
    			return !(e is Neck);
    		}
    		return false;
    	}
    }
}
