예제 #1
0
        public SceneGaming()
        {
            SceneTimeFix        = 1.4F;
            MenuCooldownCounter = new CounterObject(Sec(2));
            EndDelay            = new CounterObject(Global.DefaultEndDelayLimit);
            IntervalOfWave      = Global.DefaultIntervalOfWave;
            WaveNo     = new CounterObject(0);
            Waves      = new List <WaveLine>();
            WaveEvents = new Dictionary <string, WaveEventHandle>();


            _UIPlayName   = new ObjectUI(75, 20, 150, 25, new DrawUIText(Color.Black, Color.WhiteSmoke, Color.Empty, Color.Empty, 0, 0, GlobalPlayer.PlayerName, new Font("微軟正黑體", 11), GlobalFormat.MiddleLeft));
            _UIEnergyBar  = new ObjectUI(80, 45, 150, 15, new DrawUICounterBar(GlobalColors.EnergyBar, Color.Black, Color.AliceBlue, 2, false));
            _UISkillIcon1 = new ObjectUI(250, 10, 50, 50, _DrawSkill1);
            _UISkillIcon2 = new ObjectUI(320, 10, 50, 50, _DrawSkill2);

            Skill1 = GlobalScenes.ChoiceSkill1;
            Skill2 = GlobalScenes.ChoiceSkill2;

            UIObjects.Add(_UISkillIcon1);
            UIObjects.Add(_UISkillIcon2);
            UIObjects.Add(_UIPlayName);
            UIObjects.Add(_UIEnergyBar);
            GameObjects.ObjectDead += OnObjectDead;
            ShowMenu = false;
        }
예제 #2
0
        /// <summary>
        /// 特性基礎物件初始化
        /// </summary>
        public PropertyBase()
        {
            Target       = new TargetSet();
            DurationTime = new CounterObject(-1);

            Target.ObjectChanged += (s, o, n) => { OnTargetObjectChanged(o, n); };
        }
예제 #3
0
 /// <summary>
 /// 新增能量條繪圖物件
 /// </summary>
 /// <param name="drawColor">繪圖工具管理物件</param>
 /// <param name="borderWidth">框線粗細</param>
 /// <param name="reverse">是否反向顯示</param>
 /// <param name="bindObject">綁定物件</param>
 public DrawUICounterBar(DrawColors drawColor, int borderWidth, bool reverse, CounterObject bindingCounter = null)
     : base(drawColor)
 {
     BorderWidth    = borderWidth;
     Reverse        = reverse;
     BindingCounter = bindingCounter;
 }
예제 #4
0
 /// <summary>
 /// 使用繪製物件和移動物件建立互動性活動物件
 /// </summary>
 /// <param name="drawObject">繪製物件</param>
 /// <param name="moveObject">移動物件</param>
 public ObjectActive(DrawBase drawObject, MoveBase moveObject)
     : base(drawObject, moveObject)
 {
     Skills          = new SkillCollection();
     Energy          = new CounterObject(Global.DefaultEnergyLimit, Global.DefaultEnergyLimit, false);
     EnergyGetPerSec = Global.DefaultEnergyGetPerSec;
 }
예제 #5
0
 /// <summary>
 /// 擁有此特性的物件死亡時會逐漸縮小(放大)並淡出
 /// </summary>
 /// <param name="fadeTime">縮小/淡出時間計時器(毫秒)</param>
 /// <param name="fadeTime">計時器結束時大小比例</param>
 /// <param name="fadeTime">計時器結束時透明度</param>
 /// <param name="deadType">符合指定的死亡方式才會觸發</param>
 public PropertyDeadSmoke(int fadeTime, float finelScale, float finelOpacity, ObjectDeadType deadType)
 {
     DeadType       = deadType;
     FadeTime       = new CounterObject(fadeTime);
     FinelScale     = finelScale;
     FinelOpacity   = finelOpacity;
     BreakAfterDead = false;
 }
예제 #6
0
 /// <summary>
 /// 新增瘋狗擺頭特性,擁有此特性的物件往目標移動時會產生偏移
 /// </summary>
 /// <param name="durationTime">持續時間</param>
 /// <param name="changeTime">方向改變間格(毫秒)</param>
 /// <param name="offsetAngleMin">方向偏移最小值</param>
 /// <param name="offsetAngleMax">方向偏移最大值</param>
 /// <param name="anglePerChange">每次偏移值,0為每次偏移後為隨機角度</param>
 public PropertyDrunken(int durationTime, int changeTime, int offsetAngleMin, int offsetAngleMax, int anglePerChange)
 {
     DurationTime.Limit = durationTime;
     OffsetAngleMin     = offsetAngleMin;
     OffsetAngleMax     = offsetAngleMax;
     AnglePerChange     = anglePerChange;
     ChangeTime         = new CounterObject(changeTime);
 }
