public static async System.Threading.Tasks.Task <GamePlay.Actor.GActor> CreateParticleActor2( [Editor.Editor_RNameType(Editor.Editor_RNameTypeAttribute.Mesh)] RName gmsName, [Editor.Editor_RNameMacrossType(typeof(EngineNS.Bricks.Particle.McParticleEffector))] RName macross, bool IdentityDrawTransform) { var rc = CEngine.Instance.RenderContext; // ParticleActor var actor = new GamePlay.Actor.GActor(); actor.ActorId = Guid.NewGuid(); var placement = new GamePlay.Component.GPlacementComponent(); actor.Placement = placement; var particleComp = new Bricks.Particle.GParticleComponent(); var particleInit = new Bricks.Particle.GParticleComponent.GParticleComponentInitializer(); particleInit.MeshName = gmsName; particleInit.MacrossName = macross; await particleComp.SetInitializer(rc, actor, actor, particleInit); particleComp.IsIdentityDrawTransform = true; actor.AddComponent(particleComp); return(actor); }
public async System.Threading.Tasks.Task <bool> Init(Graphics.CGfxMaterialInstance material, float halfWidth = 0.1F) { var rc = CEngine.Instance.RenderContext; Material = material; GeomMesh = new Graphics.Mesh.CGfxMeshPrimitives(); GeomMesh.Init(rc, null, 1); CDrawPrimitiveDesc dpDesc = new CDrawPrimitiveDesc(); dpDesc.SetDefault(); dpDesc.StartIndex = 0xFFFFFFFF; GeomMesh.PushAtomLOD(0, ref dpDesc); var Mesh = new Graphics.Mesh.CGfxMesh(); Mesh.Init(rc, null, GeomMesh); var img = new Graphics.Mesh.CGfxImage2D(); Mesh.Tag = img; UpdateGeomMesh(rc, halfWidth); GraphActor = GamePlay.Actor.GActor.NewMeshActorDirect(Mesh); var meshComp = GraphActor.GetComponent <GamePlay.Component.GMeshComponent>(); await meshComp.SetMaterialInstanceAsync(rc, 0, material, null); //await meshComp.SetMaterial(rc, 0, material, CEngine.Instance.PrebuildPassData.Image2DShadingEnvs, false, true); return(true); }
public void AddMeshInstance(GamePlay.Actor.GActor actor, [Editor.Editor_RNameType(Editor.Editor_RNameTypeAttribute.MeshCluster)] RName clusterName) { var mesh = actor.GetComponentMesh(); if (mesh != null) { AddMeshInstance(CEngine.Instance.RenderContext, mesh, clusterName, actor.Placement); } }
public static bool AddActor2Scene(GamePlay.GGameInstance game, GamePlay.Actor.GActor actor, Guid sceneId) { GamePlay.SceneGraph.GSceneGraph scene = null; if (sceneId == Guid.Empty) { sceneId = game.World.DefaultScene.SceneId; } scene = game.World.GetScene(sceneId); if (scene == null) { return(false); } game.World.AddActor(actor); scene.AddActor(actor); return(true); }
public void UpdateActor(GamePlay.Actor.GActor actor) { var pointComp = actor.GetComponent <PointActorComponent>(); if (pointComp != null) { UpdatePointComponent(pointComp); } else { var boxComp = actor.GetComponent <BoxActorComponent>(); if (boxComp != null) { UpdateBoxComponent(boxComp); } } }
public static async System.Threading.Tasks.Task <GActor> NewNavMeshActorAsync(Bricks.RecastRuntime.CNavMesh navMesh) { var rc = CEngine.Instance.RenderContext; var actor = new GamePlay.Actor.GActor(); actor.ActorId = Guid.NewGuid(); var placement = new GamePlay.Component.GPlacementComponent(); actor.Placement = placement; var navComp = new Bricks.RecastRuntime.CNavMeshComponent(); var init = new Bricks.RecastRuntime.CNavMeshComponent.CNavMeshComponentInitializer(); navComp.NavMesh = navMesh; await navComp.SetInitializer(rc, actor, actor, init); actor.AddComponent(navComp); return(actor); }
public bool AddActorBySceneName(GamePlay.Actor.GActor actor, [Editor.Editor_RNameType(Editor.Editor_RNameTypeAttribute.Scene)] RName sceneName = null) { var scene = mWorld.DefaultScene; if (sceneName != null && sceneName.Name != "") { scene = mWorld.GetScene(sceneName); } if (scene == null) { return(false); } scene.AddActor(actor); mWorld.AddActor(actor); return(true); }
public async System.Threading.Tasks.Task CreateRenderInfos(GamePlay.GWorld world) { //EngineNS.Bricks.GraphDrawer.GraphLines AgentBoxs ab = AgentDatas[0]; Agent.GeoBox[] ap = ab.AgentData.ToArray(); GamePlay.Actor.GActor actor = new GamePlay.Actor.GActor(); //创建包围盒的每个点 for (int i = 0; i < ap.Length; i++) { EngineNS.Bricks.GraphDrawer.GraphLines graph = new EngineNS.Bricks.GraphDrawer.GraphLines(); var boxgen = new EngineNS.Bricks.GraphDrawer.McBoxGen(); bool allface = ap[i].FaceType == face; boxgen.Interval = allface ? 0.05f : 0.1f; boxgen.Segement = allface ? 1.0f : 0.2f; Vector4 outv4; Vector3.Transform(ref ap[i].Box.Maximum, ref ab.Mat, out outv4); ap[i].Box.Maximum = new Vector3(outv4.X, outv4.Y, outv4.Z); Vector3.Transform(ref ap[i].Box.Minimum, ref ab.Mat, out outv4); ap[i].Box.Minimum = new Vector3(outv4.X, outv4.Y, outv4.Z); boxgen.SetBoundBox(ap[i].Box); graph.LinesGen = boxgen; var mtl = await CEngine.Instance.MaterialInstanceManager.GetMaterialInstanceAsync( CEngine.Instance.RenderContext, //蓝线就是六个面都通了 RName.GetRName(allface ? "editor/icon/icon_3D/material/physical_model.instmtl" : "editor/volume/mi_volume_octree.instmtl"));//rotator var init = await graph.Init(mtl, 0.0f); graph.GraphActor.Placement.Location = Vector3.Zero; graph.GraphActor.SpecialName = ActorName; //world.AddActor(graph.GraphActor); //world.DefaultScene.AddActor(graph.GraphActor); actor.Children.Add(graph.GraphActor); } actor.SpecialName = "NavLineDebuger"; world.AddActor(actor); world.DefaultScene.AddActor(actor); }
public async System.Threading.Tasks.Task CreateDefaultSphere() { mDebugActor = await EngineNS.GamePlay.Actor.GActor.NewMeshActorAsync(RName.GetRName("editor/basemesh/sphere.gms")); EngineNS.Thread.Async.TaskLoader.Release(ref WaitContext, null); }
public void OnEditorCommitVisual(CCommandList cmd, Graphics.CGfxCamera camera, GamePlay.Actor.GActor hostactor, GamePlay.SceneGraph.CheckVisibleParam param) { if (hostactor == null || !hostactor.Visible) { return; } var rc = CEngine.Instance.RenderContext; switch (ShapeType) { case EPhysShapeType.PST_Convex: { if (mDebugActor == null) { Graphics.Mesh.CGfxMeshPrimitives mp = IfGetConvexMesh(rc); mDebugActor = EngineNS.GamePlay.Actor.GActor.NewMeshActorDirect(CEngine.Instance.MeshManager.CreateMesh(rc, mp)); EngineNS.Thread.Async.TaskLoader.Release(ref WaitContext, null); var test = SetMaterial(); } mDebugActor.Placement.SetMatrix(ref hostactor.Placement.mDrawTransform); } break; case EPhysShapeType.PST_TriangleMesh: { if (mDebugActor == null) { Graphics.Mesh.CGfxMeshPrimitives mp = IfGetTriMesh(rc); CEngine.Instance.MeshManager.CreateMesh(rc, mp); EngineNS.Thread.Async.TaskLoader.Release(ref WaitContext, null); mDebugActor = EngineNS.GamePlay.Actor.GActor.NewMeshActorDirect(CEngine.Instance.MeshManager.CreateMesh(rc, mp)); var test = SetMaterial(); } mDebugActor.Placement.SetMatrix(ref hostactor.Placement.mDrawTransform); } break; case EPhysShapeType.PST_Box: { if (mDebugActor == null && mReady == false) { mReady = true; var test = CreateDefaultBox(); test = SetMaterial(); } if (mDebugActor != null) { float w = 1.0f; float h = 1.0f; float l = 1.0f; SDK_PhyShape_IfGetBox(ref w, ref h, ref l); mDebugActor.Placement.SetMatrix(ref hostactor.Placement.mDrawTransform); Vector3 scale = Vector3.UnitXYZ; //mDebugActor.Placement.Scale; scale.SetValue(scale.X * w, scale.Y * h, scale.Z * l); mDebugActor.Placement.Scale = scale; } } break; case EPhysShapeType.PST_Sphere: { if (mDebugActor == null && mReady == false) { mReady = true; var test = CreateDefaultSphere(); test = SetMaterial(); } if (mDebugActor != null) { float r = 1.0f; IfGetSphere(ref r); mDebugActor.Placement.SetMatrix(ref hostactor.Placement.mDrawTransform); Vector3 scale = Vector3.UnitXYZ; //mDebugActor.Placement.Scale; scale.SetValue(scale.X * r, scale.Y * r, scale.Z * r); mDebugActor.Placement.Scale = scale; } } break; default: break; } if (mDebugActor != null) { foreach (var comp in mDebugActor.Components) { var meshComp = comp as EngineNS.GamePlay.Component.GVisualComponent; if (meshComp != null) { meshComp.CommitVisual(cmd, camera, param); } } } }
public virtual void OnTriggerOut(GComponent overlapedComponent, GamePlay.Actor.GActor otherActor, GComponent otherComponent) { }
public static TouchInputEventArgs CreateTouchInputEventArgsFromeScreenXY( GamePlay.Actor.GActor showActor, float showWidth, float showHeight, float hitLength, enTouchState State, int x, int y, int FingerIdx, float DeltaX, float DeltaY) { if (showActor.Scene == null) { return(null); } if (CEngine.Instance.GameInstance == null) { return(null); } var hitResult = new GamePlay.SceneGraph.VHitResult(Bricks.PhysicsCore.PhyHitFlag.eDEFAULT); if (showActor.Scene.PickActor(out hitResult, CEngine.Instance.GameInstance.GameCamera, x, y, hitLength) != showActor) { return(null); } var triMeshComp = showActor.GetComponent <Bricks.PhysicsCore.CollisionComponent.GPhysicsMeshCollision>(); if (triMeshComp == null) { return(null); } var triMesh = triMeshComp.HostShape.TriGeom; if (triMesh == null) { return(null); } if (hitResult.FaceId == -1) { return(null); } if (triMeshComp.HostShape == null) { return(null); } int faceid = triMeshComp.HostShape.GetTrianglesRemap(hitResult.FaceId); if (faceid == -1) { return(null); } triMesh.GetUV(faceid, hitResult.U, hitResult.V, out ResultUV); var pos = triMesh.GetPos(faceid, hitResult.U, hitResult.V); pos = Vector3.TransformCoordinate(pos, showActor.Placement.DrawTransform); //以后要改成pool模式 var result = new TouchInputEventArgs(); result.TouchEvent.State = State; result.TouchEvent.PosX = ResultUV.X * showWidth; result.TouchEvent.PosY = ResultUV.Y * showHeight; result.TouchEvent.FingerIdx = FingerIdx; result.TouchEvent.DeltaX = DeltaX; result.TouchEvent.DeltaY = DeltaY; return(result); }