渔民小镇 1 jaar geleden
bovenliggende
commit
7011e7532c

+ 6 - 0
logic/a-logic-common/pom.xml

@@ -27,6 +27,12 @@
             <version>${project.parent.version}</version>
         </dependency>
 
+        <dependency>
+            <groupId>io.github.lmlx66</groupId>
+            <artifactId>yitter-idgenerator-spring-boot-starter</artifactId>
+            <version>1.1.2-RELEASE</version>
+        </dependency>
+
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-data-mongodb</artifactId>

+ 87 - 0
logic/person-logic/src/main/java/com/iohao/mmo/person/entity/BasicsProperty.java

@@ -0,0 +1,87 @@
+/*
+ * ioGame
+ * Copyright (C) 2021 - 2023  渔民小镇 (262610965@qq.com、luoyizhu@gmail.com) . All Rights Reserved.
+ * # iohao.com . 渔民小镇
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ */
+package com.iohao.mmo.person.entity;
+
+import lombok.*;
+import lombok.experimental.FieldDefaults;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import java.util.Objects;
+
+/**
+ * 基础属性
+ * <pre>
+ *     人物的基本属性、英雄的基本属性
+ * </pre>
+ *
+ * @author 渔民小镇
+ * @date 2023-07-24
+ */
+@Data
+@Document
+@FieldDefaults(level = AccessLevel.PRIVATE)
+public class BasicsProperty {
+    @Id
+    String id;
+    /** 生命值 */
+    int hp;
+    /** 魔法值 */
+    int mp;
+    /** 物理攻击 */
+    int physicsAttack;
+    /** 物理防御 */
+    int physicsDefense;
+    /** 魔法攻击 */
+    int magicAttack;
+    /** 魔法防御 */
+    int magicDefense;
+    /** 治疗强度 */
+    int treatAttack;
+    /** 封印强度 */
+    int sealAttack;
+    /** 封印防御(抵抗封印) */
+    int sealDefense;
+    /** 速度 */
+    int speed;
+    /** 怒气 */
+    int anger;
+
+    public BasicsProperty plus(BasicsProperty basicsProperty) {
+
+        if (Objects.isNull(basicsProperty)) {
+            basicsProperty = new BasicsProperty();
+        }
+
+        BasicsProperty the = new BasicsProperty();
+        the.hp = this.hp + basicsProperty.hp;
+        the.mp = this.mp + basicsProperty.mp;
+        the.physicsAttack = this.physicsAttack + basicsProperty.physicsAttack;
+        the.physicsDefense = this.physicsDefense + basicsProperty.physicsDefense;
+        the.magicAttack = this.magicAttack + basicsProperty.magicAttack;
+        the.magicDefense = this.magicDefense + basicsProperty.magicDefense;
+        the.treatAttack = this.treatAttack + basicsProperty.treatAttack;
+        the.sealAttack = this.sealAttack + basicsProperty.sealAttack;
+        the.sealDefense = this.sealDefense + basicsProperty.sealDefense;
+        the.speed = this.speed + basicsProperty.speed;
+        the.anger = this.anger + basicsProperty.anger;
+
+        return the;
+    }
+}

+ 10 - 7
logic/person-logic/src/main/java/com/iohao/mmo/person/entity/PersonEntity.java → logic/person-logic/src/main/java/com/iohao/mmo/person/entity/Hero.java

@@ -19,17 +19,20 @@
 package com.iohao.mmo.person.entity;
 
 import lombok.AccessLevel;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.Data;
 import lombok.experimental.FieldDefaults;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
 
 /**
  * @author 渔民小镇
- * @date 2023-07-24
+ * @date 2023-07-26
  */
-@Getter
-@Setter
+@Data
+@Document
 @FieldDefaults(level = AccessLevel.PRIVATE)
