Skip to content

Commit 68f9446

Browse files
committed
use virtual and override instead of new
1 parent 34977ca commit 68f9446

File tree

3 files changed

+32
-32
lines changed

3 files changed

+32
-32
lines changed

src/Map/Map.cs

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,9 @@ public MapBlock(ushort x, ushort y, SukaLambdaEngine? vm)
6464
this.vm = vm;
6565
}
6666

67-
public bool AllowEntrancy(Character character,
67+
public virtual bool AllowEntrancy(Character character,
6868
Heading?[] movements, ushort movementIndexEnteringThisBlock) => true;
69-
public bool AllowDeparture(Character character,
69+
public virtual bool AllowDeparture(Character character,
7070
Heading?[] movements, ushort movementIndexEnteringThisBlock) => true;
7171

7272
/// <summary>
@@ -76,7 +76,7 @@ public bool AllowDeparture(Character character,
7676
/// <param name="movements"></param>
7777
/// <param name="movementIndexEnteringThisBlock">0 if the movement starts from this block</param>
7878
/// <param name="vm"></param>
79-
public void OnCharacterMovingIn(Character character,
79+
public virtual void OnCharacterMovingIn(Character character,
8080
Heading?[] movements, ushort movementIndexEnteringThisBlock)
8181
{ }
8282
/// <summary>
@@ -86,14 +86,14 @@ public void OnCharacterMovingIn(Character character,
8686
/// <param name="movements"></param>
8787
/// <param name="movementIndexLeavingThisBlock">0 if the movement starts from this block</param>
8888
/// <param name="vm"></param>
89-
public void OnCharacterMovingOut(Character character,
89+
public virtual void OnCharacterMovingOut(Character character,
9090
Heading?[] movements, ushort movementIndexLeavingThisBlock)
9191
{ }
92-
public void OnCharacterMovingOutOfMapFromThisBlock(Character character,
92+
public virtual void OnCharacterMovingOutOfMapFromThisBlock(Character character,
9393
Heading?[] movements, ushort movementIndexLeavingThisBlock)
9494
{ }
9595

96-
public string RenderAsText(Language lang) => blockAsText;
96+
public virtual string RenderAsText(Language lang) => blockAsText;
9797
}
9898

9999
[Index(nameof(positionX))]
@@ -343,10 +343,7 @@ public void CharacterMove(Character character, Heading[] headings, ushort[] dist
343343
// You can also change distances by yourself!
344344

345345
Tuple<ushort, ushort> currentPosition = new(x, y);
346-
dynamic? block = null;
347-
if (this.blocks.ContainsKey(currentPosition))
348-
block = blocks[currentPosition];
349-
if (block != null)
346+
if (this.blocks.TryGetValue(currentPosition, out MapBlock? block))
350347
{
351348
if (outOfMap)
352349
block.OnCharacterMovingOutOfMapFromThisBlock(character, headings, i);
@@ -374,16 +371,16 @@ public void CharacterMove(Character character, Heading[] headings, ushort[] dist
374371
if (vm == null) break;
375372
character.OnMoveInMap(vm, currentPosition, plannedHeading, destination, headingResult);
376373
if (character.removedFromMap || character.statusTemporary.Mobility <= 0) break;
377-
if (blocks.ContainsKey(destination)) // blockTo
374+
if (this.blocks.TryGetValue(destination, out block)) // blockTo
378375
{
379-
block = blocks[destination];
380376
if (block != null && !block.AllowEntrancy(character, headings, i))
381377
{ // cancel movement
382378
x -= movement.Item1;
383379
y -= movement.Item2;
384380
break;
385381
}
386-
block.OnCharacterMovingIn(character, headings, i);
382+
if (block != null)
383+
block.OnCharacterMovingIn(character, headings, i);
387384
}
388385
if (character.removedFromMap || character.statusTemporary.Mobility <= 0) break;
389386
}
@@ -409,8 +406,7 @@ public string RenderAsText(Language lang, Alignment? alignment = null)
409406
foreach (var kvp in blocks)
410407
{
411408
if (kvp.Key.Item1 >= width || kvp.Key.Item2 >= height) continue;
412-
dynamic block = kvp.Value; // kvp.Value.RenderAsText(lang) returns "⚪"
413-
string text = block.RenderAsText(lang);
409+
string text = kvp.Value.RenderAsText(lang);
414410
if (text == "") continue;
415411
if (text.Count(ch => ch == '\n') == 0)
416412
text = string.Join("\n", Enumerable.Repeat(text, basicBlockOccupiesRows));

src/Map/Predefined/Island68.cs

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -119,27 +119,31 @@ public Island68(string databasePath, SukaLambdaEngine? vm = null) : base(databas
119119

120120
public class Warehouse : MapBlock
121121
{
122-
public new Dictionary<Altitude, ushort> mobilityCost = new() { { Altitude.Surface, 0 } };
123-
public Warehouse(ushort x, ushort y, SukaLambdaEngine? vm = null) : base(x, y, vm) { }
124-
public new string RenderAsText(Language lang) => "仓";
122+
public Warehouse(ushort x, ushort y, SukaLambdaEngine? vm = null) : base(x, y, vm)
123+
{
124+
mobilityCost = new() { { Altitude.Surface, 0 } };
125+
}
126+
public override string RenderAsText(Language lang) => "仓";
125127
}
126128

127129
public class Forest : MapBlock
128130
{
129-
public new Dictionary<Altitude, ushort> mobilityCost = new() { {Altitude.Surface, 3} };
130-
public Forest(ushort x, ushort y, SukaLambdaEngine? vm = null) : base(x, y, vm) { }
131-
public new string RenderAsText(Language lang) => "森林"[(x+y+((y*3<vm?.map?.height) ? 1 : 0)) % 2].ToString();
131+
public Forest(ushort x, ushort y, SukaLambdaEngine? vm = null) : base(x, y, vm)
132+
{
133+
mobilityCost = new() { { Altitude.Surface, 3 } };
134+
}
135+
public override string RenderAsText(Language lang) => "森林"[(x+y+((y*3<vm?.map?.height) ? 1 : 0)) % 2].ToString();
132136
}
133137
public class Lawn : MapBlock
134138
{
135139
public Lawn(ushort x, ushort y, SukaLambdaEngine? vm = null) : base(x, y, vm) { }
136-
public new string RenderAsText(Language lang) => "草";//"🌼🌻"[(x+1) % 2].ToString();
140+
public override string RenderAsText(Language lang) => "草";//"🌼🌻"[(x+1) % 2].ToString();
137141
}
138142
public class Water : MapBlock
139143
{
140-
public new bool AllowEntrancy(Character character,
144+
public override bool AllowEntrancy(Character character,
141145
Heading?[] movements, ushort movementIndexEnteringThisBlock) => false;
142146
public Water(ushort x, ushort y, SukaLambdaEngine? vm = null) : base(x, y, vm) { }
143-
public new string RenderAsText(Language lang) => "水";
147+
public override string RenderAsText(Language lang) => "水";
144148
}
145149
}

src/Skill/Skill.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ public abstract class Skill : IRenderText
1818
public Skill(Character owner) { this.owner = owner; }
1919

2020
/// <returns>null if the target is valid; A description for reason if the target is invalid</returns>
21-
public string? ReasonForInvalidTarget(Character fromCharacter, Character toCharacter, SukaLambdaEngine vm) => "";
22-
public HashSet<Character> ValidTargets(Character fromCharacter, SukaLambdaEngine vm) => new HashSet<Character>();
23-
public Character[] AutoSelectTargets(Character fromCharacter, SukaLambdaEngine vm) => new Character[0];
21+
public virtual string? ReasonForInvalidTarget(Character fromCharacter, Character toCharacter, SukaLambdaEngine vm) => "";
22+
public virtual HashSet<Character> ValidTargets(Character fromCharacter, SukaLambdaEngine vm) => new HashSet<Character>();
23+
public virtual Character[] AutoSelectTargets(Character fromCharacter, SukaLambdaEngine vm) => new Character[0];
2424

2525
/// <summary>
2626
/// For vm to plan a skill.
@@ -31,7 +31,7 @@ public abstract class Skill : IRenderText
3131
/// <param name="vm"></param>
3232
/// <param name="metaArgs"></param>
3333
/// <returns></returns>
34-
public SkillExecution PlanUseSkill(Character fromCharacter, List<Character> plannedTargets, SukaLambdaEngine vm, object[]? metaArgs = null) => new(fromCharacter, this, plannedTargets.ToArray(), metaArgs);
34+
public virtual SkillExecution PlanUseSkill(Character fromCharacter, List<Character> plannedTargets, SukaLambdaEngine vm, object[]? metaArgs = null) => new(fromCharacter, this, plannedTargets.ToArray(), metaArgs);
3535

3636
/// <summary>
3737
/// Used by human to input commands.
@@ -56,11 +56,11 @@ public abstract class Skill : IRenderText
5656
/// <param name="metaArgs"></param>
5757
/// <returns>The planned numeric effects. The length can be shorter than <see cref="SkillExecution.desiredTargets"/></returns>
5858
public abstract List<NumericEffect> Execute(SkillExecution skillExecution, SukaLambdaEngine vm, object[]? metaArgs = null);
59-
public abstract string WriteLogAtStart(SukaLambdaEngine vm);
60-
public abstract string WriteLogForEffect(NumericEffect effect, SukaLambdaEngine vm);
61-
public abstract string WriteLogAtEnd(SukaLambdaEngine vm);
59+
public virtual string WriteLogAtStart(SukaLambdaEngine vm) => "";
60+
public virtual string WriteLogForEffect(NumericEffect effect, SukaLambdaEngine vm) => "";
61+
public virtual string WriteLogAtEnd(SukaLambdaEngine vm) => "";
6262
/// <returns>Just the skill name in different languages</returns>
63-
public string RenderAsText(Language lang) => "A fantastic skill!";
63+
public virtual string RenderAsText(Language lang) => $"A fantastic skill {this.GetType().Name}!";
6464
}
6565

6666
/// <summary>

0 commit comments

Comments
 (0)