예제 #1
0
    public void AddTimedEffect(ITimedEffect te, IEntity source)
    {
        int id = next_id++;

        effects_waiting_to_end[te.time_point].Add(id);
        sources.Add(id, source);
        effects.Add(id, te);
    }
예제 #2
0
 /// <summary>
 /// Adds a single effect to the internal collection
 /// </summary>
 /// <param name="effect"></param>
 public void Add(ITimedEffect effect, int Level)
 {
     if (!Effects.ContainsKey(effect.GetTime(Level)))
     {
         Effects.Add(effect.GetTime(Level), new List <ITimedEffect>());
     }
     Effects[effect.GetTime(Level)].Add(effect);
 }
예제 #3
0
        public EditAbilityComponent(ITimedEffect effect)
        {
            InitializeComponent();
            CurrentEffect = effect;
            AbilityEffectDefinition aed = AbilityEffectDefinition.GetDefinition(effect.EffectType);

            this.label1.Text         = aed.FriendlyName;
            basetimevalue.Value      = (decimal)CurrentEffect.BaseTime;
            basedurationvalue.Value  = (decimal)CurrentEffect.BaseDuration;
            deltatimevalue.Value     = (decimal)CurrentEffect.DeltaTime;
            deltadurationvalue.Value = (decimal)CurrentEffect.DeltaDuration;
            desclabel.Text           = aed.Description;
            string[] values = effect.GetParamValues();

            for (int i = 0; i < aed.parameters.Count; i++)
            {
                string   name       = aed.parameters[i].Item1;
                char     ptype      = aed.parameters[i].Item2;
                string[] bothvalues = values[i].Split(',');
                string   basevalue  = bothvalues[0];
                string   deltavalue = bothvalues.Length == 2?bothvalues[1]:"";
                int      leftstart  = 20;
                int      topstart   = 80;
                int      topstride  = 40;
                int      leftinput  = 200;
                int      inputwidth = 64;


                Label l = new Label();
                l.Text     = name;
                l.AutoSize = true;
                l.Location = new Point(leftstart, topstart + topstride * i);
                this.Controls.Add(l);

                Control t1 = CraftInput(basevalue, ptype);
                t1.Width    = inputwidth;
                t1.Height   = 2;
                t1.Location = new Point(leftinput, topstart + topstride * i);
                this.Controls.Add(t1);
                this.Inputs.Add(t1);
                Control t2 = CraftInput(deltavalue, ptype);
                t2.Width    = inputwidth;
                t2.Height   = 2;
                t2.Location = new Point(leftinput + inputwidth, topstart + topstride * i);
                this.Controls.Add(t2);
                this.Inputs.Add(t2);
            }
            this.SuspendLayout();
            //add controls here!!


            this.ResumeLayout(false);
            this.PerformLayout();
        }
예제 #4
0
 public void EndEffects(TimePoint time_point, Player player)
 {
     for (int i = effects_waiting_to_end[time_point].Count - 1; i >= 0; i--)
     {
         int          id     = effects_waiting_to_end[time_point][i];
         ITimedEffect effect = effects[id];
         if (sources[id].controller == player)
         {
             EndEffect(id);
         }
     }
 }
예제 #5
0
 void WriteEffect(ITimedEffect effect)
 {
     writer.Write(effect.EffectType);
     writer.Write(effect.BaseTime);
     writer.Write(effect.DeltaTime);
     writer.Write(effect.BaseDuration);
     writer.Write(effect.DeltaDuration);
     writer.Write(effect.GetParamValues().Length);
     foreach (string s in effect.GetParamValues())
     {
         writer.Write(s);
     }
 }
예제 #6
0
        private void removeEffectToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (EffectList.SelectedItems.Count != 1)
            {
                return;
            }
            ListViewItem item   = EffectList.SelectedItems[0];
            ITimedEffect effect = (ITimedEffect)item.Tag;

            CurrentAbility.Effects.Remove(effect);
            EffectList.SelectedItems.Clear();
            EffectList.Items.Remove(item);
        }
예제 #7
0
    void EndEffect(int id)
    {
        ITimedEffect effect = effects[id];

        if (targets.ContainsKey(id))
        {
            effect.EndEffect(sources[id], targets[id]);
            targets.Remove(id);
        }
        else
        {
            effect.EndEffect(sources[id]);
        }
        effects_waiting_to_end[effect.time_point].Remove(id);
        sources.Remove(id);
    }
예제 #8
0
        public ITimedEffect ReadEffect()
        {
            ITimedEffect result = EffectHelper.CreateEmpty(reader.ReadString());

            result.BaseTime      = reader.ReadSingle();
            result.DeltaTime     = reader.ReadSingle();
            result.BaseDuration  = reader.ReadSingle();
            result.DeltaDuration = reader.ReadSingle();
            int paramcount = reader.ReadInt32();

            string[] eparams = new string[paramcount];
            for (int i = 0; i < paramcount; i++)
            {
                eparams[i] = reader.ReadString();
            }
            result.SetParamValues(eparams);
            return(result);
        }
예제 #9
0
 public void TrackTimedEffect(ITimedEffect effect, IEntity source, IEntity target)
 {
     timed_effect_manager.AddTimedEffect(effect, source, target);
 }