-public class PersonEntity {
-    PersonBasicPropertyEntity basicProperty;
+public class Hero {
+    @Id
+    String id;
+    BasicsProperty basicsProperty;
 }

+ 17 - 29
logic/person-logic/src/main/java/com/iohao/mmo/person/entity/PersonBasicPropertyEntity.java → logic/person-logic/src/main/java/com/iohao/mmo/person/entity/Person.java

@@ -19,44 +19,32 @@
 package com.iohao.mmo.person.entity;
 
 import lombok.AccessLevel;
+import lombok.Data;
 import lombok.Getter;
 import lombok.Setter;
-import lombok.ToString;
 import lombok.experimental.FieldDefaults;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.DBRef;
 import org.springframework.data.mongodb.core.mapping.Document;
+import org.springframework.data.mongodb.core.mapping.DocumentReference;
+
+import java.util.List;
 
 /**
- * 人物基础属性
- *
  * @author 渔民小镇
  * @date 2023-07-24
  */
-@Getter
-@Setter
+@Data
 @Document
-@ToString
 @FieldDefaults(level = AccessLevel.PRIVATE)
-public class PersonBasicPropertyEntity {
-    /** 生命值 */
-    int hp;
-    /** 魔法值 */
-    int mp;
-    /** 物理攻击 */
-    int physicsAttack;
-    /** 物理防御 */
-    int physicsDefense;
-    /** 魔法攻击 */
-    int magicAttack;
-    /** 魔法防御 */
-    int magicDefense;
-    /** 治疗强度 */
-    int treatAttack;
-    /** 封印强度 */
-    int sealAttack;
-    /** 封印防御(抵抗封印) */
-    int sealDefense;
-    /** 速度 */
-    int speed;
-    /** 怒气 */
-    int anger;
+public class Person {
+    @Id
+    String id;
+    /** 基本属性 */
+    BasicsProperty basicProperty;
+    /** 英雄列表 */
+    @DocumentReference
+    List<Hero> heroes;
+    /** 当前使用的英雄 */
+    Hero currentHero;
 }

+ 5 - 5
logic/person-logic/src/main/java/com/iohao/mmo/person/service/PersonMapper.java

@@ -18,9 +18,9 @@
  */
 package com.iohao.mmo.person.service;
 
-import com.iohao.mmo.person.entity.PersonBasicPropertyEntity;
-import com.iohao.mmo.person.entity.PersonEntity;
-import com.iohao.mmo.person.proto.PersonBasicPropertyMessage;
+import com.iohao.mmo.person.entity.BasicsProperty;
+import com.iohao.mmo.person.entity.Person;
+import com.iohao.mmo.person.proto.BasicPropertyMessage;
 import com.iohao.mmo.person.proto.PersonMessage;
 import org.mapstruct.Mapper;
 
@@ -30,7 +30,7 @@ import org.mapstruct.Mapper;
  */
 @Mapper
 public interface PersonMapper {
-    PersonMessage convertPerson(PersonEntity person);
+    PersonMessage convertPerson(Person person);
 
-    PersonBasicPropertyMessage convertBasicProperty(PersonBasicPropertyEntity basicProperty);
+    BasicPropertyMessage convertBasicProperty(BasicsProperty basicProperty);
 }

+ 7 - 7
logic/person-logic/src/main/java/com/iohao/mmo/person/service/PersonService.java

@@ -18,8 +18,8 @@
  */
 package com.iohao.mmo.person.service;
 
-import com.iohao.mmo.person.entity.PersonBasicPropertyEntity;
-import com.iohao.mmo.person.entity.PersonEntity;
+import com.iohao.mmo.person.entity.BasicsProperty;
+import com.iohao.mmo.person.entity.Person;
 import lombok.AccessLevel;
 import lombok.Getter;
 import lombok.Setter;
@@ -33,17 +33,17 @@ import lombok.experimental.FieldDefaults;
 @Setter
 @FieldDefaults(level = AccessLevel.PRIVATE)
 public class PersonService {
-    public PersonEntity getPersonEntity(String userId) {
+    public Person getPersonEntity(String userId) {
         //  临时数据
-        PersonBasicPropertyEntity basicProperty = getBasicPropertyTemp();
+        BasicsProperty basicProperty = getBasicPropertyTemp();
 
-        PersonEntity person = new PersonEntity();
+        Person person = new Person();
         person.setBasicProperty(basicProperty);
         return person;
     }
 
-    private static PersonBasicPropertyEntity getBasicPropertyTemp() {
-        PersonBasicPropertyEntity basicProperty = new PersonBasicPropertyEntity();
+    public static BasicsProperty getBasicPropertyTemp() {
+        BasicsProperty basicProperty = new BasicsProperty();
         basicProperty.setHp(100);
         basicProperty.setMp(100);
         basicProperty.setPhysicsAttack(20);

+ 0 - 43
logic/person-logic/src/test/java/com/iohao/mmo/person/entity/PersonEntityTest.java

@@ -1,43 +0,0 @@
-package com.iohao.mmo.person.entity;
-
-import jakarta.annotation.Resource;
-import lombok.extern.slf4j.Slf4j;
-import org.junit.jupiter.api.Test;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.data.mongodb.core.MongoTemplate;
-import org.springframework.data.mongodb.core.query.Criteria;
-import org.springframework.data.mongodb.core.query.Query;
-
-import java.util.List;
-
-/**
- * @author 渔民小镇
- * @date 2023-07-26
- */
-@Slf4j
-@SpringBootTest
-public class PersonEntityTest {
-    @Resource
-    MongoTemplate mongoTemplate;
-
-
-    @Test
-    void test1() {
-
-        PersonBasicPropertyEntity person = new PersonBasicPropertyEntity();
-        person.setAnger(1);
-
-//        mongoTemplate.save(person);
-
-
-        Criteria criteria = Criteria.where("anger").is(1);
-        Query query = new Query(criteria);
-
-        List<PersonBasicPropertyEntity> entities = mongoTemplate.find(query, PersonBasicPropertyEntity.class);
-
-        log.info("students : {}", entities.size());
-        for (PersonBasicPropertyEntity person1 : entities) {
-            System.out.println(person1);
-        }
-    }
-}

+ 97 - 0
logic/person-logic/src/test/java/com/iohao/mmo/person/entity/PersonTest.java

@@ -0,0 +1,97 @@
+package com.iohao.mmo.person.entity;
+
+import com.hy.corecode.idgen.WFGIdGenerator;
+import com.iohao.mmo.person.service.PersonService;
+import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+
+import java.util.List;
+import java.util.Objects;
+
+import static org.springframework.data.mongodb.core.query.Criteria.where;
+
+/**
+ * @author 渔民小镇
+ * @date 2023-07-26
+ */
+@Slf4j
+@SpringBootTest
+public class PersonTest {
+    @Resource
+    MongoTemplate mongoTemplate;
+    @Autowired
+    private WFGIdGenerator idGenerator;
+
+    @Test
+    void test0() {
+        for (int i = 0; i < 10; i++) {
+            long next = idGenerator.next();
+            log.info("next : {}", next);
+        }
+
+    }
+
+    @Test
+    void test1() {
+
+        BasicsProperty person = new BasicsProperty();
+        person.setId("abc");
+        person.setAnger(1);
+
+        mongoTemplate.save(person);
+
+
+        Criteria criteria = where("anger").is(1);
+        Query query = new Query(criteria);
+
+        List<BasicsProperty> entities = mongoTemplate.find(query, BasicsProperty.class);
+
+        log.info("students : {}", entities.size());
+        for (BasicsProperty person1 : entities) {
+            System.out.println(person1);
+        }
+    }
+
+    @Test
+    void testPerson() {
+        BasicsProperty basicProperty = PersonService.getBasicPropertyTemp();
+
+        Hero hero = getHero(basicProperty);
+
+        String heroId = "hero-1";
+        Hero byId = mongoTemplate.findById(heroId, Hero.class);
+        Objects.requireNonNull(byId);
+        BasicsProperty plus = basicProperty.plus(byId.getBasicsProperty());
+
+        Hero currentHero = new Hero();
+        currentHero.setId(heroId);
+        currentHero.setBasicsProperty(plus);
+
+        Person person = new Person();
+        person.setId("person-1");
+        person.setBasicProperty(basicProperty);
+        person.setHeroes(List.of(hero));
+        person.setCurrentHero(currentHero);
+
+        mongoTemplate.save(person);
+    }
+
+    private Hero getHero(BasicsProperty basicProperty) {
+        Hero hero = new Hero();
+        hero.setId("hero-1");
+        hero.setBasicsProperty(basicProperty);
+        mongoTemplate.save(hero);
+
+        Hero hero2 = new Hero();
+        hero2.setId("hero-2");
+        hero2.setBasicsProperty(basicProperty);
+        mongoTemplate.save(hero2);
+        return hero;
+    }
+}

+ 1 - 1
provide/person-provide/src/main/java/com/iohao/mmo/person/proto/PersonBasicPropertyMessage.java → provide/person-provide/src/main/java/com/iohao/mmo/person/proto/BasicPropertyMessage.java

@@ -32,7 +32,7 @@ import lombok.experimental.FieldDefaults;
 @ToString
 @ProtobufClass
 @FieldDefaults(level = AccessLevel.PUBLIC)
-public class PersonBasicPropertyMessage {
+public class BasicPropertyMessage {
     /** 生命值 */
     int hp;
     /** 魔法值 */

+ 1 - 1
provide/person-provide/src/main/java/com/iohao/mmo/person/proto/PersonMessage.java

@@ -33,5 +33,5 @@ import lombok.experimental.FieldDefaults;
 public class PersonMessage {
     long userId;
 
-    PersonBasicPropertyMessage basicProperty;
+    BasicPropertyMessage basicProperty;
 }