public override void OnAttached( AbstractEntity entity ) { bool needAllContacts = entity.HasBool("need_all_contacts") && entity.GetBool("need_all_contacts"); string modelName = entity.GetString(CommonNames.Mesh); VolumeCollection[] collisionVolumes = Game.Instance.ContentManager.Load <MagmaModel>(modelName).VolumeCollection; if (collisionVolumes == null) { throw new System.Exception(string.Format("model {0} has no collision volumes!", modelName)); } if (entity.HasString("bv_type")) { string bv_type = entity.GetString("bv_type"); if (bv_type == "cylinder") { object[] bvCylinders = new object[collisionVolumes.Length]; for (int i = 0; i < collisionVolumes.Length; ++i) { bvCylinders[i] = collisionVolumes[i].GetVolume(VolumeType.Cylinder3); } Game.Instance.Simulation.CollisionManager.AddCylinderCollisionEntity(entity as Entity, this, bvCylinders, needAllContacts); } else if (bv_type == "alignedbox3tree") { object[] bvTrees = new object[collisionVolumes.Length]; for (int i = 0; i < collisionVolumes.Length; ++i) { bvTrees[i] = collisionVolumes[i].GetVolume(VolumeType.AlignedBox3Tree); } Game.Instance.Simulation.CollisionManager.AddAlignedBox3TreeCollisionEntity(entity as Entity, this, bvTrees, needAllContacts); } else if (bv_type == "sphere") { object[] bvSpheres = new object[collisionVolumes.Length]; for (int i = 0; i < collisionVolumes.Length; ++i) { bvSpheres[i] = collisionVolumes[i].GetVolume(VolumeType.Sphere3); } Game.Instance.Simulation.CollisionManager.AddSphereCollisionEntity(entity as Entity, this, bvSpheres, needAllContacts); } else if (bv_type == "alignedbox3") { AlignedBox3[] bvBoxes = new AlignedBox3[collisionVolumes.Length]; for (int i = 0; i < collisionVolumes.Length; ++i) { bvBoxes[i] = (AlignedBox3)collisionVolumes[i].GetVolume(VolumeType.AlignedBox3); } throw new System.Exception("bounding boxes not yet supported!"); } } }
public override void OnAttached(AbstractEntity entity) { Debug.Assert(entity.HasAttribute(CommonNames.Kind) && entity.GetString(CommonNames.Kind) == "player"); base.OnAttached(entity); Entity playerConstants = Game.Instance.Simulation.EntityManager["player_constants"]; if (entity.HasString(CommonNames.PlayerName)) { entity.GetStringAttribute(CommonNames.PlayerName).ValueChanged += PlayerNameChanged; } if (entity.HasInt(CommonNames.GamePadIndex)) { entity.GetIntAttribute(CommonNames.GamePadIndex).ValueChanged += GamePadIndexChanged; } if (entity.HasFloat(CommonNames.Health)) { entity.GetFloatAttribute(CommonNames.Health).ValueChanged += HealthChanged; } if (playerConstants.HasFloat(CommonNames.MaxHealth)) { playerConstants.GetFloatAttribute(CommonNames.MaxHealth).ValueChanged += MaxHealthChanged; } if (entity.HasFloat(CommonNames.Energy)) { entity.GetFloatAttribute(CommonNames.Energy).ValueChanged += EnergyChanged; } if (playerConstants.HasFloat(CommonNames.MaxEnergy)) { playerConstants.GetFloatAttribute(CommonNames.MaxEnergy).ValueChanged += MaxEnergyChanged; } if (entity.HasInt(CommonNames.Frozen)) { entity.GetIntAttribute(CommonNames.Frozen).ValueChanged += FrozenChanged; } entity.GetIntAttribute(CommonNames.Lives).ValueChanged += LivesChanged; Game.Instance.Simulation.CurrentUpdateQueue.AddUpdate(new AddRenderableUpdate((Renderable)Updatable)); }
public override void OnDetached(AbstractEntity entity) { Game.Instance.Simulation.CurrentUpdateQueue.AddUpdate(new RemoveRenderableUpdate((Renderable)Updatable)); Entity playerConstants = Game.Instance.Simulation.EntityManager["player_constants"]; if (entity.HasString(CommonNames.PlayerName)) { entity.GetStringAttribute(CommonNames.PlayerName).ValueChanged -= PlayerNameChanged; } if (entity.HasInt(CommonNames.GamePadIndex)) { entity.GetIntAttribute(CommonNames.GamePadIndex).ValueChanged -= GamePadIndexChanged; } if (entity.HasFloat(CommonNames.Health)) { entity.GetFloatAttribute(CommonNames.Health).ValueChanged -= HealthChanged; } if (playerConstants != null && playerConstants.HasFloat(CommonNames.MaxHealth)) { playerConstants.GetFloatAttribute(CommonNames.MaxHealth).ValueChanged -= MaxHealthChanged; } if (entity.HasFloat(CommonNames.Energy)) { entity.GetFloatAttribute(CommonNames.Energy).ValueChanged -= EnergyChanged; } if (playerConstants != null && playerConstants.HasFloat(CommonNames.MaxEnergy)) { playerConstants.GetFloatAttribute(CommonNames.MaxEnergy).ValueChanged -= MaxEnergyChanged; } if (entity.HasInt(CommonNames.Frozen)) { entity.GetIntAttribute(CommonNames.Frozen).ValueChanged -= FrozenChanged; } entity.GetIntAttribute(CommonNames.Lives).ValueChanged -= LivesChanged; base.OnDetached(entity); }