forked from gelopfalcon/solidity-eth-challenge
-
Notifications
You must be signed in to change notification settings - Fork 0
/
PokemonFactory.sol
104 lines (88 loc) · 2.75 KB
/
PokemonFactory.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
contract PokemonFactory {
struct Pokemon {
uint id;
string name;
Ability[] abilities;
PokemonType[] pokemonTypes;
PokemonType[] weaknesses;
}
struct Ability {
string name;
string description;
}
enum PokemonType {
BUG,
DARK,
DRAGON,
ELECTRIC,
FAIRY,
FIGHTING,
FIRE,
FLYING,
GHOST,
GRASS,
GROUND,
ICE,
NORMAL,
POISON,
PSYCHIC,
ROCK,
STEEL,
WATER
}
Pokemon[] private pokemons;
mapping (uint => address) public pokemonToOwner; //guarda el id del pokemon vs el address del que esta ejecutando el smart contract, el address viene del frontend
mapping (address => uint) ownerPokemonCount;// vamos a a tener un conteo de la cantidad de pokemones por address.
event eventNewPokemon (Pokemon pokemon);
function createPokemon (string memory _name, uint _id) public {
require(_id > 0, "Pokemon's id should be greater than 0");
require(bytes(_name).length > 2, "Pokemon's name should have more that two characters.");
Pokemon storage pokemon = pokemons.push();
pokemon.id = _id;
pokemon.name = _name;
pokemonToOwner[_id] = msg.sender;
ownerPokemonCount[msg.sender]++;
emit eventNewPokemon (pokemon);
}
function addAbilitiesToPokemon(uint _idPokemon, Ability[] memory _abilities) public {
for (uint256 i; i<pokemons.length; i++) {
if (pokemons[i].id == _idPokemon) {
for (uint j = 0; j < _abilities.length; j++) {
pokemons[i].abilities.push(_abilities[j]);
}
break;
}
}
}
function addTypesToPokemon(uint _idPokemon, PokemonType[] memory _pokemonTypes) public {
for (uint256 i; i<pokemons.length; i++) {
if (pokemons[i].id == _idPokemon) {
for (uint j = 0; j < _pokemonTypes.length; j++) {
pokemons[i].pokemonTypes.push(_pokemonTypes[j]);
}
break;
}
}
}
function addWeaknessesToPokemon(uint _idPokemon, PokemonType[] memory _pokemonWeaknesses) public {
for (uint256 i; i<pokemons.length; i++) {
if (pokemons[i].id == _idPokemon) {
for (uint j = 0; j < _pokemonWeaknesses.length; j++) {
pokemons[i].weaknesses.push(_pokemonWeaknesses[j]);
}
break;
}
}
}
function getAllPokemons() public view returns (Pokemon[] memory) {
return pokemons;
}
function getResult() public pure returns(uint product, uint sum){
uint a = 1;
uint b = 2;
product = a * b;
sum = a + b;
}
}