public override Vector3 CalcVectorField(DynamicFieldModel model, int posIndex, Vector3 pos, out Color primaryColor) { Vector3 res = Vector3.zero; primaryColor = Color.white; foreach (var s in this.AllSpans) { if (s.LatestAlpha > 0.0f) { if (s.FieldCache == null) { s.FieldCache = new Vector3[model.CellCount]; for (int c = 0; c < model.CellCount; c++) { var cPos = model.FieldsCells.Array[c].Pos; var cField = Vector3.zero; for (int i = 1; i < s.Line.Points.Length; i++) { var fm = s.Line.Points [i - 1]; var to = s.Line.Points [i]; var fld = DynamicFieldModel.ChakraFieldAlongLineV4(cPos, fm, to, false); cField += fld; } s.FieldCache [c] = cField; } } primaryColor = ((s == this.SpanCrownToDanTien) ? Color.white : Color.green); res += s.FieldCache [posIndex] * Mathf.Pow(s.LatestAlpha, 0.75f); } } return(res); }
public override Vector3 CalcVectorField(DynamicFieldModel model, int posIndex, Vector3 pos, out Color primaryColor) { Vector3 res = Vector3.zero; primaryColor = Color.white; foreach (var ps in this.AllSpans) { if (ps.LatestOverallAlpha > 0.0f) { if (ps.FlowFieldCache != null) { // ready to go } else { ps.FlowFieldCache = new Vector3[model.CellCount]; for (int c = 0; c < model.CellCount; c++) { var cPos = model.FieldsCells.Array [c].Pos; var cField = Vector3.zero; for (int i = 1; i < ps.Line.Points.Length; i++) { var fm = ps.Line.Points [i - 1]; var to = ps.Line.Points [i]; var fld = DynamicFieldModel.ChakraFieldAlongLineV4(cPos, fm, to, false); cField += fld; } ps.FlowFieldCache [c] = cField; } } res += ps.FlowFieldCache [posIndex] * ps.LatestOverallAlpha; } } return(res); }