예제 #7
0
 /// <summary>
 /// 基本特效建構式
 /// </summary>
 /// <param name="enablingTime">生效時間</param>
 /// <param name="durationTime">持續時間</param>
 /// <param name="disablingTime">消退時間</param>
 public EffectBase(int enablingTime, int durationTime, int disablingTime)
 {
     EnablingTime  = new CounterObject(enablingTime);
     DurationTime  = new CounterObject(durationTime);
     DisablingTime = new CounterObject(disablingTime);
     _Status       = enablingTime == 0 ? EffectStatus.Enabled : EffectStatus.Enabling;
     CanBreak      = true;
 }
예제 #8
0
 /// <summary>
 /// 新增逐漸輪替畫面顏色的特效
 /// </summary>
 /// <param name="colors">要繪製的顏色陣列</param>
 /// <param name="durationTime">持續時間(毫秒),小於0為永久</param>
 /// <param name="rotateTime">輪替時間(毫秒)</param>
 /// <param name="convertTime">轉換時間(毫秒)</param>
 public EffectDyeingRotate(Color[] colors, int durationTime, int rotateTime, int convertTime)
     : base(rotateTime, durationTime, rotateTime)
 {
     Status       = EffectStatus.Enabling;
     Colors       = colors;
     _RotateTime  = new CounterObject(rotateTime);
     _ConvertTime = new CounterObject(convertTime);
 }
예제 #9
0
 /// <summary>
 /// 新增誘餌技能,放出分身
 /// </summary>
 /// <param name="costEnergy">耗費能量</param>
 /// <param name="cooldown">冷卻時間(毫秒)</param>
 /// <param name="baitLife">誘餌生命(毫秒)</param>
 /// <param name="baitSpeed">誘餌速度</param>
 public SkillBait(int costEnergy, int cooldown, int baitLife, int baitSpeed)
 {
     Status     = SkillStatus.Disabled;
     CostEnergy = costEnergy;
     Cooldown   = new CounterObject(cooldown);
     BaitLife   = baitLife;
     BaitSpeed  = baitSpeed;
 }
예제 #10
0
 /// <summary>
 /// 使用繪圖工具管理物件新增文字繪圖物件
 /// </summary>
 /// <param name="drawColor">繪圖工具管理物件</param>
 /// <param name="borderWidtrh">框線粗細</param>
 /// <param name="readius">圓角大小</param>
 /// <param name="text">文字</param>
 /// <param name="font">字型</param>
 /// <param name="drawFormat">繪製設定</param>
 /// <param name="animation">切換時間</param>
 public DrawUITextScroll(DrawColors drawColor, int borderWidtrh, int readius, string text, Font font, StringFormat drawFormat, int animation)
     : base(drawColor, borderWidtrh, readius, "", font, drawFormat)
 {
     Animation      = new CounterObject(animation);
     Text           = text;
     IncompleteShow = true;
     IgnoreSameText = false;
 }
예제 #11
0
 /// <summary>
 /// 新增睡眠技能,恢復能量
 /// </summary>
 /// <param name="costEnergy">耗費能量</param>
 /// <param name="cooldown">冷卻時間(毫秒)</param>
 /// <param name="channeled">持續時間(毫秒)</param>
 public SkillSleep(int getEnergyPerSec, int channeled, int cooldown)
 {
     Status          = SkillStatus.Disabled;
     GetEnergyPerSec = getEnergyPerSec;
     Channeled       = new CounterObject(channeled);
     Cooldown        = new CounterObject(cooldown);
     Animation       = new CounterObject(100);
 }
예제 #12
0
 /// <summary>
 /// 新增護盾技能,護盾破除之前無敵
 /// </summary>
 /// <param name="collisionPower">護盾撞擊力量</param>
 /// <param name="costEnergy">耗費能量</param>
 /// <param name="costEnergyPerSec">每秒耗費能量</param>
 /// <param name="channeled">最大引導時間(毫秒</param>
 /// <param name="cooldown">冷卻時間(毫秒)</param>
 public SkillShield(int collisionPower, int costEnergy, int costEnergyPerSec, int channeled, int cooldown)
 {
     Status           = SkillStatus.Disabled;
     CollisionPower   = collisionPower;
     CostEnergy       = costEnergy;
     CostEnergyPerSec = costEnergyPerSec;
     Channeled        = new CounterObject(channeled);
     Cooldown         = new CounterObject(cooldown);
 }
