/// <summary> /// Instantiates the HUD /// </summary> /// <param name="name">The entity name</param> public HudDecorator(string name) { this.entity = new Entity(name) .AddComponent(new Transform3D() { LocalScale = Vector3.One * 3 }) .AddComponent(new Model("Content/Models/Hud/HudStatic.FBX")) .AddComponent(new ModelRenderer()) .AddComponent(new MaterialsMap(new BasicMaterial("Content/Textures/Hud/Hud_1.png", typeof(AdditiveLayer)))) ; Entity rotationEntity = new Entity("rotation") .AddComponent(new Transform3D()) .AddComponent(new Model("Content/Models/Hud/HudRotation.FBX")) .AddComponent(new ModelRenderer()) .AddComponent(new MaterialsMap(new BasicMaterial("Content/Textures/Hud/Hud_1.png", typeof(AdditiveLayer)))) .AddComponent(new HudRotationBehavior(new Vector3(1, 1, 0))) ; this.entity.AddChild(rotationEntity); Entity radarEntity = new Entity("radar") .AddComponent(new Transform3D() { LocalPosition = new Vector3(0, -0.32f, 0.5f), LocalRotation = Vector3.UnitY * MathHelper.Pi }) .AddComponent(new Model("Content/Models/Hud/HudRadarStatic.FBX")) .AddComponent(new ModelRenderer()) .AddComponent(new MaterialsMap(new BasicMaterial("Content/Textures/Hud/HudRadar.png", typeof(AdditiveLayer)))) ; Entity rotationRadar1 = new Entity("rotationRadar1") .AddComponent(new Transform3D()) .AddComponent(new Model("Content/Models/Hud/HudRadarRotation1.FBX")) .AddComponent(new ModelRenderer()) .AddComponent(new MaterialsMap(new BasicMaterial("Content/Textures/Hud/HudRadar.png", typeof(AdditiveLayer)))) .AddComponent(new HudRotationBehavior(new Vector3(1, 1, 0))) .AddComponent(new RadarBehavior()) ; radarEntity.AddChild(rotationRadar1); Entity rotationRadar3 = new Entity("rotationRadar3") .AddComponent(new Transform3D()) .AddComponent(new Model("Content/Models/Hud/HudRadarRotation3.FBX")) .AddComponent(new ModelRenderer()) .AddComponent(new MaterialsMap(new BasicMaterial("Content/Textures/Hud/HudRadar.png", typeof(AdditiveLayer)))) .AddComponent(new Spinner() { IncreaseY = -10 }) ; rotationRadar1.AddChild(rotationRadar3); Entity rotationRadar2 = new Entity("rotationRadar2") .AddComponent(new Transform3D()) .AddComponent(new Model("Content/Models/Hud/HudRadarRotation2.FBX")) .AddComponent(new ModelRenderer()) .AddComponent(new MaterialsMap(new BasicMaterial("Content/Textures/Hud/HudRadar.png", typeof(AdditiveLayer)))) .AddComponent(new HudRotationBehavior(new Vector3(1, 1, 0))) ; radarEntity.AddChild(rotationRadar2); this.entity.AddChild(radarEntity); }
public static void SpawnPrefabModel(this ScriptComponent script, Prefab source, Entity attachEntity, Matrix localMatrix, Vector3 forceImpulse) { if (source == null) return; // Clone var spawnedEntities = source.Instantiate(); // Add foreach (var prefabEntity in spawnedEntities) { prefabEntity.Transform.UpdateLocalMatrix(); var entityMatrix = prefabEntity.Transform.LocalMatrix * localMatrix; entityMatrix.Decompose(out prefabEntity.Transform.Scale, out prefabEntity.Transform.Rotation, out prefabEntity.Transform.Position); if (attachEntity != null) { attachEntity.AddChild(prefabEntity); } else { script.SceneSystem.SceneInstance.Scene.Entities.Add(prefabEntity); } var physComp = prefabEntity.Get<RigidbodyComponent>(); if (physComp != null) { physComp.ApplyImpulse(forceImpulse); } } }
public Entity CreateDebugEntity(PhysicsComponent component, bool alwaysAddOffset = false) { if (component?.ColliderShape == null) return null; if (component.DebugEntity != null) return null; var debugEntity = new Entity(); var skinnedElement = component as PhysicsSkinnedComponentBase; if (skinnedElement != null && skinnedElement.BoneIndex != -1) { Vector3 scale, pos; Quaternion rot; skinnedElement.BoneWorldMatrixOut.Decompose(out scale, out rot, out pos); debugEntity.Transform.Position = pos; debugEntity.Transform.Rotation = rot; } else { Vector3 scale, pos; Quaternion rot; component.Entity.Transform.WorldMatrix.Decompose(out scale, out rot, out pos); debugEntity.Transform.Position = pos; debugEntity.Transform.Rotation = rot; } var rigidBody = component as RigidbodyComponent; //don't add offset for non bone dynamic and kinematic as it is added already in the updates var colliderEntity = CreateChildEntity(component, component.ColliderShape, alwaysAddOffset || rigidBody == null); if (colliderEntity != null) debugEntity.AddChild(colliderEntity); return debugEntity; }
public unsafe void TestComponentAccess() { var entity = new Entity(); entity.AddChild(new Entity("child1") { new LightComponent() }); var modelComponent = new ModelComponent(); var compiledUpdate = UpdateEngine.Compile(typeof(Entity), new List<UpdateMemberInfo> { new UpdateMemberInfo("[ModelComponent.Key]", 0), new UpdateMemberInfo("child1[LightComponent.Key].Intensity", 0), }); var testData = new TestData[] { 32.0f }; fixed (TestData* dataPtr = testData) { UpdateEngine.Run(entity, compiledUpdate, (IntPtr)dataPtr, new[] { new UpdateObjectData(modelComponent) }); } Assert.That(entity.Get(ModelComponent.Key), Is.EqualTo(modelComponent)); Assert.That(entity.GetChild(0).Get(LightComponent.Key).Intensity, Is.EqualTo(32.0f)); }
protected void SpawnInstance(Prefab source, Entity attachEntity, float timeout, Matrix localMatrix) { if (source == null) return; Func<Task> spawnTask = async () => { // Clone var spawnedEntities = source.Instantiate(); // Add foreach (var prefabEntity in spawnedEntities) { prefabEntity.Transform.UpdateLocalMatrix(); var entityMatrix = prefabEntity.Transform.LocalMatrix * localMatrix; entityMatrix.Decompose(out prefabEntity.Transform.Scale, out prefabEntity.Transform.Rotation, out prefabEntity.Transform.Position); if (attachEntity != null) { attachEntity.AddChild(prefabEntity); } else { SceneSystem.SceneInstance.Scene.Entities.Add(prefabEntity); } } // Countdown var secondsCountdown = timeout; while (secondsCountdown > 0f) { await Script.NextFrame(); secondsCountdown -= (float)Game.UpdateTime.Elapsed.TotalSeconds; } // Remove foreach (var clonedEntity in spawnedEntities) { if (attachEntity != null) { attachEntity.RemoveChild(clonedEntity); } else { SceneSystem.SceneInstance.Scene.Entities.Remove(clonedEntity); } } // Cleanup spawnedEntities.Clear(); }; Script.AddTask(spawnTask); }
public Entity CreateDebugEntity(PhysicsComponent component) { if (component?.ColliderShape == null) return null; if (component.DebugEntity != null) return null; var debugEntity = new Entity(); var colliderEntity = CreateChildEntity(component, component.ColliderShape, true); if (colliderEntity == null) return null; debugEntity.AddChild(colliderEntity); if (component.CanScaleShape) { debugEntity.Transform.Scale = component.ColliderShape.Scaling; } var skinnedElement = component as PhysicsSkinnedComponentBase; if (skinnedElement != null && skinnedElement.BoneIndex != -1) { Vector3 scale, pos; Quaternion rot; skinnedElement.BoneWorldMatrixOut.Decompose(out scale, out rot, out pos); debugEntity.Transform.Position = pos; debugEntity.Transform.Rotation = rot; } else { Vector3 scale, pos; Quaternion rot; component.Entity.Transform.WorldMatrix.Decompose(out scale, out rot, out pos); debugEntity.Transform.Position = pos; debugEntity.Transform.Rotation = rot; } return debugEntity; }
private void ProcessUnionSubclasses(object parent, MappingSet mappingSet, IDatabase database, EntitySet entities, Entity newEntity, IEnumerable<unionsubclass> unionsubclasses, ParseResults results, string unqualifiedNamespace) { if (unionsubclasses == null) return; @class hClass = null; unionsubclass parentSubClass = null; if (parent is @class) hClass = (@class)parent; else parentSubClass = (unionsubclass)parent; foreach (unionsubclass hSubclass in unionsubclasses) { Entity childEntity; string @namespace; string name; if (IsNameFullyQualified(hSubclass.name, out @namespace, out name)) { childEntity = new EntityImpl(name); string currentNamespace = ArchAngel.Interfaces.SharedData.CurrentProject.GetUserOption("ProjectNamespace") == null ? "" : ArchAngel.Interfaces.SharedData.CurrentProject.GetUserOption("ProjectNamespace").ToString(); if (string.IsNullOrWhiteSpace(currentNamespace)) ArchAngel.Interfaces.SharedData.CurrentProject.SetUserOption("ProjectNamespace", @namespace); } else childEntity = new EntityImpl(hSubclass.name); childEntity.SetEntityLazy(hSubclass.lazy); newEntity.AddChild(childEntity); var childTableMapping = new MappingImpl(); childTableMapping.FromTable = database.GetTable(hSubclass.table.UnBackTick(), hSubclass.schema.UnBackTick()); childTableMapping.ToEntity = childEntity; foreach (var ip in childEntity.InheritedProperties) { PropertyImpl np = new PropertyImpl(ip); np.IsHiddenByAbstractParent = true; childEntity.AddProperty(np); string columnName = ""; var props = hClass.Properties().ToList(); if (hClass != null) { property matchingProp = hClass.Properties().SingleOrDefault(p => p.name == ip.Name); if (matchingProp != null) { if (matchingProp.column != null) columnName = matchingProp.column; else if (matchingProp.Columns().Count > 0) columnName = matchingProp.Columns()[0].name; } else { if (hClass.Id().column1 != null) columnName = hClass.Id().column1; else if (hClass.Id().column != null && hClass.Id().column.Count() > 0) columnName = hClass.Id().column[0].name; } } else columnName = parentSubClass.Properties().Single(p => p.name == ip.Name).column; IColumn column = childTableMapping.FromTable.GetColumn(columnName.UnBackTick()); if (column != null) childTableMapping.AddPropertyAndColumn(np, column); } foreach (var hProperty in hSubclass.Properties()) { var property = CreateProperty(childEntity, childTableMapping, hProperty); SetPropertyInfoFromParsedCode(property, results, unqualifiedNamespace, childTableMapping.FromTable.Schema, hSubclass.name); } // Add the parent's key properties as hidden properties foreach (var keyProp in newEntity.Key.Properties) { Property childP = childEntity.PropertiesHiddenByAbstractParent.SingleOrDefault(p => p.Name == keyProp.Name); if (childP != null) { //childP.IsHiddenByAbstractParent = true; childP.IsKeyProperty = true; } } entities.AddEntity(childEntity); mappingSet.AddMapping(childTableMapping); ProcessUnionSubclasses(hSubclass, mappingSet, database, entities, childEntity, hSubclass.unionsubclass1, results, unqualifiedNamespace); } }
private void ProcessSubclasses(MappingSet mappingSet, IDatabase database, EntitySet entities, Entity parentEntity, IEnumerable<subclass> subclasses, string schemaName, string tableName, ParseResults parseResults, string unqualifiedNamespace) { if (subclasses == null) return; foreach (subclass hSubclass in subclasses) { Entity childEntity; string @namespace; string name; if (IsNameFullyQualified(hSubclass.name, out @namespace, out name)) { childEntity = new EntityImpl(name); string currentNamespace = ArchAngel.Interfaces.SharedData.CurrentProject.GetUserOption("ProjectNamespace") == null ? "" : ArchAngel.Interfaces.SharedData.CurrentProject.GetUserOption("ProjectNamespace").ToString(); if (string.IsNullOrWhiteSpace(currentNamespace)) ArchAngel.Interfaces.SharedData.CurrentProject.SetUserOption("ProjectNamespace", @namespace); } else childEntity = new EntityImpl(hSubclass.name); childEntity.SetEntityLazy(hSubclass.lazy); #region Discriminator if (!string.IsNullOrWhiteSpace(hSubclass.discriminatorvalue)) { childEntity.DiscriminatorValue = hSubclass.discriminatorvalue; //ArchAngel.Providers.EntityModel.Model.EntityLayer.Discriminator d = new Discriminator() //{ // AllowNull = xx, // ColumnName = hSubclass.d, // DiscriminatorType = xx, // Force = xx, // Formula = xx, // Insert = xx //}; //throw new NotImplementedException("TODO: fixup discriminator stuff"); //Grouping g = new AndGrouping(); //IColumn column = parentEntity.Discriminator.RootGrouping.Conditions[0].Column; //ArchAngel.Providers.EntityModel.Model.DatabaseLayer.Discrimination.Operator op = ArchAngel.Providers.EntityModel.Model.DatabaseLayer.Discrimination.Operator.Equal; //ExpressionValue value = new ExpressionValueImpl(hSubclass.discriminatorvalue); //if (column != null && op != null && value != null) // g.AddCondition(new ConditionImpl(column, op, value)); //if (childEntity.Discriminator == null) // childEntity.Discriminator = new DiscriminatorImpl(); //childEntity.Discriminator.RootGrouping = g; } #endregion parentEntity.AddChild(childEntity); var childTableMapping = new MappingImpl(); childTableMapping.FromTable = database.GetTable(tableName, schemaName); childTableMapping.ToEntity = childEntity; foreach (var hProperty in hSubclass.Properties()) { var property = CreateProperty(childEntity, childTableMapping, hProperty); SetPropertyInfoFromParsedCode(property, parseResults, unqualifiedNamespace, childTableMapping.FromTable.Schema, hSubclass.name); } entities.AddEntity(childEntity); mappingSet.AddMapping(childTableMapping); ProcessSubclasses(mappingSet, database, entities, childEntity, hSubclass.subclass1, schemaName, tableName, parseResults, unqualifiedNamespace); } }
private void ProcessJoinedSubclasses(MappingSet mappingSet, IDatabase database, EntitySet entities, Entity newEntity, IEnumerable<joinedsubclass> joinedsubclasses, ParseResults results, string unqualifiedNamespace) { if (joinedsubclasses == null) return; ITable parentTable = null; if (newEntity.MappedTables().Count() > 0) parentTable = newEntity.MappedTables().ElementAt(0); foreach (joinedsubclass hSubclass in joinedsubclasses) { Entity childEntity; string @namespace; string name; if (IsNameFullyQualified(hSubclass.name, out @namespace, out name)) { childEntity = new EntityImpl(name); string currentNamespace = ArchAngel.Interfaces.SharedData.CurrentProject.GetUserOption("ProjectNamespace") == null ? "" : ArchAngel.Interfaces.SharedData.CurrentProject.GetUserOption("ProjectNamespace").ToString(); if (string.IsNullOrWhiteSpace(currentNamespace)) ArchAngel.Interfaces.SharedData.CurrentProject.SetUserOption("ProjectNamespace", @namespace); unqualifiedNamespace = @namespace; } else childEntity = new EntityImpl(hSubclass.name); childEntity.SetEntityLazy(hSubclass.lazy); newEntity.AddChild(childEntity); var childTableMapping = new MappingImpl(); ITable subClassTable; if (!string.IsNullOrEmpty(hSubclass.table)) { string schema = ""; if (!string.IsNullOrEmpty(hSubclass.schema)) schema = hSubclass.schema; else if (parentTable != null) schema = parentTable.Schema; subClassTable = database.GetTable(hSubclass.table.UnBackTick(), schema.UnBackTick()); subClassTable.Database = database; } else subClassTable = parentTable; childTableMapping.FromTable = subClassTable; childTableMapping.ToEntity = childEntity; foreach (var hProperty in hSubclass.Properties()) { var property = CreateProperty(childEntity, childTableMapping, hProperty); SetPropertyInfoFromParsedCode(property, results, unqualifiedNamespace, childTableMapping.FromTable.Schema, hSubclass.name); } if (hSubclass.key != null) { string keyColumnName; if (!string.IsNullOrEmpty(hSubclass.key.column1)) keyColumnName = hSubclass.key.column1; else //if (hSubclass.key.column != null && hSubclass.key.column.Count() > 0) keyColumnName = hSubclass.key.column[0].name; Property keyProp = childEntity.Properties.FirstOrDefault(p => p.MappedColumn() != null && p.MappedColumn().Name == keyColumnName); if (keyProp == null) { keyProp = CreateProperty(childEntity, childTableMapping, hSubclass.key, subClassTable); SetPropertyInfoFromParsedCode(keyProp, results, unqualifiedNamespace, childTableMapping.FromTable.Schema, childEntity.Name); keyProp.IsHiddenByAbstractParent = true; } keyProp.IsKeyProperty = true; } entities.AddEntity(childEntity); mappingSet.AddMapping(childTableMapping); ProcessJoinedSubclasses(mappingSet, database, entities, childEntity, hSubclass.joinedsubclass1, results, unqualifiedNamespace); } }
private void AddTreeLimits(string name, Vector3 position, Entity parent) { Entity limitEntity = this.RetrieveTerrainLimitEntity(); if (limitEntity != null) { limitEntity.Name = name; limitEntity.FindComponent<Transform3D>().LocalPosition = position; parent.AddChild(limitEntity); } }
private void AddRandomTrees(int count, Entity nextTerrain) { for (int i = 0; i < count; i++) { Entity tree = this.RetrieveTreeEntity(); if (tree != null) { tree.Name += i.ToString(); Vector3 pos = Vector3.Zero; pos.X = WaveServices.Random.Next(-this.HalfExtendLimits, this.HalfExtendLimits + 1); pos.Z = WaveServices.Random.Next(4); tree.FindComponent<Transform3D>().LocalPosition = pos; nextTerrain.AddChild(tree); } } }
public void TestMultiplePrefabsInheritanceAndChildren() { // The purpose of this test is to check that modifying a prefab base is correctly propagated through all // derived prefabs. We use the following scenario: // // a1: base asset // a2: inherit from a1 by composition with 2 instances (baseParts: a1 => 2 instances) // a3: inherit from a1 by composition with 1 instances (baseParts: a1 => 1 instances) // a4: inherit from a2 and a3 by composition with 1 instances for each (baseParts: a1 => 1 instance, a2 => 1 instance) // // Unlike TestMultiplePrefabsMixedInheritance, we use only inheritance by composition for this scenario to match current use cases var package = new Package(); var assetItems = package.Assets; // First we create assets with the following configuration: // a1: a2: (baseParts: a1, 2 instances) a3: (baseParts: a1) a4: (baseParts: a2 x 1, a3 x 1) // | er | er1 (base: er) | er1' (base: er) | eRoot // | ea | ea1 (base: ea) | ea1' (base: ea) | er1* (base: er) // | eb | eb1 (base: eb) | eb1' (base: eb) | ea1* (base: ea) // | ec | ec1 (base: ec) | ec1' (base: ec) | eb1* (base: eb) // | er2 (base: er) | ec1* (base: ec) // | ea2 (base: ea) | er2* (base: er) // | eb2 (base: eb) | ea2* (base: ea) // | ec2 (base: ec) | eb2* (base: eb) // | ec2* (base: ec) // | er1'* (base: er) // | ea1'* (base: ea) // | eb1'* (base: eb) // | ec1'* (base: ec) var a1 = new PrefabAsset(); var er = new Entity("er"); var ea = new Entity("ea"); var eb = new Entity("eb"); var ec = new Entity("ec"); a1.Hierarchy.Parts.Add(new EntityDesign(er)); a1.Hierarchy.Parts.Add(new EntityDesign(ea)); a1.Hierarchy.Parts.Add(new EntityDesign(eb)); a1.Hierarchy.Parts.Add(new EntityDesign(ec)); a1.Hierarchy.RootPartIds.Add(er.Id); er.AddChild(ea); er.AddChild(eb); er.AddChild(ec); assetItems.Add(new AssetItem("a1", a1)); var member = (IMemberDescriptor)TypeDescriptorFactory.Default.Find(typeof(Entity))[nameof(Entity.Name)]; var a2 = new PrefabAsset(); var a2PartInstance1 = a1.CreatePrefabInstance(a2, "a1"); foreach (var entity in a2PartInstance1.Parts) { entity.Entity.Name += "1"; } var a2PartInstance2 = a1.CreatePrefabInstance(a2, "a1"); foreach (var entity in a2PartInstance2.Parts) { entity.Entity.Name += "2"; } a2.Hierarchy.Parts.AddRange(a2PartInstance1.Parts); a2.Hierarchy.Parts.AddRange(a2PartInstance2.Parts); a2.Hierarchy.RootPartIds.AddRange(a2PartInstance1.RootPartIds); a2.Hierarchy.RootPartIds.AddRange(a2PartInstance2.RootPartIds); Assert.AreEqual(8, a2.Hierarchy.Parts.Count); Assert.AreEqual(2, a2.Hierarchy.RootPartIds.Count); assetItems.Add(new AssetItem("a2", a2)); var a3 = new PrefabAsset(); var a3PartInstance1 = a1.CreatePrefabInstance(a3, "a1"); foreach (var entity in a3PartInstance1.Parts) { entity.Entity.Name += "1'"; } a3.Hierarchy.Parts.AddRange(a3PartInstance1.Parts); a3.Hierarchy.RootPartIds.AddRange(a3PartInstance1.RootPartIds); Assert.AreEqual(4, a3.Hierarchy.Parts.Count); Assert.AreEqual(1, a3.Hierarchy.RootPartIds.Count); assetItems.Add(new AssetItem("a3", a3)); var a4 = new PrefabAsset(); var eRoot = new Entity("eRoot"); var a2PartInstance3 = a2.CreatePrefabInstance(a4, "a2"); foreach (var entity in a2PartInstance3.Parts) { entity.Entity.Name += "*"; } foreach (var entity in a2PartInstance3.Parts.Where(t => a2PartInstance3.RootPartIds.Contains(t.Entity.Id))) { eRoot.AddChild(entity.Entity); } var a3PartInstance2 = a3.CreatePrefabInstance(a4, "a3"); foreach (var entity in a3PartInstance2.Parts) { entity.Entity.Name += "*"; } a4.Hierarchy.Parts.Add(new EntityDesign(eRoot)); a4.Hierarchy.Parts.AddRange(a2PartInstance3.Parts); a4.Hierarchy.Parts.AddRange(a3PartInstance2.Parts); a4.Hierarchy.RootPartIds.Add(eRoot.Id); a4.Hierarchy.RootPartIds.AddRange(a3PartInstance2.RootPartIds); Assert.AreEqual(13, a4.Hierarchy.Parts.Count); Assert.AreEqual(2, a4.Hierarchy.RootPartIds.Count); assetItems.Add(new AssetItem("a4", a4)); Assert.True(a1.DumpTo(Console.Out, "a1 BEFORE PrefabMergeAsset")); Assert.True(a2.DumpTo(Console.Out, "a2 BEFORE PrefabMergeAsset")); Assert.True(a3.DumpTo(Console.Out, "a3 BEFORE PrefabMergeAsset")); Assert.True(a4.DumpTo(Console.Out, "a4 BEFORE PrefabMergeAsset")); // Then we simulate a concurrent change to a1 by someone that didn't have a2/a3/a4 // - Add one component to a1, linking to an existing entity ea // - Add a root entity to a1 with a link to an existing entity eb // // a1: a2: (baseParts: a1, 2 instances) a3: (baseParts: a1) a4: (baseParts: a2 x 1, a3 x 1) // | er | er1 (base: er) | er1' (base: er) | eRoot // | ea | ea1 (base: ea) | ea1' (base: ea) | er1* (base: er) // | eb | eb1 (base: eb) | eb1' (base: eb) | ea1* (base: ea) // | ec + link ea | ec1 + link ea1 (base: ec) | ec1' + link ea1' (base: ec) | eb1* (base: eb) // | ex | er2 (base: er) | ex(1') (base: ex) | ec1* + link ea1* (base: ec) // | ey + link eb | ea2 (base: ea) | ey(1') + link eb1' | er2* (base: er) // | eb2 (base: eb) | ea2* (base: ea) // | ec2 + link ea2 (base: ec) | eb2* (base: eb) // | ex(1) | ec2* + link ea2* (base: ec) // | ey(1) + link eb1 | er1'* (base: er) // | ex(2) | ea1'* (base: ea) // | ey(2) + link eb2 | eb1'* (base: eb) // | ec1'* + link ea1'* (base: ec) // | ex(1*) // | ey(1*) + link eb1* // | ex(2*) // | ey(2*) + link eb2* // | ex(1') (base: ex) // | ey(1') + link eb1'* ec.Components.Add(new TestEntityComponent() { EntityLink = ea }); var ex = new Entity("ex"); var ey = new Entity("ey"); ey.Components.Add(new TestEntityComponent() { EntityLink = eb }); ex.AddChild(ey); a1.Hierarchy.Parts.Add(new EntityDesign(ex)); a1.Hierarchy.Parts.Add(new EntityDesign(ey)); a1.Hierarchy.RootPartIds.Add(ex.Id); Assert.AreEqual(6, a1.Hierarchy.Parts.Count); Assert.AreEqual(2, a1.Hierarchy.RootPartIds.Count); // Simulates the loading of this package using (var session = new PackageSession()) { var logger = new LoggerResult(); session.AddExistingPackage(package, logger); Assert.False(logger.HasErrors); Assert.True(a1.DumpTo(Console.Out, "a1 AFTER PrefabMergeAsset")); // ------------------------------------------------ // Check for a2 // ------------------------------------------------ // a2: (baseParts: a1, 2 instances) // | er1 (base: er) // | ea1 (base: ea) // | eb1 (base: eb) // | ec1 + link ea1 (base: ec) // | er2 (base: er) // | ea2 (base: ea) // | eb2 (base: eb) // | ec2 + link ea2 (base: ec) // | ex(1) // | ey(1) + link eb1 // | ex(2) // | ey(2) + link eb2 { Assert.True(a2.DumpTo(Console.Out, "a2 AFTER PrefabMergeAsset")); Assert.AreEqual(4, a2.Hierarchy.RootPartIds.Count); Assert.True(a2.Hierarchy.Parts.All(it => it.Base != null)); // Check that we have all expected entities Assert.AreEqual(12, a2.Hierarchy.Parts.Count); var eb1 = a2.Hierarchy.Parts.FirstOrDefault(it => it.Entity.Name == "eb1")?.Entity; var eb2 = a2.Hierarchy.Parts.FirstOrDefault(it => it.Entity.Name == "eb2")?.Entity; Assert.NotNull(eb1); Assert.NotNull(eb2); // Check that we have ex and ey var exList = a2.Hierarchy.Parts.Where(it => it.Entity.Name == ex.Name).ToList(); Assert.AreEqual(2, exList.Count); // Check that both [ex] have both 1 element [ey] and the links to eb1/eb2 are correct { var expecting = new List<Entity>() { eb1, eb2 }; for (int i = 0; i < exList.Count; i++) { var ex1 = exList[i].Entity; Assert.AreEqual(1, ex1.Transform.Children.Count); var ey1 = ex1.Transform.Children[0].Entity; Assert.AreEqual(ey.Name, ey1.Name); Assert.NotNull(ey1.Get<TestEntityComponent>()); var entityLink = ey1.Get<TestEntityComponent>().EntityLink; Assert.True(expecting.Contains(entityLink)); expecting.Remove(entityLink); } } // Check link from ec1 to ea1 { var ec1 = a2.Hierarchy.Parts.FirstOrDefault(it => it.Entity.Name == "ec1")?.Entity; Assert.NotNull(ec1); var ea1 = a2.Hierarchy.Parts.FirstOrDefault(it => it.Entity.Name == "ea1")?.Entity; Assert.NotNull(ea1); Assert.NotNull(ec1.Get<TestEntityComponent>()); Assert.AreEqual(ea1, ec1.Get<TestEntityComponent>().EntityLink); } // Check link from ec2 to ea2 { var ec2 = a2.Hierarchy.Parts.FirstOrDefault(it => it.Entity.Name == "ec2")?.Entity; Assert.NotNull(ec2); var ea2 = a2.Hierarchy.Parts.FirstOrDefault(it => it.Entity.Name == "ea2")?.Entity; Assert.NotNull(ea2); Assert.NotNull(ec2.Get<TestEntityComponent>()); Assert.AreEqual(ea2, ec2.Get<TestEntityComponent>().EntityLink); } } // ------------------------------------------------ // Check for a3 // ------------------------------------------------ // a3: (baseParts: a1) // | er1' (base: er) // | ea1' (base: ea) // | eb1' (base: eb) // | ec1' + link ea1' (base: ec) // | ex1' (base: ex) // | ey1' + link eb1' { Assert.True(a3.DumpTo(Console.Out, "a3 AFTER PrefabMergeAsset")); Assert.AreEqual(2, a3.Hierarchy.RootPartIds.Count); Assert.True(a3.Hierarchy.Parts.All(it => it.Base != null)); // Check that we have all expected entities Assert.AreEqual(6, a3.Hierarchy.Parts.Count); var eb1 = a3.Hierarchy.Parts.FirstOrDefault(it => it.Entity.Name == "eb1'")?.Entity; Assert.NotNull(eb1); // Check that we have ex and ey var exList = a3.Hierarchy.Parts.Where(it => it.Entity.Name == ex.Name).ToList(); Assert.AreEqual(1, exList.Count); // Check that [ex] have 1 element [ey] and the link to eb1 is correct { var ex1 = exList[0].Entity; Assert.AreEqual(1, ex1.Transform.Children.Count); var ey1 = ex1.Transform.Children[0].Entity; Assert.AreEqual(ey.Name, ey1.Name); Assert.NotNull(ey1.Get<TestEntityComponent>()); Assert.AreEqual(eb1, ey1.Get<TestEntityComponent>().EntityLink); } { var ec1 = a3.Hierarchy.Parts.FirstOrDefault(it => it.Entity.Name == "ec1'")?.Entity; Assert.NotNull(ec1); var ea1 = a3.Hierarchy.Parts.FirstOrDefault(it => it.Entity.Name == "ea1'")?.Entity; Assert.NotNull(ea1); Assert.NotNull(ec1.Get<TestEntityComponent>()); Assert.AreEqual(ea1, ec1.Get<TestEntityComponent>().EntityLink); } } // ------------------------------------------------ // Check for a4 // ------------------------------------------------ // a4: (baseParts: a2 x 1, a3 x 1) // | eNewRoot // | er1* (base: er) // | ea1* (base: ea) // | eb1* (base: eb) // | ec1* + link ea1* (base: ec) // | er2* (base: er) // | ea2* (base: ea) // | eb2* (base: eb) // | ec2* + link ea2* (base: ec) // | er1'* (base: er) // | ea1'* (base: ea) // | eb1'* (base: eb) // | ec1'* + link ea1'* (base: ec) // | ex(1*) // | ey(1*) + link eb1* // | ex(2*) // | ey(2*) + link eb2* // | ex(1') (base: ex) // | ey(1') + link eb1'* { Assert.True(a4.DumpTo(Console.Out, "a4 AFTER PrefabMergeAsset")); Assert.AreEqual(5, a4.Hierarchy.RootPartIds.Count); Assert.True(a4.Hierarchy.Parts.Where(it => it.Entity.Name != "eRoot").All(it => it.Entity.Name != "eRoot" && it.Base != null)); // Check that we have all expected entities Assert.AreEqual(19, a4.Hierarchy.Parts.Count); var eb1 = a4.Hierarchy.Parts.FirstOrDefault(it => it.Entity.Name == "eb1*")?.Entity; var eb1_2 = a4.Hierarchy.Parts.FirstOrDefault(it => it.Entity.Name == "eb1'*")?.Entity; var eb2 = a4.Hierarchy.Parts.FirstOrDefault(it => it.Entity.Name == "eb2*")?.Entity; Assert.NotNull(eb1); Assert.NotNull(eb1_2); Assert.NotNull(eb2); // Check that we have ex and ey var exList = a4.Hierarchy.Parts.Where(it => it.Entity.Name == ex.Name).ToList(); Assert.AreEqual(3, exList.Count); // Check that both [ex] have both 1 element [ey] and the links to eb1/eb2 are correct { var expecting = new List<Entity>() { eb1, eb1_2, eb2 }; for (int i = 0; i < exList.Count; i++) { var ex1 = exList[i].Entity; Assert.AreEqual(1, ex1.Transform.Children.Count); var ey1 = ex1.Transform.Children[0].Entity; Assert.AreEqual(ey.Name, ey1.Name); Assert.NotNull(ey1.Get<TestEntityComponent>()); var entityLink = ey1.Get<TestEntityComponent>().EntityLink; Assert.True(expecting.Contains(entityLink)); expecting.Remove(entityLink); } } // Check all [er] entities Action<string> checkErX = (erName) => { var er1 = a4.Hierarchy.Parts.FirstOrDefault(it => it.Entity.Name == erName)?.Entity; Assert.NotNull(er1); Assert.AreEqual(3, er1.Transform.Children.Count); var ec1 = er1.Transform.Children.FirstOrDefault(it => it.Entity.Name.StartsWith("ec"))?.Entity; Assert.NotNull(ec1); var ea1 = er1.Transform.Children.FirstOrDefault(it => it.Entity.Name.StartsWith("ea"))?.Entity; Assert.NotNull(ea1); Assert.NotNull(ec1.Get<TestEntityComponent>()); Assert.AreEqual(ea1, ec1.Get<TestEntityComponent>().EntityLink); }; checkErX("er1*"); checkErX("er2*"); checkErX("er1'*"); } } }
private Entity CreateChildEntity(ColliderShape shape, PhysicsElementBase.Types type, bool addOffset = false) { if (shape == null) return null; switch (shape.Type) { case ColliderShapeTypes.StaticPlane: { //Hmm TODO maybe can draw an infinite plane?? return null; } case ColliderShapeTypes.Compound: { var entity = new Entity(); //We got to recurse var compound = (CompoundColliderShape)shape; for (var i = 0; i < compound.Count; i++) { var subShape = compound[i]; var subEntity = CreateChildEntity(subShape, type, true); subEntity.Transform.UseTRS = false; entity.AddChild(subEntity); } entity.Transform.LocalMatrix = Matrix.Identity; entity.Transform.UseTRS = false; return entity; } default: { Material mat; switch (type) { case PhysicsElementBase.Types.PhantomCollider: mat = triggerMaterial; break; case PhysicsElementBase.Types.StaticCollider: case PhysicsElementBase.Types.StaticRigidBody: mat = staticMaterial; break; case PhysicsElementBase.Types.DynamicRigidBody: mat = dynamicMaterial; break; case PhysicsElementBase.Types.KinematicRigidBody: mat = kinematicMaterial; break; case PhysicsElementBase.Types.CharacterController: mat = characterMaterial; break; default: throw new ArgumentOutOfRangeException("type", type, null); } var entity = new Entity { new ModelComponent { Model = new Model { mat, new Mesh { Draw = shape.CreateDebugPrimitive(graphicsDevice) } } } }; var offset = addOffset ? Matrix.RotationQuaternion(shape.LocalRotation)*Matrix.Translation(shape.LocalOffset) : Matrix.Identity; if (shape.Type == ColliderShapeTypes.ConvexHull) { var hullDesc = (ConvexHullColliderShape)shape; entity.Transform.LocalMatrix = shape.DebugPrimitiveMatrix * Matrix.Scaling(hullDesc.Scaling) * offset; } else { entity.Transform.LocalMatrix = shape.DebugPrimitiveMatrix * offset; } entity.Transform.UseTRS = false; return entity; } } }
private void Create_Towers_Bar() { var touchGestures = new TouchGestures(); var x = WaveServices.Platform.ScreenWidth / 2; var y = WaveServices.Platform.ScreenHeight - 150; var sprite = "Content/Other/TowerBar/Bar_Background.wpk"; TowersBar = Static.Functions.Create_entity("Tower_Bar", x, y, sprite); x = 0; y = 0; sprite = "Content/Other/TowerBar/Tower1_Sprite.wpk"; Tower1Button = Static.Functions.Create_entity("Tower1",x,y,sprite); Tower1Button.AddComponent(new RectangleCollider()) .AddComponent(touchGestures); Tower1Button.FindComponent<Transform2D>().ParentDependencyObject = null; Tower1Button.FindComponent<Transform2D>().DrawOrder = 0; sprite = "Content/Other/TowerBar/Chandler_Icon.wpk"; var Chandler_tower = Static.Functions.Create_entity("Chandler_tower", Static.Const.Tower_Position["Chandler_tower"].Item1 ,Static.Const.Tower_Position["Chandler_tower"].Item2,sprite); Chandler_tower.FindComponent<Transform2D>().ParentDependencyObject = null; Chandler_tower.FindComponent<Transform2D>().DrawOrder = 0; Chandler_tower.AddComponent(new RectangleCollider()); Chandler_tower.AddComponent(new TouchGestures()); touchGestures.TouchMoved += touchGestures_TouchMoved; touchGestures.TouchReleased += touchGestures_TouchReleased; Chandler_tower.FindComponent<TouchGestures>().TouchMoved += touchGestures_TouchMoved; Chandler_tower.FindComponent<TouchGestures>().TouchReleased += touchGestures_TouchReleased; TowersBar.AddChild(Chandler_tower); TowersBar.AddChild(Tower1Button); }
protected override void CreateScene() { FixedCamera2D camera2d = new FixedCamera2D("camera"); camera2d.BackgroundColor = Color.White; EntityManager.Add(camera2d); // FrontController Entity frontController = new Entity() .AddComponent(new Transform2D() { X = 67, Y = 203, DrawOrder = 0.9f, }) .AddComponent(new Sprite("Content/FrontController.wpk")) .AddComponent(new SpriteRenderer(DefaultLayers.Alpha)); EntityManager.Add(frontController); // Top Controller Entity topController = new Entity() .AddComponent(new Transform2D() { X = 656, Y = 249, DrawOrder = 0.9f, }) .AddComponent(new Sprite("Content/TopController.wpk")) .AddComponent(new SpriteRenderer(DefaultLayers.Alpha)); EntityManager.Add(topController); // Sticks Entity leftParent = new Entity() .AddComponent(new Transform2D() { Origin = Vector2.One / 2, Position = new Vector2(183, 311), DrawOrder = 0.5f, }); this.EntityManager.Add(leftParent); this.leftJoystick = new Entity() .AddComponent(new Transform2D() { Origin = Vector2.One / 2, }) .AddComponent(new SpriteAtlas("Content/Buttons.wpk", "JoyStick")) .AddComponent(new SpriteAtlasRenderer(DefaultLayers.Alpha)); leftParent.AddChild(leftJoystick); Entity rightParent = new Entity() .AddComponent(new Transform2D() { Origin = Vector2.One / 2, Position = new Vector2(427, 407), DrawOrder = 0.5f, }); this.EntityManager.Add(rightParent); this.rightJoystick = new Entity() .AddComponent(new Transform2D() { Origin = Vector2.One / 2, }) .AddComponent(new SpriteAtlas("Content/Buttons.wpk", "JoyStick")) .AddComponent(new SpriteAtlasRenderer(DefaultLayers.Alpha)); rightParent.AddChild(rightJoystick); // Button A this.buttonA = new Entity() .AddComponent(new Transform2D() { Origin = Vector2.One / 2, X = 509, Y = 349, DrawOrder = 0.5f, }) .AddComponent(new SpriteAtlas("Content/Buttons.wpk", "circlePressed")) .AddComponent(new SpriteAtlasRenderer(DefaultLayers.Alpha)); EntityManager.Add(buttonA); // Button B this.buttonB = new Entity() .AddComponent(new Transform2D() { Origin = Vector2.One / 2, X = 552, Y = 305, DrawOrder = 0.5f, }) .AddComponent(new SpriteAtlas("Content/Buttons.wpk", "circlePressed")) .AddComponent(new SpriteAtlasRenderer(DefaultLayers.Alpha)); EntityManager.Add(buttonB); // ButtonX this.buttonX = new Entity() .AddComponent(new Transform2D() { Origin = Vector2.One / 2, X = 465, Y = 305, DrawOrder = 0.5f, }) .AddComponent(new SpriteAtlas("Content/Buttons.wpk", "circlePressed")) .AddComponent(new SpriteAtlasRenderer(DefaultLayers.Alpha)); EntityManager.Add(buttonX); // ButtonY this.buttonY = new Entity() .AddComponent(new Transform2D() { Origin = Vector2.One / 2, X = 507, Y = 261, DrawOrder = 0.5f, }) .AddComponent(new SpriteAtlas("Content/Buttons.wpk", "circlePressed")) .AddComponent(new SpriteAtlasRenderer(DefaultLayers.Alpha)); EntityManager.Add(buttonY); // Button Back this.buttonBack = new Entity() .AddComponent(new Transform2D() { Origin = Vector2.One / 2, X = 288, Y = 312, DrawOrder = 0.5f, }) .AddComponent(new SpriteAtlas("Content/Buttons.wpk", "rectangularPressed")) .AddComponent(new SpriteAtlasRenderer(DefaultLayers.Alpha)); EntityManager.Add(buttonBack); // Start this.buttonStart = new Entity() .AddComponent(new Transform2D() { Origin = Vector2.One / 2, X = 406, Y = 310, DrawOrder = 0.5f, }) .AddComponent(new SpriteAtlas("Content/Buttons.wpk", "rectangularPressed")) .AddComponent(new SpriteAtlasRenderer(DefaultLayers.Alpha)); EntityManager.Add(buttonStart); // DPad Up this.dpadUp = new Entity() .AddComponent(new Transform2D() { Origin = Vector2.One / 2, X = 262, Y = 381, DrawOrder = 0.5f, }) .AddComponent(new SpriteAtlas("Content/Buttons.wpk", "DPad")) .AddComponent(new SpriteAtlasRenderer(DefaultLayers.Alpha)); EntityManager.Add(dpadUp); // DPad Down this.dpadDown = new Entity() .AddComponent(new Transform2D() { Origin = Vector2.One / 2, Rotation = (float)Math.PI, X = 262, Y = 435, DrawOrder = 0.5f, }) .AddComponent(new SpriteAtlas("Content/Buttons.wpk", "DPad")) .AddComponent(new SpriteAtlasRenderer(DefaultLayers.Alpha)); EntityManager.Add(dpadDown); // DPad Left this.dpadLeft = new Entity() .AddComponent(new Transform2D() { Origin = Vector2.One / 2, Rotation = (float)-Math.PI / 2, X = 231, Y = 408, DrawOrder = 0.5f, }) .AddComponent(new SpriteAtlas("Content/Buttons.wpk", "DPad")) .AddComponent(new SpriteAtlasRenderer(DefaultLayers.Alpha)); EntityManager.Add(dpadLeft); // DPad Right this.dpadRight = new Entity() .AddComponent(new Transform2D() { Origin = Vector2.One / 2, Rotation = (float)Math.PI / 2, X = 289, Y = 408, DrawOrder = 0.5f, }) .AddComponent(new SpriteAtlas("Content/Buttons.wpk", "DPad")) .AddComponent(new SpriteAtlasRenderer(DefaultLayers.Alpha)); EntityManager.Add(dpadRight); // Left shoulder this.leftShoulder = new Entity() .AddComponent(new Transform2D() { Origin = Vector2.One / 2, X = 739, Y = 364, DrawOrder = 0.5f, }) .AddComponent(new SpriteAtlas("Content/Buttons.wpk", "LeftShoulderPressed")) .AddComponent(new SpriteAtlasRenderer(DefaultLayers.Alpha)); EntityManager.Add(leftShoulder); // Right shoulder this.rightShoulder = new Entity() .AddComponent(new Transform2D() { Origin = Vector2.One / 2, X = 1130, Y = 364, DrawOrder = 0.5f, }) .AddComponent(new SpriteAtlas("Content/Buttons.wpk", "RightShoulder")) .AddComponent(new SpriteAtlasRenderer(DefaultLayers.Alpha)); EntityManager.Add(rightShoulder); // Left trigger this.leftTrigger = new Entity() .AddComponent(new Transform2D() { Origin = Vector2.One / 2, X = 759, Y = 291, DrawOrder = 0.5f, }) .AddComponent(new SpriteAtlas("Content/Buttons.wpk", "LeftTrigger")) .AddComponent(new SpriteAtlasRenderer(DefaultLayers.Alpha)); EntityManager.Add(leftTrigger); // Right trigger this.rightTrigger = new Entity() .AddComponent(new Transform2D() { Origin = Vector2.One / 2, X = 1112, Y = 291, DrawOrder = 0.5f, }) .AddComponent(new SpriteAtlas("Content/Buttons.wpk", "RightTrigger")) .AddComponent(new SpriteAtlasRenderer(DefaultLayers.Alpha)); EntityManager.Add(rightTrigger); // Texts this.leftStickText = new TextBlock() { Text = "LeftStick: " + Vector2.Zero, Foreground = Color.Gray, Margin = new Thickness(263, 627, 0, 0), }; EntityManager.Add(this.leftStickText); this.rightStickText = new TextBlock() { Text = "RightStick: " + Vector2.Zero, Foreground = Color.Gray, Margin = new Thickness(263, 657, 0, 0), }; EntityManager.Add(this.rightStickText); this.leftTriggerText = new TextBlock() { Text = "LeftTrigger: 0", Foreground = Color.Gray, Margin = new Thickness(856, 627, 0, 0), }; EntityManager.Add(this.leftTriggerText); this.rightTriggerText = new TextBlock() { Text = "RightTrigger: 0", Foreground = Color.Gray, Margin = new Thickness(856, 657, 0, 0), }; EntityManager.Add(this.rightTriggerText); this.AddSceneBehavior(new GamePadSceneBehavior(), SceneBehavior.Order.PostUpdate); }
/// <summary> /// Create a hand anchor /// </summary> /// <param name="root">The root entity.</param> /// <param name="name">The name of the entity.</param> /// <returns>the new entity.</returns> private Entity ConfigureHandAnchor(Entity root, string name) { Entity anchor = root.FindChild(name); if (anchor == null) { anchor = new Entity(name) .AddComponent(new Transform3D()) .AddComponent(new HandRig()); root.AddChild(anchor); } return anchor; }
public Tower_Base(int x, int y, int counter, string sprite) { Tower_delay = new TimeSpan(0, 0, 0, 1, 2); Tower_cost = 75; Tower_target = ""; var X = x; var Y = y; Tower_sprite = sprite; Tower = Static.Functions.Create_entity("Tower1["+counter+"]", x, y,Tower_sprite ,ref Tower_bitmap); Tower_bitmap.DrawOrder = 0; Tower_bullet = new Bullet_Base(20, 4.0f, Tower.Name, "Content/Towers/Tower_Beta/Ammo1.wpk"); get_action access = new get_action(Tower_bullet.Get_var_value); Get_action = new Action(access); WaveServices.TimerFactory.CreateTimer("Shooting_break["+Tower.Name+"]", Tower_delay, Get_action); Tower.AddChild(Tower_bullet.Bullet); }
public Map_Base(string path,int n, int start_x, int start_y, int end_x, int end_y) { Map_Bitmaps = new Entity("Whole_Map"); Bitmap_Path = path; Bitmaps = new List<Block>(); Map_Blocks = new Block[5, 5]; range = n; ending_y = end_y; ending_x = end_x; map = new int[5, 5] { { 1, 0, 0, 0, 0 }, { 7, 8, 8, 10, 0 }, { 0, 0, 0, 3, 0 }, { 0, 0, 0, 3, 0 }, { 0, 0, 0, 7, 2 } }; for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { if (map[j, i] == 1) { starting_y = j; starting_x = i; } } } Create_Blocks(); for (int i = 0; i < 5; i++) { for (int j = 0 ; j < 5; j++) { //if ( Map_Blocks[j,i] != null && Map_Blocks[j,i].ID == "ROAD") //{ var toadd = Create_Bitmap_Map("Block [" + j + "]["+i+"]", Map_Blocks[j,i].Block_Name, Map_Blocks[j,i].Block_Position_X, Map_Blocks[j,i].Block_Poisiton_Y, Map_Blocks[j,i].Block_Width, Map_Blocks[j,i].Block_Height, Map_Blocks[j,i].Block_Position_X, Map_Blocks[j,i].Block_Poisiton_Y); Map_Bitmaps.AddChild(toadd); //} } } }
/// <summary> /// Creates the OVR position tracker position /// </summary> /// <param name="root">The root entity</param> /// <returns>The tracker anchor</returns> private Entity ConfigureTrackerAnchor(Entity root) { Entity anchor = root.FindChild(trackerAnchorName); if (anchor == null) { anchor = new Entity(trackerAnchorName) .AddComponent(new Transform3D()); root.AddChild(anchor); } return anchor; }
/// <summary> /// Creates a new column with recycled components. /// </summary> /// <param name="column">The column.</param> /// <returns></returns> public Entity CreateColumn(Column column, float zPosition) { // Empty column (the container) Entity entityColumn = new Entity() { Tag = COLUMNTAG } .AddComponent(new Transform3D()); // column element iteration to block entity Creation for (int i = 0; i < column.Count; i++) { var position = new Vector3(0, i * this.Scale.Z, zPosition); Color color = Color.Black; switch (column[i]) { case BlockTypeEnum.GROUND: color = Color.WhiteSmoke; break; case BlockTypeEnum.BOX: color = Color.BlueViolet; break; case BlockTypeEnum.PYRAMID: color = Color.Red; break; case BlockTypeEnum.SPEEDERBLOCK: color = Color.Yellow; break; case BlockTypeEnum.EMPTY: default: break; } // add child to column if (column[i] != BlockTypeEnum.EMPTY) { entityColumn.AddChild(this.CreateBlock(position, color, this.Scale, column[i])); } } return entityColumn; }
private Entity LoadModel(string model, string texture, Entity parent, bool isAdditive) { Entity entity = new Entity(model) .AddComponent(new Model(string.Format(PATHMODELS, model))) .AddComponent(new Transform3D()) .AddComponent(new ModelRenderer()); if (!isAdditive) { entity.AddComponent(new MaterialsMap(new BasicMaterial(string.Format(PATHMATERIAL, texture), DefaultLayers.Opaque))); } else { entity.AddComponent(new MaterialsMap(new BasicMaterial(string.Format(PATHMATERIAL, texture), DefaultLayers.Additive) { DiffuseColor = new Color(0.6f, 0.6f, 0.6f) })); } if (parent == null) { EntityManager.Add(entity); } else { parent.AddChild(entity); } return entity; }
private int _lastIndex; // INDEX OF LAST SPAWNED MONSTER #endregion Fields #region Constructors public LevelManager() { MoveMonster = false; // Creating Timer for Wave GetAction obj = new GetAction(ChangeWaveStatus); AccessFunction = new Action(obj); WaveTimerBreak = new TimeSpan(0, 0, 0, 30, 0); WaveServices.TimerFactory.CreateTimer("Wave_Break", Static.Const.L_Wave_Break_Timer[ Static.Const.List_Counter], AccessFunction); WaveClock = new Stopwatch(); WaveClock.Start(); _counter = 0; BaseTowerEntity = new Entity("Tower_set"); BaseMobEntity = new Entity("Monster_Set"); TowersBar = new Entity("Towers_Bar"); ScreenLayout = new Entity("Screen_layout"); Player = new Player_Classes.Player_Base(20, 500); MonsterList = new List<Mobs.Mob_Base>(); TowersList = new List<Towers_Classes.Tower_Base>(); Level = new Map_Base("Content/Maps/Test/", 5, 0, 0, 4, 4); MonsterList.Add(new Mobs.Mob_Base(Level.starting_x, Level.starting_y, Level.map,BaseMobEntity.NumChildrens)); _lastIndex= MonsterList.Count -1; BaseMobEntity.AddChild(MonsterList[0].Mob); Create_Layout(); Create_Towers_Bar(); }
private Entity CreateChildEntity(PhysicsComponent component, ColliderShape shape, bool addOffset) { if (shape == null) return null; switch (shape.Type) { case ColliderShapeTypes.Compound: { var entity = new Entity(); //We got to recurse var compound = (CompoundColliderShape)shape; for (var i = 0; i < compound.Count; i++) { var subShape = compound[i]; var subEntity = CreateChildEntity(component, subShape, true); //always add offsets to compounds if (subEntity != null) { entity.AddChild(subEntity); } } entity.Transform.LocalMatrix = Matrix.Identity; entity.Transform.UseTRS = false; compound.DebugEntity = entity; return entity; } case ColliderShapeTypes.Box: case ColliderShapeTypes.Capsule: case ColliderShapeTypes.ConvexHull: case ColliderShapeTypes.Cylinder: case ColliderShapeTypes.Sphere: case ColliderShapeTypes.Cone: { var mat = triggerMaterial; var rigidbodyComponent = component as RigidbodyComponent; if (rigidbodyComponent != null) { mat = rigidbodyComponent.IsKinematic ? kinematicMaterial : dynamicMaterial; mat = rigidbodyComponent.IsTrigger ? triggerMaterial : mat; } else if (component is CharacterComponent) { mat = characterMaterial; } else if (component is StaticColliderComponent) { var staticCollider = (StaticColliderComponent)component; mat = staticCollider.IsTrigger ? triggerMaterial : staticMaterial; } MeshDraw draw; var type = shape.GetType(); if (type == typeof(CapsuleColliderShape) || type == typeof(ConvexHullColliderShape)) { if (!debugMeshCache2.TryGetValue(shape, out draw)) { draw = shape.CreateDebugPrimitive(graphicsDevice); debugMeshCache2[shape] = draw; } } else { if (!debugMeshCache.TryGetValue(shape.GetType(), out draw)) { draw = shape.CreateDebugPrimitive(graphicsDevice); debugMeshCache[shape.GetType()] = draw; } } var entity = new Entity { new ModelComponent { Model = new Model { mat, new Mesh { Draw = draw } } } }; var offset = addOffset ? Matrix.RotationQuaternion(shape.LocalRotation) * Matrix.Translation(shape.LocalOffset) : Matrix.Identity; entity.Transform.LocalMatrix = shape.DebugPrimitiveMatrix * offset * Matrix.Scaling(shape.Scaling); entity.Transform.UseTRS = false; shape.DebugEntity = entity; return entity; } default: return null; } }
private Entity CreateChildEntity(PhysicsComponent component, ColliderShape shape, bool addOffset = false) { if (shape == null) return null; switch (shape.Type) { case ColliderShapeTypes.StaticPlane: { //Hmm TODO maybe can draw an infinite plane?? return null; } case ColliderShapeTypes.Compound: { var entity = new Entity(); //We got to recurse var compound = (CompoundColliderShape)shape; for (var i = 0; i < compound.Count; i++) { var subShape = compound[i]; var subEntity = CreateChildEntity(component, subShape, true); subEntity.Transform.UseTRS = false; entity.AddChild(subEntity); } entity.Transform.LocalMatrix = Matrix.Identity; entity.Transform.UseTRS = false; return entity; } default: { var mat = triggerMaterial; if (component is RigidbodyComponent) { mat = ((RigidbodyComponent)component).IsKinematic ? kinematicMaterial : dynamicMaterial; } else if (component is CharacterComponent) { mat = characterMaterial; } else if (component is StaticColliderComponent) { mat = staticMaterial; } var entity = new Entity { new ModelComponent { Model = new Model { mat, new Mesh { Draw = shape.CreateDebugPrimitive(graphicsDevice) } } } }; var offset = addOffset ? Matrix.RotationQuaternion(shape.LocalRotation)*Matrix.Translation(shape.LocalOffset) : Matrix.Identity; if (shape.Type == ColliderShapeTypes.ConvexHull) { var hullDesc = (ConvexHullColliderShape)shape; entity.Transform.LocalMatrix = shape.DebugPrimitiveMatrix * Matrix.Scaling(hullDesc.Scaling) * offset; } else { entity.Transform.LocalMatrix = shape.DebugPrimitiveMatrix * offset; } entity.Transform.UseTRS = false; return entity; } } }
/// <summary> /// Creates an eye anchor /// </summary> /// <param name="root">The root entity</param> /// <param name="eye">The eye type</param> /// <returns>The eye anchor</returns> private Entity ConfigureEyeAnchor(Entity root, VREyeType eye) { string eyeName = (eye == VREyeType.CenterEye) ? "Center" : (eye == VREyeType.LeftEye) ? "Left" : "Right"; string name = eyeName + eyeAnchorName; Entity anchor = root.FindChild(name); if (anchor == null) { anchor = new Entity(name) .AddComponent(new Transform3D()); if (eye == VREyeType.CenterEye) { anchor.AddComponent(new SoundListener3D()); } root.AddChild(anchor); } return anchor; }