public static ContourReader NewReader(ContourBlueprint blueprint)
    {
        if (blueprint == null || blueprint.material == null)
        {
            return(null);
        }
        ContourReader newReader = null;

        if (blueprint.material is ContourFaceMaterial)
        {
            newReader = new ContourFaceReader();
        }
        else if (blueprint.material is ContourLineMaterial)
        {
            newReader = new ContourLineReader();
        }
        else if (blueprint.material is ContourColliderMaterial)
        {
            newReader = new ContourColliderReader();
        }
        else if (blueprint.material is ContourAnimationMaterial)
        {
            newReader = new ContourAnimationReader();
        }
        if (newReader == null)
        {
            throw new Exception(newReader.ToString() + " creation error. " + blueprint.material.ToString() + " reading not implemented");
        }
        newReader.TryReadBlueprint(blueprint);
        // Return created reader
        //newReader.blueprint = blueprint;
        return(newReader);
    }
Esempio n. 2
0
    private void UpdateColliderComponent()
    {
        // Create or get collider component with correct type
        ContourColliderReader colliderReader = (readers != null && readers.Count > 0) ? readers[0] as ContourColliderReader : null;
        Type colliderType = colliderReader != null ? colliderReader.ColliderType : null;

        // Delete existing collider if it doesn't match blueprint's needs
        if (collider2D != null)
        {
            if (collider2D.GetType() != colliderType)
            {
                DestroyImmediate(collider2D);
                collider2D = null;
            }
        }
        // Add collider if needed
        if (collider2D == null)
        {
            if (colliderType != null && typeof(Collider2D).IsAssignableFrom(colliderType))
            {
                collider2D = gameObject.AddComponent(colliderType) as Collider2D;
            }
        }
        // Set collider parameters
        if (collider2D != null)
        {
            collider2D.isTrigger = colliderReader.IsTrigger;
        }
    }
Esempio n. 3
0
    protected override bool CanBuildFrom(ContourReader reader)
    {
        if (reader == null || reader is ContourColliderReader == false)
        {
            return(false);
        }
        if (collider2D == null)
        {
            return(true);
        }
        ContourColliderReader colliderReader = reader as ContourColliderReader;

        return(colliderReader.ColliderType == collider2D.GetType() && colliderReader.IsTrigger == collider2D.isTrigger);
    }
Esempio n. 4
0
 public override void RebuildAll()
 {
     // Reread all blueprints
     ResetReaders();
     // Set collider shape
     UpdatePositions();
     // Set collider parameters (all readers should have the same parameter so we get values from the first one)
     if (readers != null && readers.Count > 0 && readers[0] != null)
     {
         ContourColliderReader topReader = readers[0] as ContourColliderReader;
         collider2D.isTrigger      = topReader.IsTrigger;
         collider2D.sharedMaterial = topReader.PhysicsMaterial;
     }
 }
Esempio n. 5
0
 protected override void UpdatePositions()
 {
     // Set collider shape
     if (collider2D is EdgeCollider2D)
     {
         // Edge collider: can build only one contour (one continuous line)
         EdgeCollider2D edgeCollider = collider2D as EdgeCollider2D;
         if (readers.Count == 1 && readers[0] is ContourColliderReader)
         {
             ContourColliderReader colliderReader = readers[0] as ContourColliderReader;
             edgeCollider.SetPoints(colliderReader.Positions);
         }
         else
         {
             edgeCollider.SetPoints(new List <Vector2>());
         }
     }
     else if (collider2D is PolygonCollider2D)
     {
         // Polygon collider: can build several contours (but only loops)
         PolygonCollider2D polygonCollider = collider2D as PolygonCollider2D;
         int readerCount = readers.Count;
         polygonCollider.pathCount = readerCount;
         for (int ri = 0; ri < readerCount; ri++)
         {
             if (readers[ri] != null && readers[ri] is ContourColliderReader)
             {
                 ContourColliderReader colliderReader = readers[ri] as ContourColliderReader;
                 polygonCollider.SetPath(ri, colliderReader.Positions);
             }
             else
             {
                 polygonCollider.SetPath(ri, new Vector2[0]);
             }
         }
     }
 }