예제 #13
0
 /// <summary>
 /// 新增能量條繪圖物件
 /// </summary>
 /// <param name="mainColor">條棒顏色</param>
 /// <param name="borderColor">外框顏色</param>
 /// <param name="backColor">底色</param>
 /// <param name="borderWidth">框線粗細</param>
 /// <param name="reverse">是否反向顯示</param>
 /// <param name="bindObject">綁定物件</param>
 public DrawUICounterBar(Color mainColor, Color borderColor, Color backColor, int borderWidth, bool reverse, CounterObject bindingCounter = null)
 {
     Colors.SetColor("Main", mainColor);
     Colors.SetColor("Border", borderColor);
     Colors.SetColor("Back", backColor);
     BorderWidth    = borderWidth;
     Reverse        = reverse;
     BindingCounter = bindingCounter;
 }
예제 #14
0
 /// <summary>
 /// 新增衝刺技能,提升最後一次移動距離
 /// </summary>
 /// <param name="costEnergy">耗費能量</param>
 /// <param name="cooldown">冷卻時間(毫秒)</param>
 /// <param name="speedMultiple">衝刺距離倍數(以所有者速度為基準)</param>
 /// <param name="speedConstant">衝刺距離常數</param>
 /// <param name="smoking">是否加上冒煙特效</param>
 public SkillSprint(int costEnergy, int cooldown, int speedMultiple, int speedConstant, bool smoking)
 {
     Status        = SkillStatus.Disabled;
     CostEnergy    = costEnergy;
     Cooldown      = new CounterObject(cooldown);
     SpeedMultiple = speedMultiple;
     SpeedConstant = speedConstant;
     Smoking       = smoking;
 }
예제 #15
0
 /// <summary>
 /// 新增子彈時間技能 降低世界速度
 /// </summary>
 /// <param name="costEnergy">耗費能量</param>
 /// <param name="costEnergyPerSec">每秒耗費能量</param>
 /// <param name="channeled">最大引導時間(毫秒</param>
 /// <param name="cooldown">冷卻時間(毫秒)</param>
 /// <param name="slowRate">減慢程度(1為原速度的50%</param>
 public SkillBulletTime(int costEnergy, int costEnergyPerSec, int channeled, int cooldown, float slowRate)
 {
     Status           = SkillStatus.Disabled;
     CostEnergy       = costEnergy;
     CostEnergyPerSec = costEnergyPerSec;
     Channeled        = new CounterObject(channeled);
     Cooldown         = new CounterObject(cooldown);
     SlowRate         = slowRate;
 }
예제 #16
0
 /// <summary>
 /// 使用繪製物件和移動物件建立基本活動物件
 /// </summary>
 /// <param name="drawObject">繪製物件</param>
 /// <param name="moveObject">移動物件</param>
 public ObjectBase(DrawBase drawObject, MoveBase moveObject)
 {
     Layout     = new LayoutSet();
     Status     = ObjectStatus.Alive;
     League     = LeagueType.None;
     Life       = new CounterObject(-1);
     Propertys  = new PropertyCollection();
     DrawObject = drawObject;
     MoveObject = moveObject;
 }
예제 #17
0
 /// <summary>
 /// 新增散彈技能
 /// </summary>
 /// <param name="bulletCount">散彈數量</param>
 /// <param name="attackPower">殺傷力</param>
 /// <param name="costEnergy">耗費能量</param>
 /// <param name="cooldown">冷卻時間(毫秒)</param>
 public SkillShotgun(int bulletCount, int attackPower, int radiation, int costEnergy, int cooldown)
 {
     Status = SkillStatus.Disabled;
     BulletCount = bulletCount;
     AttackPower = attackPower;
     Radiation = radiation;
     CostEnergy = costEnergy;
     Cooldown = new CounterObject(cooldown);
     Channeled = new CounterObject(-1);
 }
예제 #18
0
 /// <summary>
 /// 新增衝擊波技能,擊退周圍物件
 /// </summary>
 /// <param name="costEnergy">耗費能量</param>
 /// <param name="costEnergyPerSec">每秒耗費能量</param>
 /// <param name="channeled">最大引導時間(毫秒)</param>
 /// <param name="cooldown">冷卻時間(毫秒)</param>
 /// <param name="pushSycle">釋放周期(毫秒)</param>
 /// <param name="pushPower">擊退力量</param>
 /// <param name="range">擊退範圍</param>
 public SkillShockwave(int costEnergy, int costEnergyPerSec, int channeled, int cooldown, int pushSycle, int pushPower, int range)
 {
     Status           = SkillStatus.Disabled;
     CostEnergy       = costEnergy;
     CostEnergyPerSec = costEnergyPerSec;
     Channeled        = new CounterObject(channeled);
     Cooldown         = new CounterObject(cooldown);
     PushSycle        = new CounterObject(pushSycle);
     PushPower        = pushPower;
     Range            = range;
 }
