浏览代码

Made Clone color filter identical to H3

Ivan Savenko 3 年之前
父节点
当前提交
814f6ed684
共有 3 个文件被更改,包括 26 次插入26 次删除
  1. 11 11
      client/battle/BattleAnimationClasses.cpp
  2. 2 1
      client/battle/BattleAnimationClasses.h
  3. 13 14
      client/battle/CreatureAnimation.cpp

+ 11 - 11
client/battle/BattleAnimationClasses.cpp

@@ -603,17 +603,17 @@ void FadingAnimation::nextFrame()
 	float delta    = elapsed / fullTime;
 	progress += delta;
 
-	if (progress > 1.0f)
-		progress = 1.0f;
-
-	uint8_t blueFactor = stack->cloned ? 0 : 255;
-	uint8_t blueAdded  = stack->cloned ? 255 : 0;
-	uint8_t alpha = CSDL_Ext::lerp(from, dest, progress);
-
-	ColorShifterMultiplyAndAdd shifterFade ({255, 255, blueFactor, alpha}, {0, 0, blueAdded, 0});
-	stackAnimation(stack)->shiftColor(&shifterFade);
-
-	if (progress == 1.0f)
+	if (progress > 1.0f)
+		progress = 1.0f;
+
+	uint8_t factor = stack->cloned ? 128 : 255;
+	uint8_t blue   = stack->cloned ? 128 : 0;
+	uint8_t alpha  = CSDL_Ext::lerp(from, dest, progress);
+
+	ColorShifterMultiplyAndAdd shifterFade ({factor, factor, factor, alpha}, {0, 0, blue, 0});
+	stackAnimation(stack)->shiftColor(&shifterFade);
+
+	if (progress == 1.0f)
 		delete this;
 }
 

+ 2 - 1
client/battle/BattleAnimationClasses.h

@@ -126,12 +126,13 @@ public:
 /// Hand-to-hand attack
 class MeleeAttackAnimation : public AttackAnimation
 {
+	bool multiAttack;
 public:
 	bool init() override;
 	void nextFrame() override;
 	void playSound() override;
 
-	MeleeAttackAnimation(BattleInterface & owner, const CStack * attacker, BattleHex _dest, const CStack * _attacked);
+	MeleeAttackAnimation(BattleInterface & owner, const CStack * attacker, BattleHex _dest, const CStack * _attacked, bool multiAttack);
 };
 
 /// Base class for all animations that play during stack movement

+ 13 - 14
client/battle/CreatureAnimation.cpp

@@ -315,20 +315,19 @@ static SDL_Color addColors(const SDL_Color & base, const SDL_Color & over)
 			ui8(over.a + base.a * (255 - over.a) / 256)
 			);
 }
-
-void CreatureAnimation::genSpecialPalette(IImage::SpecialPalette & target)
-{
-	target[0] = genBorderColor(getBorderStrength(elapsedTime), border);
-	target[1] = genShadow(shadowAlpha / 2);
-	target[2] = genShadow(shadowAlpha / 2);
-	target[3] = genShadow(shadowAlpha);
-	target[4] = genShadow(shadowAlpha);
-	target[5] = genBorderColor(getBorderStrength(elapsedTime), border);
-	target[6] = addColors(genShadow(shadowAlpha),     genBorderColor(getBorderStrength(elapsedTime), border));
-	target[7] = addColors(genShadow(shadowAlpha / 2), genBorderColor(getBorderStrength(elapsedTime), border));
-}
-
-void CreatureAnimation::nextFrame(Canvas & canvas, bool facingRight)
+
+void CreatureAnimation::genSpecialPalette(IImage::SpecialPalette & target)
+{
+	target[0] = genShadow(shadowAlpha / 2);
+	target[1] = genShadow(shadowAlpha / 2);
+	target[2] = genShadow(shadowAlpha);
+	target[3] = genShadow(shadowAlpha);
+	target[4] = genBorderColor(getBorderStrength(elapsedTime), border);
+	target[5] = addColors(genShadow(shadowAlpha),     genBorderColor(getBorderStrength(elapsedTime), border));
+	target[6] = addColors(genShadow(shadowAlpha / 2), genBorderColor(getBorderStrength(elapsedTime), border));
+}
+
+void CreatureAnimation::nextFrame(Canvas & canvas, bool facingRight)
 {
 	size_t frame = static_cast<size_t>(floor(currentFrame));