public override void Bind(Entity entity, Main main, bool creating = false) { entity.CannotSuspend = true; ModelInstance model = entity.GetOrCreate <ModelInstance>("Model"); ImplodeBlock implodeBlock = entity.GetOrCreate <ImplodeBlock>("ImplodeBlock"); model.Add(new Binding <Matrix>(model.Transform, implodeBlock.Transform)); implodeBlock.Add(new CommandBinding(implodeBlock.Delete, entity.Delete)); this.SetMain(entity, main); IBinding offsetBinding = null; model.Add(new NotifyBinding(delegate() { if (offsetBinding != null) { model.Remove(offsetBinding); } offsetBinding = new Binding <Vector3>(model.GetVector3Parameter("Offset"), implodeBlock.Offset); model.Add(offsetBinding); }, model.FullInstanceKey)); if (implodeBlock.StateId != Voxel.t.Empty) { Voxel.States.All[implodeBlock.StateId].ApplyToEffectBlock(model); } }
public override void Bind(Entity entity, Main main, bool creating = false) { Transform transform = entity.GetOrCreate <Transform>("Transform"); PhysicsBlock physics = entity.GetOrCreate <PhysicsBlock>("Physics"); ModelInstance model = entity.GetOrCreate <ModelInstance>("Model"); physics.Add(new TwoWayBinding <Matrix>(transform.Matrix, physics.Transform)); SceneryBlock sceneryBlock = entity.GetOrCreate <SceneryBlock>("SceneryBlock"); physics.Add(new Binding <Vector3, float>(physics.Size, x => new Vector3(x), sceneryBlock.Scale)); model.Add(new Binding <Matrix>(model.Transform, () => Matrix.CreateScale(sceneryBlock.Scale) * transform.Matrix, transform.Matrix, sceneryBlock.Scale)); this.SetMain(entity, main); entity.Add("IsAffectedByGravity", physics.IsAffectedByGravity); sceneryBlock.EditorProperties(); if (!main.EditorEnabled && !physics.IsAffectedByGravity && (sceneryBlock.Type.Value == Voxel.t.WhitePermanent || sceneryBlock.Type.Value == Voxel.t.White)) { Sound.AttachTracker(entity); AkSoundEngine.PostEvent(AK.EVENTS.PLAY_WHITE_LIGHT, entity); SoundKiller.Add(entity, AK.EVENTS.STOP_WHITE_LIGHT); physics.Add(new CommandBinding <Collidable, ContactCollection>(physics.Collided, delegate(Collidable other, ContactCollection contacts) { float impulse = contacts.Max(x => x.NormalImpulse); if (impulse > 0.2f) { AkSoundEngine.PostEvent(AK.EVENTS.PLAY_WHITE_LIGHT_HIT, entity); } })); } }
public override void Bind(Entity entity, Main main, bool creating = false) { entity.CannotSuspend = true; Transform transform = entity.GetOrCreate <Transform>("Transform"); PhysicsBlock physics = entity.GetOrCreate <PhysicsBlock>("Physics"); ModelInstance model = entity.GetOrCreate <ModelInstance>("Model"); physics.Add(new TwoWayBinding <Matrix>(transform.Matrix, physics.Transform)); Property <Vector3> scale = new Property <Vector3> { Value = new Vector3(0.5f) }; model.Add(new Binding <Matrix>(model.Transform, () => Matrix.CreateScale(scale) * transform.Matrix, scale, transform.Matrix)); entity.Add("Fade", new Animation ( new Animation.Delay(5.0f), new Animation.Vector3MoveTo(scale, Vector3.Zero, 1.0f), new Animation.Execute(entity.Delete) )); this.SetMain(entity, main); PhysicsBlock.CancelPlayerCollisions(physics); }
private void NewModel() { var m = ModelInstance.GetObject(); BuildModel(m); ModelInstance.Add(m); // 保存历史记录 SaveHistory(new TB_AccountHistory { ActionId = ActionInstance.Find(f => f.Name.Equals("AddEquipmentModel")).id, ObjectA = "[id=" + m.id + "] " + m.Name + ", " + m.Code }); ShowNotification("./equipment_model.aspx", "You have added a new Equipment model: " + m.Name + "(" + m.Code + ")."); }
public override void Bind(Entity entity, Main main, bool creating = false) { Transform transform = entity.GetOrCreate <Transform>("Transform"); PhysicsBlock physics = entity.GetOrCreate <PhysicsBlock>("Physics"); ModelInstance model = entity.GetOrCreate <ModelInstance>("Model"); physics.Add(new TwoWayBinding <Matrix>(transform.Matrix, physics.Transform)); SceneryBlock sceneryBlock = entity.GetOrCreate <SceneryBlock>("SceneryBlock"); physics.Add(new Binding <Vector3, float>(physics.Size, x => new Vector3(x), sceneryBlock.Scale)); model.Add(new Binding <Matrix>(model.Transform, () => Matrix.CreateScale(sceneryBlock.Scale) * transform.Matrix, transform.Matrix, sceneryBlock.Scale)); this.SetMain(entity, main); entity.Add("IsAffectedByGravity", physics.IsAffectedByGravity); sceneryBlock.EditorProperties(); }