public void AddEffect(EffectInformation effect, DungeonCharacter dc) { if (!Effects.ContainsKey(dc)) { Effects.Add(dc,new List<EffectInformation>()); } Effects[dc].Add(effect); }
public JOYSTICK_TYPE Connect(System.Windows.Forms.Control Parent) { ForceFeedbackSupported = false; //create force feedback capable joystick device. try { foreach (DeviceInstance di in Manager.GetDevices( DeviceClass.GameControl, EnumDevicesFlags.AttachedOnly | EnumDevicesFlags.ForceFeeback)) { ForceFeedbackSupported = true; device = new Device(di.InstanceGuid); break; } if (device == null) { //create force feedback capable joystick device. foreach (DeviceInstance di in Manager.GetDevices( DeviceClass.GameControl, EnumDevicesFlags.AttachedOnly)) { device = new Device(di.InstanceGuid); break; } //Throw exception if joystick not found. //throw new Exception("No joystick that supports forced feedback found."); if (device == null) { return(JOYSTICK_TYPE.NO_JOYSTICK); } } } catch (System.TypeInitializationException) { // Managed Direct X doesn't seem to be present or working return(JOYSTICK_TYPE.NO_JOYSTICK); } //set cooperative level. device.SetCooperativeLevel( Parent, CooperativeLevelFlags.Exclusive | CooperativeLevelFlags.Background); if (ForceFeedbackSupported) { // Since we will be playing force feedback effects, we should disable the // auto-centering spring. device.Properties.AutoCenter = false; } //Set axis mode absolute. device.Properties.AxisModeAbsolute = true; //Acquire joystick for capturing. device.Acquire(); //Configure axes int[] axis = null; foreach (DeviceObjectInstance doi in device.Objects) { //Set axes ranges. if ((doi.ObjectId & (int)DeviceObjectTypeFlags.Axis) != 0) { device.Properties.SetRange( ParameterHow.ById, doi.ObjectId, new InputRange(-5000, 5000)); } int[] temp; // Get info about first two FF axii on the device if ((doi.Flags & (int)ObjectInstanceFlags.Actuator) != 0) { if (axis != null) { temp = new int[axis.Length + 1]; axis.CopyTo(temp, 0); axis = temp; } else { axis = new int[1]; } // Store the offset of each axis. axis[axis.Length - 1] = doi.Offset; if (axis.Length == 2) { break; } } } //See if joystick supports ConstantForce and set it. foreach (EffectInformation ei in device.GetEffects(EffectType.All)) { //If the joystick supports ConstantForce, then apply it. if (DInputHelper.GetTypeCode(ei.EffectType) == (int)EffectType.ConstantForce) { // Fill in some generic values for the effect. e = new Effect(); e.SetDirection(new int[axis.Length]); e.SetAxes(new int[axis.Length]); e.ConditionStruct = new Condition[axis.Length]; e.EffectType = EffectType.ConstantForce; e.Constant = new ConstantForce(); e.Constant.Magnitude = 10000; e.Duration = (int)DI.Infinite; e.Gain = 10000; e.SamplePeriod = 0; e.TriggerButton = (int)Microsoft.DirectX.DirectInput.Button.NoTrigger; e.TriggerRepeatInterval = (int)DI.Infinite; e.Flags = EffectFlags.ObjectOffsets | EffectFlags.Cartesian; e.SetAxes(axis); var dd = e.GetDirection(); dd[0] = -100; dd[1] = 100; e.SetDirection(dd); // Create the effect, using the passed in guid. eo = new EffectObject(ei.EffectGuid, e, device); eo.Start(1, EffectStartFlags.NoDownload); force_ei = ei; break; } } if (eo == null) { return(JOYSTICK_TYPE.NO_FORCE_FEEDBACK); } return(JOYSTICK_TYPE.FORCE_FEEDBACK); }
public EffectInformation GetProperty(StatsType type) { EffectInformation temp = new EffectInformation(type, 0); int index = Properties.IndexOf(temp); return Properties.ElementAt<EffectInformation>(index); }
internal StatAugmentCommandThread(EffectInformation effect, DungeonCharacter target) { _effect = effect; _target = target; }
public JOYSTICK_TYPE Connect(System.Windows.Forms.Control Parent) { ForceFeedbackSupported = false; //create force feedback capable joystick device. try { foreach (DeviceInstance di in Manager.GetDevices( DeviceClass.GameControl, EnumDevicesFlags.AttachedOnly | EnumDevicesFlags.ForceFeeback)) { ForceFeedbackSupported = true; device = new Device(di.InstanceGuid); break; } if (device == null) { //create force feedback capable joystick device. foreach (DeviceInstance di in Manager.GetDevices( DeviceClass.GameControl, EnumDevicesFlags.AttachedOnly)) { device = new Device(di.InstanceGuid); break; } //Throw exception if joystick not found. //throw new Exception("No joystick that supports forced feedback found."); if (device == null) { return JOYSTICK_TYPE.NO_JOYSTICK; } } } catch (System.TypeInitializationException) { // Managed Direct X doesn't seem to be present or working return JOYSTICK_TYPE.NO_JOYSTICK; } //set cooperative level. device.SetCooperativeLevel( Parent, CooperativeLevelFlags.Exclusive | CooperativeLevelFlags.Background); if (ForceFeedbackSupported) { // Since we will be playing force feedback effects, we should disable the // auto-centering spring. device.Properties.AutoCenter = false; } //Set axis mode absolute. device.Properties.AxisModeAbsolute = true; //Acquire joystick for capturing. device.Acquire(); //Configure axes int[] axis = null; foreach (DeviceObjectInstance doi in device.Objects) { //Set axes ranges. if ((doi.ObjectId & (int)DeviceObjectTypeFlags.Axis) != 0) { device.Properties.SetRange( ParameterHow.ById, doi.ObjectId, new InputRange(-5000, 5000)); } int[] temp; // Get info about first two FF axii on the device if ((doi.Flags & (int)ObjectInstanceFlags.Actuator) != 0) { if (axis != null) { temp = new int[axis.Length + 1]; axis.CopyTo(temp, 0); axis = temp; } else { axis = new int[1]; } // Store the offset of each axis. axis[axis.Length - 1] = doi.Offset; if (axis.Length == 2) { break; } } } //See if joystick supports ConstantForce and set it. foreach (EffectInformation ei in device.GetEffects(EffectType.All)) { //If the joystick supports ConstantForce, then apply it. if (DInputHelper.GetTypeCode(ei.EffectType) == (int)EffectType.ConstantForce) { // Fill in some generic values for the effect. e = new Effect(); e.SetDirection(new int[axis.Length]); e.SetAxes(new int[axis.Length]); e.ConditionStruct = new Condition[axis.Length]; e.EffectType = EffectType.ConstantForce; e.Constant = new ConstantForce(); e.Constant.Magnitude = 10000; e.Duration = (int)DI.Infinite; e.Gain = 10000; e.SamplePeriod = 0; e.TriggerButton = (int)Microsoft.DirectX.DirectInput.Button.NoTrigger; e.TriggerRepeatInterval = (int)DI.Infinite; e.Flags = EffectFlags.ObjectOffsets | EffectFlags.Cartesian; e.SetAxes(axis); var dd = e.GetDirection(); dd[0] = -100; dd[1] = 100; e.SetDirection(dd); // Create the effect, using the passed in guid. eo = new EffectObject(ei.EffectGuid, e, device); eo.Start(1, EffectStartFlags.NoDownload); force_ei = ei; break; } } if (eo == null) { return JOYSTICK_TYPE.NO_FORCE_FEEDBACK; } return JOYSTICK_TYPE.FORCE_FEEDBACK; }