public Rbfx_RandomBoxes(Node RootNode) { var boxesNode = RootNode.CreateChild("Boxes"); boxesNode.SetTemporary(true); const int numObjects = 2000; var boxModel = RootNode.Context.Cache.GetResource <Urho3DNet.Model>("Models/Box.mdl"); //var boxMaterial = RootNode.Context.Cache.GetResource<Material>("Materials/Stone.xml"); var boxMaterial = Material_Ext.TransParentMaterial(new Color(1, 0, 0, .5f)); for (var i = 0; i < numObjects; ++i) { Node boxNode = new Node(RootNode.Context); boxNode.Name = "Box" + i.ToString("00"); boxesNode.AddChild(boxNode, 0); boxNode.Position = new Vector3(Shared_Utility.Randoms.Next(0, 200f) - 100f, Shared_Utility.Randoms.Next(0, 200f) - 100f, Shared_Utility.Randoms.Next(0, 200f) - 100f); //Orient using random pitch, yaw and roll Euler angles boxNode.Rotation = new Quaternion(Shared_Utility.Randoms.Next(0, 360.0f), Shared_Utility.Randoms.Next(0, 360.0f), Shared_Utility.Randoms.Next(0, 360.0f)); var boxObject = boxNode.CreateComponent <StaticModel>(); boxObject.SetModel(boxModel); boxObject.SetMaterial(boxMaterial); boxObject.CastShadows = true; boxNode.CreateComponent <RotateObject>(); var basenode = boxNode.CreateComponent <CustomNodeComponent>(); basenode.OriginalPosition = new Vector3(5, 10, 5); basenode.OriginalMaterial = boxMaterial; } }
public void DrawLine(Engine_Point position, Engine_Point vector, Color color, Node Parent) { var linechild = Parent.CreateChild("Line"); var cusLine = linechild.CreateComponent <CustomGeometry>(); cusLine.BeginGeometry(0, PrimitiveType.LineList); var mat = Material_Ext.noLitFromColor(color, true); // mat.FillMode = FillMode.FillWireframe; cusLine.SetMaterial(mat); cusLine.DefineVertex(vector.ToVec3()); cusLine.DefineColor(color); cusLine.Commit(); linechild.Position = position.ToVec3(); }
private async void DisplaceAll(Node selected, string name) { var pos = selected.Position; var childs = selected.GetChildren(); foreach (var node in childs) { if (!node.Name.ToLower().Contains(name)) { continue; } var cuscmp = node.GetComponent <CustomNodeComponent>(); if (cuscmp == null) { cuscmp = new CustomNodeComponent(Context); cuscmp.OriginalPosition = node.Position; node.AddComponent(cuscmp, 1, CreateMode.Local); } var chpos = node.Position; var dir = selected.Position - chpos; dir.Normalize(); var dis = chpos.DistanceToPoint(selected.Position); var rpos = new Vector3(Randoms.Next(0, 200f) - 100f, Randoms.Next(0, 200f) - 100f, Randoms.Next(0, 200f) - 100f); // Orient using random pitch, yaw and roll Euler angles //var rrot = new Quaternion(Randoms.Next(0, 360.0f), Randoms.Next(0, 360.0f), Randoms.Next(0, 360.0f)); var move = node.GetComponent <MoveObject>(); if (move == null) { move = node.CreateComponent <MoveObject>(); } if (cuscmp.OriginalPosition == node.Position) { move.TargetPos = rpos; if (cuscmp.OriginalMaterial == null) { cuscmp.OriginalMaterial = node.GetComponents().Where(o => o is StaticModel).Cast <StaticModel>()?.FirstOrDefault().GetMaterial(); } node.GetComponents().Where(o => o is StaticModel).Cast <StaticModel>().ForEach(o => o.SetMaterial(Material_Ext.SetMaterialFromColor(Color.Red, true))); } else { move.TargetPos = cuscmp.OriginalPosition; node.GetComponents().Where(o => o is StaticModel).Cast <StaticModel>().ForEach(o => o.SetMaterial(cuscmp.OriginalMaterial)); } } }
public void CreateCustomShape2(Serializable.Engine_Geometry geom) { Logger.Log($"Generating Geometry [{geom.Name}]"); if (geom.Engine_Faces.Count == 0) { Logger.Log($"Geometry: [{geom.Name}] has no faces", "", Logger.ErrorType.Warrning); return; } var geonode = RootNode.CreateChild(geom.Name); geonode.Scale(geom.Flip.ToVec3()); if (geom.Rotation != null) { geonode.Rotate(new Quaternion(geom.Rotation.ToVec3())); } float scaleValue = (float)DynConstants.FeettoMeter; geonode.Scale(new Vector3(scaleValue, scaleValue, scaleValue)); geom.GenerateNormals(); if (!geom.GenerateTangents()) { var failChild = geonode.CreateChild($"{geom.Name} Failed"); failChild.Position = geom.Position.ToVec3(); var model = Cache.GetResource <Model>("Models/Box.mdl"); var stcomp = failChild.CreateComponent <StaticModel>(); stcomp.SetModel(model); return; } var faceColorGroups = geom.Engine_Faces.GroupBy(o => o.FaceColor.ToString()); string dir = System.IO.Path.GetDirectoryName(geom.FileName); var files = System.IO.Directory.GetFiles(dir).ToList(); foreach (var faceColorGroup in faceColorGroups) { var facechild = geonode.CreateChild("Face_Color"); Material mat = null; var faceColor = faceColorGroup.ElementAt(0).FaceColor; if (faceColor.L != 1) { mat = Material_Ext.TransParentMaterial(faceColor.ToColor()); } else { mat = Material_Ext.ColoredMaterial(faceColor.ToColor()); } mat.CullMode = geom.GeoCullModel; #if false var faceColor = faceColorGroup.ElementAt(0).FaceColor.ToColor(); // mat = RootNode.Context.Cache.GetResource<Material>("Materials/Stone.xml"); if (!files.Any(o => o.Contains(faceColor.ToString()))) { if (faceColor.ToVector4().W != 1) { mat = Material_Ext.TransParentMaterial(faceColor); } else { mat = Material_Ext.ColoredMaterial(faceColor); } mat.CullMode = geom.GeoCullModel; var isSaved = mat.SaveFile(dir + "\\" + mat.Name); } mat = Cache.GetResource <Material>(dir + "\\" + faceColor.ToString() + ".xml"); #endif var cus = facechild.CreateComponent <CustomNodeComponent>(); cus.OriginalMaterial = mat; var cusGeo = facechild.CreateComponent <CustomGeometry>(); cusGeo.CastShadows = true; cusGeo.BeginGeometry(0, PrimitiveType.TriangleList); cusGeo.SetMaterial(mat); Logger.Log("Begin Geometry"); foreach (var face in faceColorGroup) { var triangles = face.EngTriangles; var trianglesCount = face.EngTriangles.Count; for (int triIndex = 0; triIndex < trianglesCount; triIndex++) { var triangle = triangles[triIndex]; var triPoints = triangle.GetPoints(); foreach (var engpoint in triPoints) { cusGeo.DefineVertex(engpoint.EngPosition.ToVec3()); cusGeo.DefineNormal(engpoint.EngNormal.ToVec3()); cusGeo.DefineTexCoord(engpoint.EngTexture.ToVec2()); cusGeo.DefineTangent(engpoint.EngTangent.ToVec4()); } } } cusGeo.Commit(); Logger.Log("End Geometry"); } }
void Reload() { if (geom != null && !geom.IsZoneDirty()) { geom.Remove(); } if (Node == null || Node.IsDirty()) { return; } geom = Node.CreateComponent <CustomGeometry>(); geom.BeginGeometry(0, PrimitiveType.LineList); geom.SetMaterial(Material_Ext.noLitFromColor(color, true)); var halfSize = Size / 2; for (int i = -halfSize; i <= halfSize; i++) { if (i % 5 == 0) { continue; } //x geom.DefineVertex(new Vector3(i, 0, -halfSize) * Scale); geom.DefineColor(Color); geom.DefineVertex(new Vector3(i, 0, halfSize) * Scale); geom.DefineColor(Color); //z geom.DefineVertex(new Vector3(-halfSize, 0, i) * Scale); geom.DefineColor(Color); geom.DefineVertex(new Vector3(halfSize, 0, i) * Scale); geom.DefineColor(Color); } geom.Commit(); geom = Node.CreateComponent <CustomGeometry>(); geom.BeginGeometry(0, PrimitiveType.LineList); geom.SetMaterial(0, Material_Ext.noLitFromColor(Color.White, true)); for (int i = -halfSize; i <= halfSize; i++) { if (i % 5 != 0) { continue; } //x geom.DefineVertex(new Vector3(i, 0, -halfSize) * Scale); geom.DefineColor(Color); geom.DefineVertex(new Vector3(i, 0, halfSize) * Scale); geom.DefineColor(Color); //z geom.DefineVertex(new Vector3(-halfSize, 0, i) * Scale); geom.DefineColor(Color); geom.DefineVertex(new Vector3(halfSize, 0, i) * Scale); geom.DefineColor(Color); } geom.Commit(); }