236 lines
7.4 KiB
Dart
236 lines
7.4 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter/widgets.dart';
|
|
import 'package:pokedex/Consts.dart';
|
|
|
|
enum Generation {
|
|
One,
|
|
Two,
|
|
Three,
|
|
Four,
|
|
Five,
|
|
Six,
|
|
Seven,
|
|
Eight,
|
|
Nine;
|
|
|
|
toSpritePath() {
|
|
switch (this) {
|
|
case Generation.One:
|
|
return 'assets/sprites/gen1';
|
|
case Generation.Two:
|
|
return 'assets/sprites/gen2';
|
|
case Generation.Three:
|
|
return 'assets/sprites/gen3';
|
|
case Generation.Four:
|
|
return 'assets/sprites/gen4';
|
|
case Generation.Five:
|
|
return 'assets/sprites/gen5';
|
|
case Generation.Six:
|
|
return 'assets/sprites/gen6';
|
|
case Generation.Seven:
|
|
return 'assets/sprites/gen7';
|
|
case Generation.Eight:
|
|
return 'assets/sprites/gen8';
|
|
case Generation.Nine:
|
|
return 'assets/sprites/gen9';
|
|
}
|
|
}
|
|
}
|
|
|
|
enum Type {
|
|
Normal(Color.fromARGB(255, 192, 192, 192), Colors.black),
|
|
Fire(Color.fromARGB(255, 255, 0, 0), Colors.black),
|
|
Water(Color.fromARGB(255, 0, 174, 255), Colors.black),
|
|
Electric(Color(0xffFFD700), Colors.black),
|
|
Grass(Color.fromARGB(255, 0, 255, 0), Colors.black),
|
|
Ice(Color.fromARGB(255, 0, 255, 255), Colors.black),
|
|
Fighting(Color.fromARGB(255, 255, 0, 0), Colors.black),
|
|
Poison(Color.fromARGB(255, 128, 0, 128), Colors.black),
|
|
Ground(Color.fromARGB(255, 128, 126, 0), Colors.black),
|
|
Flying(Color.fromARGB(255, 128, 128, 255), Colors.black),
|
|
Psychic(Color.fromARGB(255, 255, 0, 255), Colors.black),
|
|
Bug(Color.fromARGB(255, 128, 128, 0), Colors.black),
|
|
Rock(Color.fromARGB(255, 128, 128, 128), Colors.black),
|
|
Ghost(Color.fromARGB(255, 128, 0, 128), Colors.black),
|
|
Dragon(Color.fromARGB(255, 85, 0, 102), Colors.black),
|
|
Dark(Color.fromARGB(255, 51, 51, 51), Colors.black),
|
|
Steel(Color.fromARGB(255, 192, 192, 192), Colors.black),
|
|
Fairy(Color.fromARGB(255, 255, 102, 255), Colors.black);
|
|
|
|
final Color backgroundColor;
|
|
final Color textColor;
|
|
const Type(this.backgroundColor, this.textColor);
|
|
}
|
|
|
|
class Evolution {
|
|
final int to;
|
|
final int level;
|
|
const Evolution(this.to, this.level);
|
|
}
|
|
|
|
enum LearnType { TM, HM }
|
|
|
|
enum Move {
|
|
Growl(LearnType.TM, Type.Normal, "Growl", 0, 100, 40),
|
|
Tackle(LearnType.TM, Type.Normal, "Tackle", 40, 100, 35),
|
|
VineWhip(LearnType.TM, Type.Grass, "Vine Whip", 45, 100, 25),
|
|
RazorLeaf(LearnType.TM, Type.Grass, "Razor Leaf", 55, 95, 25),
|
|
SolarBeam(LearnType.TM, Type.Grass, "Solar Beam", 120, 100, 10),
|
|
PoisonPowder(LearnType.TM, Type.Poison, "Poison Powder", 0, 75, 35),
|
|
SleepPowder(LearnType.TM, Type.Grass, "Sleep Powder", 0, 75, 15),
|
|
TakeDown(LearnType.TM, Type.Normal, "Take Down", 90, 85, 20),
|
|
DoubleEdge(LearnType.TM, Type.Normal, "Double-Edge", 120, 100, 15),
|
|
LeechSeed(LearnType.TM, Type.Grass, "Leech Seed", 0, 90, 10),
|
|
Growth(LearnType.TM, Type.Normal, "Growth", 0, 0, 20),
|
|
PoisonSting(LearnType.TM, Type.Poison, "Poison Sting", 15, 100, 35),
|
|
StringShot(LearnType.TM, Type.Bug, "String Shot", 0, 95, 40),
|
|
BugBite(LearnType.TM, Type.Bug, "Bug Bite", 60, 100, 20),
|
|
Confusion(LearnType.TM, Type.Psychic, "Confusion", 50, 100, 25);
|
|
|
|
final LearnType type;
|
|
final Type moveType;
|
|
final String moveName;
|
|
final int power;
|
|
final int accuracy;
|
|
final int pp;
|
|
const Move(
|
|
this.type,
|
|
this.moveType,
|
|
this.moveName,
|
|
this.power,
|
|
this.accuracy,
|
|
this.pp,
|
|
);
|
|
}
|
|
|
|
enum Pokemon {
|
|
Bulbasaur(1, Generation.One, [Type.Grass, Type.Poison], Evolution(2, 16)),
|
|
Ivysaur(2, Generation.One, [Type.Grass, Type.Poison], Evolution(3, 32)),
|
|
Venusaur(3, Generation.One, [Type.Grass, Type.Poison], null),
|
|
Charmander(4, Generation.One, [Type.Fire], Evolution(5, 16)),
|
|
Charmeleon(5, Generation.One, [Type.Fire], Evolution(6, 36)),
|
|
Charizard(6, Generation.One, [Type.Fire, Type.Flying], null),
|
|
Squirtle(7, Generation.One, [Type.Water], Evolution(8, 16)),
|
|
Wartortle(8, Generation.One, [Type.Water], Evolution(9, 36)),
|
|
Blastoise(9, Generation.One, [Type.Water], null),
|
|
Caterpie(10, Generation.One, [Type.Bug], Evolution(11, 7)),
|
|
Metapod(11, Generation.One, [Type.Bug], Evolution(12, 10)),
|
|
Butterfree(12, Generation.One, [Type.Bug, Type.Flying], null),
|
|
Weedle(13, Generation.One, [Type.Bug, Type.Poison], Evolution(14, 7)),
|
|
Kakuna(14, Generation.One, [Type.Bug, Type.Poison], Evolution(15, 10)),
|
|
Beedrill(15, Generation.One, [Type.Bug, Type.Poison], null),
|
|
Pidgey(16, Generation.One, [Type.Normal, Type.Flying], Evolution(17, 18)),
|
|
Pidgeotto(17, Generation.One, [Type.Normal, Type.Flying], Evolution(18, 36)),
|
|
Pidgeot(18, Generation.One, [Type.Normal, Type.Flying], null);
|
|
|
|
final int id;
|
|
final Generation generation;
|
|
final List<Type> types;
|
|
final Evolution? evolution;
|
|
bool get hasEvolutions => evolution != null;
|
|
const Pokemon(this.id, this.generation, this.types, this.evolution);
|
|
|
|
String toSpritePath() {
|
|
return '${generation.toSpritePath()}/${name.toLowerCase()}.png';
|
|
}
|
|
|
|
String toDexPath() {
|
|
return 'assets/sprites/gen8/${name.toLowerCase()}.png';
|
|
}
|
|
|
|
String toSpriteShinyPath() {
|
|
return '${generation.toSpritePath()}/${name.toLowerCase()}_shiny.png';
|
|
}
|
|
|
|
Widget getTypeWidgets() {
|
|
List<Widget> widgets = [];
|
|
for (Type type in types) {
|
|
widgets.add(
|
|
ElevatedButton(
|
|
onPressed: () {},
|
|
style: ButtonStyle(
|
|
backgroundColor: WidgetStatePropertyAll(type.backgroundColor),
|
|
foregroundColor: WidgetStatePropertyAll(type.textColor),
|
|
),
|
|
|
|
child: Text(
|
|
type.name,
|
|
style: TextStyle(fontSize: Constants.isMobile ? 16 : 32),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
return Row(children: widgets);
|
|
}
|
|
|
|
List<Widget> getEvolutions(int subID) {
|
|
if (!hasEvolutions) return [];
|
|
|
|
Pokemon ev = Pokemon.values.where((x) => x.id == evolution!.to).first;
|
|
|
|
List<Widget> sprites = [];
|
|
|
|
if (subID == 0) {
|
|
sprites.add(Text("Evolutions: ", style: TextStyle(fontSize: 24)));
|
|
sprites.add(
|
|
Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
Image.asset(
|
|
toDexPath(),
|
|
width: Constants.isMobile ? 64 : 128,
|
|
height: Constants.isMobile ? 64 : 128,
|
|
),
|
|
getTypeWidgets(),
|
|
],
|
|
),
|
|
);
|
|
sprites.add(
|
|
Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
Icon(
|
|
Constants.isMobile ? Icons.arrow_downward : Icons.arrow_forward,
|
|
size: 48,
|
|
),
|
|
Text("Level ${evolution!.level}", style: TextStyle(fontSize: 24)),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
|
|
sprites.add(
|
|
Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
Constants.isMobile
|
|
? Image.asset(ev.toDexPath(), width: 64, height: 64)
|
|
: Image.asset(ev.toDexPath(), width: 128, height: 128),
|
|
ev.getTypeWidgets(),
|
|
],
|
|
),
|
|
);
|
|
|
|
if (ev.hasEvolutions) {
|
|
sprites.add(
|
|
Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
Icon(
|
|
Constants.isMobile ? Icons.arrow_downward : Icons.arrow_forward,
|
|
size: 48,
|
|
),
|
|
Text(
|
|
"Level ${ev.evolution!.level}",
|
|
style: TextStyle(fontSize: 24),
|
|
),
|
|
],
|
|
),
|
|
);
|
|
//sprites.add(Icon(Icons.arrow_forward, size: 48));
|
|
sprites.addAll(ev.getEvolutions(subID + 1));
|
|
}
|
|
|
|
return sprites;
|
|
}
|
|
}
|