예제 #19
0
 /// <summary>
 /// 新增碎裂特性,擁有此特性的物件每回合會在原位置產生四散的炸彈
 /// </summary>
 /// <param name="duration">持續時間(毫秒),小於0為永久</param>
 /// <param name="buildTime">生產週期(毫秒)</param>
 /// <param name="bombCount">每回合產生炸彈數量</param>
 /// <param name="bombWidth">炸彈寬度</param>
 /// <param name="bombHeight">炸彈高度</param>
 /// <param name="bombSpeedMax">炸彈移動速度最大值</param>
 /// <param name="bombSpeedMin">炸彈移動速度最小值</param>
 /// <param name="bombLifeMax">炸彈生命週期最大值</param>
 /// <param name="bombLifeMin">炸彈生命週期最小值</param>
 public PropertyBomber(int duration, int buildTime, int bombCount, int bombWidth, int bombHeight, int bombSpeedMin, int bombSpeedMax, int bombLifeMin, int bombLifeMax)
 {
     BuildTime          = new CounterObject(buildTime);
     DurationTime.Limit = duration;
     BombCount          = bombCount;
     BombWidth          = bombWidth;
     BombHeight         = bombHeight;
     BombSpeedMax       = bombSpeedMax;
     BombSpeedMin       = bombSpeedMin;
     BombLifeMax        = bombLifeMax;
     BombLifeMin        = bombLifeMin;
     BreakAfterDead     = false;
 }
예제 #20
0
 /// <summary>
 /// 新增碎裂特性,擁有此特性的物件每回合會在原位置產生四散的碎片
 /// </summary>
 /// <param name="duration">持續時間(毫秒),小於0為永久</param>
 /// <param name="buildTime">生產週期(毫秒)</param>
 /// <param name="scrapCount">每回合產生碎片數量</param>
 /// <param name="scrapWidth">碎片寬度</param>
 /// <param name="scrapHeight">碎片高度</param>
 /// <param name="scrapSpeedMax">碎片移動速度最大值</param>
 /// <param name="scrapSpeedMin">碎片移動速度最小值</param>
 /// <param name="scrapLifeMax">碎片生命週期最大值</param>
 /// <param name="scrapLifeMin">碎片生命週期最小值</param>
 public PropertyScraping(int duration, int buildTime, int scrapCount, int scrapWidth, int scrapHeight, int scrapSpeedMin, int scrapSpeedMax, int scrapLifeMin, int scrapLifeMax)
 {
     BuildTime          = new CounterObject(buildTime);
     DurationTime.Limit = duration;
     ScrapCount         = scrapCount;
     ScrapWidth         = scrapWidth;
     ScrapHeight        = scrapHeight;
     ScrapSpeedMax      = scrapSpeedMax;
     ScrapSpeedMin      = scrapSpeedMin;
     ScrapLifeMax       = scrapLifeMax;
     ScrapLifeMin       = scrapLifeMin;
     BreakAfterDead     = false;
 }
예제 #21
0
 /// <summary>
 /// 新增崩塌特性且使用所有者顏色,擁有此特性的物件死亡時會逐漸縮小並碎裂
 /// </summary>
 /// <param name="buildTime">產生碎片週期(毫秒)</param>
 /// <param name="scrapCount">每回合產生碎片數量</param>
 /// <param name="shrinkTime">縮小時間(毫秒)</param>
 /// <param name="scrapWidth">碎片寬度</param>
 /// <param name="scrapHeight">碎片高度</param>
 /// <param name="deadType">符合指定的死亡方式才會觸發</param>
 /// <param name="scrapSpeedMax">碎片移動速度最大值</param>
 /// <param name="scrapSpeedMin">碎片移動速度最小值</param>
 /// <param name="scrapLifeMax">碎片生命週期最大值</param>
 /// <param name="scrapLifeMin">碎片生命週期最小值</param>
 public PropertyDeadCollapse(int scrapCount, int shrinkTime, int buildTime, int scrapWidth, int scrapHeight, ObjectDeadType deadType, int scrapSpeedMin, int scrapSpeedMax, int scrapLifeMin, int scrapLifeMax)
 {
     DeadType       = deadType;
     BuildTime      = buildTime;
     ScrapCount     = scrapCount;
     ScrapWidth     = scrapWidth;
     ScrapHeight    = scrapHeight;
     ShrinkTime     = new CounterObject(shrinkTime);
     ScrapSpeedMax  = scrapSpeedMax;
     ScrapSpeedMin  = scrapSpeedMin;
     ScrapLifeMax   = scrapLifeMax;
     ScrapLifeMin   = scrapLifeMin;
     BreakAfterDead = false;
 }
