You've already forked FateViewer
Add project files.
This commit is contained in:
283
Assets/AmplifyShaderEditor/Plugins/Editor/Graphs/NodeGrid.cs
Normal file
283
Assets/AmplifyShaderEditor/Plugins/Editor/Graphs/NodeGrid.cs
Normal file
@@ -0,0 +1,283 @@
|
||||
// Amplify Shader Editor - Visual Shader Editing Tool
|
||||
// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
|
||||
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
|
||||
namespace AmplifyShaderEditor
|
||||
{
|
||||
public class NodeGrid
|
||||
{
|
||||
private bool m_debugGrid = false;
|
||||
private const float GRID_SIZE_X = 100;
|
||||
private const float GRID_SIZE_Y = 100;
|
||||
|
||||
private const float GRID_AREA_X = 1000;
|
||||
private const float GRID_AREA_Y = 1000;
|
||||
|
||||
private Dictionary<int, Dictionary<int, List<ParentNode>>> m_grid;
|
||||
|
||||
private int m_xMin = int.MaxValue;
|
||||
private int m_yMin = int.MaxValue;
|
||||
|
||||
private int m_xMax = int.MinValue;
|
||||
private int m_yMax = int.MinValue;
|
||||
|
||||
public NodeGrid()
|
||||
{
|
||||
m_grid = new Dictionary<int, Dictionary<int, List<ParentNode>>>();
|
||||
}
|
||||
|
||||
public void AddNodeToGrid( ParentNode node )
|
||||
{
|
||||
Rect pos = node.Position;
|
||||
if ( Mathf.Abs( pos.width ) < 0.001f || Mathf.Abs( pos.height ) < 0.001f )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
float initialXf = pos.x / GRID_SIZE_X;
|
||||
float initialYf = pos.y / GRID_SIZE_Y;
|
||||
|
||||
int endX = Mathf.CeilToInt( initialXf + pos.width / GRID_SIZE_X );
|
||||
int endY = Mathf.CeilToInt( initialYf + pos.height / GRID_SIZE_Y );
|
||||
|
||||
int initialX = Mathf.FloorToInt( initialXf );
|
||||
int initialY = Mathf.FloorToInt( initialYf );
|
||||
|
||||
|
||||
if ( initialX < m_xMin )
|
||||
{
|
||||
m_xMin = initialX;
|
||||
}
|
||||
|
||||
if ( initialY < m_yMin )
|
||||
{
|
||||
m_yMin = initialY;
|
||||
}
|
||||
|
||||
if ( endX > m_xMax )
|
||||
{
|
||||
m_xMax = endX;
|
||||
}
|
||||
|
||||
if ( endY > m_yMax )
|
||||
{
|
||||
m_yMax = endY;
|
||||
}
|
||||
|
||||
for ( int x = initialX; x < endX; x += 1 )
|
||||
{
|
||||
for ( int y = initialY; y < endY; y += 1 )
|
||||
{
|
||||
if ( !m_grid.ContainsKey( x ) )
|
||||
{
|
||||
m_grid.Add( x, new Dictionary<int, List<ParentNode>>() );
|
||||
|
||||
}
|
||||
|
||||
if ( !m_grid[ x ].ContainsKey( y ) )
|
||||
{
|
||||
m_grid[ x ].Add( y, new List<ParentNode>() );
|
||||
}
|
||||
|
||||
m_grid[ x ][ y ].Add( node );
|
||||
}
|
||||
}
|
||||
node.IsOnGrid = true;
|
||||
//DebugLimits();
|
||||
}
|
||||
|
||||
public void RemoveNodeFromGrid( ParentNode node, bool useCachedPos )
|
||||
{
|
||||
Rect pos = useCachedPos ? node.CachedPos : node.Position;
|
||||
if ( Mathf.Abs( pos.width ) < 0.001f || Mathf.Abs( pos.height ) < 0.001f )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
float initialXf = pos.x / GRID_SIZE_X;
|
||||
float initialYf = pos.y / GRID_SIZE_Y;
|
||||
|
||||
int endX = Mathf.CeilToInt( initialXf + pos.width / GRID_SIZE_X );
|
||||
int endY = Mathf.CeilToInt( initialYf + pos.height / GRID_SIZE_Y );
|
||||
|
||||
int initialX = Mathf.FloorToInt( initialXf );
|
||||
int initialY = Mathf.FloorToInt( initialYf );
|
||||
bool testLimits = false;
|
||||
|
||||
int xMinCount = 0;
|
||||
int xMaxCount = 0;
|
||||
|
||||
int yMinCount = 0;
|
||||
int yMaxCount = 0;
|
||||
|
||||
|
||||
for ( int x = initialX; x < endX; x += 1 )
|
||||
{
|
||||
for ( int y = initialY; y < endY; y += 1 )
|
||||
{
|
||||
if ( m_grid.ContainsKey( x ) )
|
||||
{
|
||||
if ( m_grid[ x ].ContainsKey( y ) )
|
||||
{
|
||||
m_grid[ x ][ y ].Remove( node );
|
||||
node.IsOnGrid = false;
|
||||
|
||||
if ( initialX == m_xMin && x == initialX )
|
||||
{
|
||||
testLimits = true;
|
||||
if ( m_grid[ x ][ y ].Count != 0 )
|
||||
{
|
||||
xMinCount += 1;
|
||||
}
|
||||
}
|
||||
|
||||
if ( endX == m_xMax && x == endX )
|
||||
{
|
||||
testLimits = true;
|
||||
if ( m_grid[ x ][ y ].Count != 0 )
|
||||
{
|
||||
xMaxCount += 1;
|
||||
}
|
||||
}
|
||||
|
||||
if ( initialY == m_yMin && y == initialY )
|
||||
{
|
||||
testLimits = true;
|
||||
if ( m_grid[ x ][ y ].Count != 0 )
|
||||
{
|
||||
yMinCount += 1;
|
||||
}
|
||||
}
|
||||
|
||||
if ( endY == m_yMax && y == endY )
|
||||
{
|
||||
testLimits = true;
|
||||
if ( m_grid[ x ][ y ].Count != 0 )
|
||||
{
|
||||
yMaxCount += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ( testLimits )
|
||||
{
|
||||
if ( xMinCount == 0 || xMaxCount == 0 || yMinCount == 0 || yMaxCount == 0 )
|
||||
{
|
||||
m_xMin = int.MaxValue;
|
||||
m_yMin = int.MaxValue;
|
||||
|
||||
m_xMax = int.MinValue;
|
||||
m_yMax = int.MinValue;
|
||||
foreach ( KeyValuePair<int, Dictionary<int, List<ParentNode>>> entryX in m_grid )
|
||||
{
|
||||
foreach ( KeyValuePair<int, List<ParentNode>> entryY in entryX.Value )
|
||||
{
|
||||
if ( entryY.Value.Count > 0 )
|
||||
{
|
||||
if ( entryX.Key < m_xMin )
|
||||
{
|
||||
m_xMin = entryX.Key;
|
||||
}
|
||||
|
||||
if ( entryY.Key < m_yMin )
|
||||
{
|
||||
m_yMin = entryY.Key;
|
||||
}
|
||||
|
||||
if ( entryX.Key > m_xMax )
|
||||
{
|
||||
m_xMax = entryX.Key;
|
||||
}
|
||||
|
||||
if ( entryY.Key > m_yMax )
|
||||
{
|
||||
m_yMax = entryY.Key;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// The += 1 is to maintain consistence with AddNodeToGrid() ceil op on max values
|
||||
m_xMax += 1;
|
||||
m_yMax += 1;
|
||||
}
|
||||
}
|
||||
//DebugLimits();
|
||||
}
|
||||
|
||||
public void DebugLimits()
|
||||
{
|
||||
Debug.Log( "[ " + m_xMin + " , " + m_yMin + " ] " + "[ " + m_xMax + " , " + m_yMax + " ] " );
|
||||
}
|
||||
|
||||
//pos must be the transformed mouse position to local canvas coordinates
|
||||
public List<ParentNode> GetNodesOn( Vector2 pos )
|
||||
{
|
||||
int x = Mathf.FloorToInt( pos.x / GRID_SIZE_X );
|
||||
int y = Mathf.FloorToInt( pos.y / GRID_SIZE_Y );
|
||||
|
||||
if ( m_grid.ContainsKey( x ) )
|
||||
{
|
||||
if ( m_grid[ x ].ContainsKey( y ) )
|
||||
{
|
||||
return m_grid[ x ][ y ];
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public List<ParentNode> GetNodesOn( int x, int y )
|
||||
{
|
||||
if ( m_grid.ContainsKey( x ) )
|
||||
{
|
||||
if ( m_grid[ x ].ContainsKey( y ) )
|
||||
{
|
||||
return m_grid[ x ][ y ];
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void DrawGrid( DrawInfo drawInfo )
|
||||
{
|
||||
if ( m_debugGrid )
|
||||
{
|
||||
Handles.CircleHandleCap( 0, drawInfo.InvertedZoom * ( new Vector3( drawInfo.CameraOffset.x, drawInfo.CameraOffset.y, 0f ) ), Quaternion.identity, 5,EventType.Layout );
|
||||
for ( int x = -( int ) GRID_AREA_X; x < GRID_AREA_X; x += ( int ) GRID_SIZE_X )
|
||||
{
|
||||
Handles.DrawLine( drawInfo.InvertedZoom * ( new Vector3( x + drawInfo.CameraOffset.x, drawInfo.CameraOffset.y - GRID_AREA_Y, 0 ) ), drawInfo.InvertedZoom * ( new Vector3( drawInfo.CameraOffset.x + x, drawInfo.CameraOffset.y + GRID_AREA_Y, 0 ) ) );
|
||||
}
|
||||
|
||||
for ( int y = -( int ) GRID_AREA_Y; y < GRID_AREA_X; y += ( int ) GRID_SIZE_Y )
|
||||
{
|
||||
Handles.DrawLine( drawInfo.InvertedZoom * ( new Vector3( drawInfo.CameraOffset.x - GRID_AREA_X, drawInfo.CameraOffset.y + y, 0 ) ), drawInfo.InvertedZoom * ( new Vector3( drawInfo.CameraOffset.x + GRID_AREA_X, drawInfo.CameraOffset.y + y, 0 ) ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Destroy()
|
||||
{
|
||||
foreach ( KeyValuePair<int, Dictionary<int, List<ParentNode>>> entryX in m_grid )
|
||||
{
|
||||
foreach ( KeyValuePair<int, List<ParentNode>> entryY in entryX.Value )
|
||||
{
|
||||
entryY.Value.Clear();
|
||||
}
|
||||
entryX.Value.Clear();
|
||||
}
|
||||
m_grid.Clear();
|
||||
}
|
||||
|
||||
public float MaxNodeDist
|
||||
{
|
||||
get { return Mathf.Max( ( m_xMax - m_xMin )*GRID_SIZE_X, ( m_yMax - m_yMin )*GRID_SIZE_Y ); }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6344917ce0eed6b43840632b98a2ed57
|
||||
timeCreated: 1481126956
|
||||
licenseType: Store
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
4041
Assets/AmplifyShaderEditor/Plugins/Editor/Graphs/ParentGraph.cs
Normal file
4041
Assets/AmplifyShaderEditor/Plugins/Editor/Graphs/ParentGraph.cs
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0b814c2a3cbebc047a566a92ed9d4340
|
||||
timeCreated: 1481126953
|
||||
licenseType: Store
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user