public override VMPrimitiveExitCode Execute(VMStackFrame context, VMPrimitiveOperand args) { if (!VM.UseWorld) return VMPrimitiveExitCode.GOTO_TRUE; var operand = (VMPlaySoundOperand)args; FWAV fwav = context.ScopeResource.Get<FWAV>(operand.EventID); if (fwav == null) fwav = context.VM.Context.Globals.Resource.Get<FWAV>(operand.EventID); var owner = (operand.StackObjAsSource) ? context.StackObject : context.Caller; if (fwav != null && owner.SoundThreads.FirstOrDefault(x => x.Name == fwav.Name) == null) { var thread = HITVM.Get().PlaySoundEvent(fwav.Name); if (thread != null) { if (owner == null) return VMPrimitiveExitCode.GOTO_TRUE; if (!thread.AlreadyOwns(owner.ObjectID)) thread.AddOwner(owner.ObjectID); if (owner is VMAvatar && thread is HITThread) ((VMAvatar)owner).SubmitHITVars((HITThread)thread); var entry = new VMSoundEntry() { Sound = thread, Pan = !operand.NoPan, Zoom = !operand.NoZoom, Loop = operand.Loop, Name = fwav.Name }; owner.SoundThreads.Add(entry); if (owner.Thread != null) owner.TickSounds(); } } return VMPrimitiveExitCode.GOTO_TRUE; }
public VMSoundTransfer(short id, uint guid, VMSoundEntry sfx) { SourceID = id; SourceGUID = guid; SFX = sfx; }
public short SourceID; //only copy on ID+GUID match. In future, match on persist too? #endregion Fields #region Constructors public VMSoundTransfer(short id, uint guid, VMSoundEntry sfx) { SourceID = id; SourceGUID = guid; SFX = sfx; }