예제 #22
0
        /// <summary>
        /// 新增基本場景物件
        /// </summary>
        public SceneBase()
        {
            SetStyle(ControlStyles.UserPaint, true);
            SetStyle(ControlStyles.AllPaintingInWmPaint, true);
            InitializeComponent();

            SceneSlow        = 1;
            DefaultCursor    = Cursors.Default;
            IntervalOfRound  = Global.DefaultIntervalOfRound;
            UIObjects        = new ObjectCollection(this);
            EffectObjects    = new EffectCollection(this);
            GameObjects      = new ObjectCollection(this);
            DrawClearCount   = new CounterObject(20); // 計次
            RoundTimer.Tick += RoundTimer_Tick;
        }
예제 #23
0
 /// <summary>
 /// 新增虛擬物件,會逐漸縮小直到消失
 /// </summary>
 /// <param name="x">物件位置X</param>
 /// <param name="y">物件位置Y</param>
 /// <param name="baseWidth">原始寬度</param>
 /// <param name="baseHeight">原始高度</param>
 /// <param name="diffusionWidth">擴散寬度</param>
 /// <param name="diffusionHeight">擴散高度</param>
 /// <param name="diffusionTime">擴散時間(毫秒)</param>
 /// <param name="fadeTime">消失時間(毫秒)</param>
 /// <param name="drawObject">繪製物件</param>
 /// <param name="moveObject">移動物件</param>
 public ObjectWave(float x, float y, int baseWidth, int baseHeight, int diffusionWidth, int diffusionHeight, int diffusionTime, int fadeTime, DrawBase drawObject, MoveBase moveObject) :
     base(drawObject, moveObject)
 {
     Layout.CollisonShape = ShapeType.Ellipse;
     Layout.Anchor        = DirectionType.Center;
     Layout.X             = x;
     Layout.Y             = y;
     Layout.Width         = baseWidth;
     Layout.Height        = baseHeight;
     BaseWidth            = baseWidth;
     BaseHeight           = baseHeight;
     BaseOpacity          = 1;
     DiffusionWidth       = diffusionWidth;
     DiffusionHeight      = diffusionHeight;
     DiffusionOpacity     = 1;
     FadeOpacity          = 1;
     DiffusionTime        = new CounterObject(diffusionTime);
     FadeTime             = new CounterObject(fadeTime);
 }
예제 #24
0
 public DrawBall(int amimation)
 {
     Animation = new CounterObject(amimation);
 }
예제 #25
0
 /// <summary>
 /// 建立蛙行移動物件,依規律時間移動
 /// </summary>
 /// <param name="target">追蹤目標</param>
 /// <param name="weight">阻力,最終移動速度會受到此值影響(finalSpeed = speeed/Weight)</param>
 /// <param name="speed">移動速度,決定每個移動調整值的最大距離</param>
 /// <param name="offsetsLimit">移動調整值列表最大數量</param>
 public MoveFrog(ITargetability target, float weight, float speed, int offsetsLimit, int moveTime)
     : base(target, weight, speed, offsetsLimit)
 {
     _MoveTime = new CounterObject(moveTime);
 }
예제 #26
0
 /// <summary>
 /// 新增碰撞特性,擁有此特性的物件十分接近的人時會增加分數
 /// </summary>
 /// <param name="skipTime">連續檢測間格時間</param>
 public PropertySmallTouch(int skipTime)
 {
     _SkipTime = new CounterObject(skipTime, skipTime);
 }
예제 #27
0
 /// <summary>
 /// 場景關卡等級資訊
 /// </summary>
 /// <param name="sceneID">場景ID</param>
 /// <param name="level">關卡等級</param>
 /// <param name="playingTime">遊戲時間限制(毫秒)</param>
 public ScenePlayingInfo(string sceneID, int level, int playingTime)
 {
     PlayingTime = new CounterObject(playingTime, 0, false);
     SceneID     = sceneID;
     Level       = level;
 }